2016-05-26 3 views
0

Wenn Benutzer Registrierung mit Registrierungsformular diesmal erhalten, wenn E-Mail bereits in der Datenbank existieren diese zeigen eine Nachricht "die E-Mail bereits vorhanden" andere Benutzer können die Registrierung abschließen. aber kann nicht zeigen, was bin ich falsch?cakePHP 3 überprüfen doppelte E-Mail und senden Sie die Nachricht die E-Mail bereits beenden

mein Controller

public function emailCheck() 
{ 
    $this->autoRender = false; 
    $this->viewBuilder()->layout('false'); 
    if ($this->request->is(['post'])) { 
     $search =$this->request->data('email');             
     $query = $this->Users->find('list', [ 
           'conditions' => ['Users.email LIKE '=>'%' .$search. '%'], 
           'limit' => 1 
           ])->all(); 
     foreach ($query as $key) { 
      if($key!=null){ 
       echo "This email has been taken!!"; 
      }else 
      echo "Email avilable."; 
     } 
    } 
} 

Meine Ajax

<script> 
$('document').ready(function(){ 
    $('input[name="email"]').change(function(){ 
     var email = $(this).val(); 
     $.ajax({ 
        method:'POST', 
        url:'<?php echo Router::url(['controller' => 'Users', 'action' => 'emailCheck']); ?>', 
        data:{search:email}, 
        success: function(data) 
        { 
        alert(data); 
        } 
     }); 
    }) 
}) 

Antwort

2

Wenn ich richtig verstehe: Sie geben find('list') aber Ihre Abfrage mit all() enden, die eine Reihe von Objekten zurückgibt (auch wenn Sie begrenzen es auf 1). So wird Ihr $key nie nur null sein. Sie können aber nur versuchen, den ersten Datensatz zu finden, die angegebene E-Mail mit:

$query = $this->Users->find('list', [ 
      'conditions' => ['Users.email LIKE'=> $search], 
      ])->first(); 

if (is_null($query)) { 
    // the email is still available 
} else { 
    // the email is already in use 
} 

Hinweis: ich die % Platzhalter aus der Abfrage auch entfernt: sie verlassen es in Fehlalarme führen würde, zB: [email protected] würde die Nachricht seine E-Mail bereits in Gebrauch ist, wenn jemand mit [email protected]

0

abonniert haben würde Schließlich bekam ich die Lösung.Verfahren Lösung ist My-Controller

public function emailCheck() 
{ 
    $this->autoRender = false; 
    $this->viewBuilder()->layout('false'); 
    if ($this->request->is(['post'])) { 
     $email =$this->request->data('email');             
     $query = $this->Users->find() 
      ->where(['Users.email '=>$email])->count(); 
     if($query) { 
      echo 1; 
     } 
    } 
} 

Meine Ajax

<script> 
$('document').ready(function(){ 
    $('#email').keyup(function(){ 
     var email = $(this).val(); 
     $.ajax({ 
        method:'POST', 
        url:'<?php echo Router::url(['controller' => 'Users', 'action' => 'emailCheck']); ?>', 
        dataType: "text", 
        data:{email:email}, 
        success: function(data) 
        { 
         if(data){ 
          $(".result").html('<span style="color:red">Someone already has that username. Try another?</span>'); 
         }else{ 
         $(".result").html('<span style="color:green">The email is still available!!</span>'); 
         } 

        } 
     }); 
    }) 

})

diejenigen Skript vollständig von mir doppelte email.testing zu überprüfen arbeiten