2009-06-29 13 views
0

Ich versuche, auf der Anmeldeseite die Felder Name, E-Mail und Passwort zu überprüfen. Wenn die Eingabe die Validierung nicht besteht, sollte die Fehlermeldung angezeigt werden.Warum werden in CakePHP keine Validierungsfehler angezeigt?

Aber hier, wenn ich die Details ausfüllen und abschicken, wird es auf die nächste Seite umgeleitet. Nur der Wert wird nicht in der Datenbank gespeichert.

Warum wird die Nachricht nicht angezeigt?

Das ist mein Modell:

class User extends AppModel { 
    var $name = 'User'; 
     var $validate = array(
      'name' => array(
      'alphaNumeric' => array(
       'rule' => 'alphaNumeric', 
       'required' => true, 
       'message' => 'Alphabets and numbers only' 
      ), 
      'between' => array(
       'rule' => array('between', 5, 15), 
       'message' => 'Between 5 to 15 characters' 
      ) 
     ), 
      'password' => array(
      'rule' => array('minLength', '8'), 
      'message' => 'Mimimum 8 characters long' 
     ), 
     'email_id' => 'email' 
    ); 

    function loginUser($data) { 
     $this->data['User']['email_id'] = $data['User']['email_id'];  
     $this->data['User']['password'] = $data['User']['password'];    

     $login = $this->find('all'); 
     foreach ($login as $form): 
      if ($this->data['User']['email_id'] == $form['User']['email_id'] && $this->data['User']['password'] == $form['User']['password']) { 
       $this->data['User']['id'] = $this->find('all', 
        array(
         'fields' => array('User.id'), 
         'conditions' => array(
          'User.email_id' => $this->data['User']['email_id'], 
          'User.password'=>$this->data['User']['password'] 
         )  
        ) 
       ); 
       $userId=$this->data['User']['id'][0]['User']['id']; 
       return $userId; 
      } 
    endforeach; 
    } 

    function registerUser($data) { 
     if (!empty($data)) { 
      $this->data['User']['name'] = $data['User']['name']; 
      $this->data['User']['email_id'] = $data['User']['email_id'];  
      $this->data['User']['password'] = $data['User']['password']; 
      if($this->save($this->data)) { 
       $this->data['User']['id']= $this->find('all', array(
        'fields' => array('User.id'), 
        'order' => 'User.id DESC'  
       )); 
       $userId=$this->data['User']['id'][0]['User']['id']; 
       return $userId; 
      } 
     } 
    } 
} 

Das ist mein Controller ist:

class UsersController extends AppController { 
    var $name = 'Users'; 
    var $uses=array('Form','User','Attribute','Result'); 
    var $helpers=array('Html','Ajax','Javascript','Form'); 

    function login() { 
     $userId = $this->User->loginUser($this->data); 
     if($userId>0) { 
      $this->Session->setFlash('Login Successful.'); 
      $this->redirect('/forms/homepage/'.$userId); 
      break; 
     } else { 
      $this->flash('Login Unsuccessful.','/forms'); 
     } 
} 

    function register() { 
     $userId=$this->User->registerUser($this->data); 
     $this->Session->setFlash('You have been registered.'); 
     $this->redirect('/forms/homepage/'.$userId);       
    }  
} 

EDIT

Warum wird die Nachricht, zB "Minimum 8 Zeichen lang", ist nicht angezeigt, wenn im Passwortfeld weniger als 8 Zeichen stehen?

<!--My view file File: /app/views/forms/index.ctp --> 
<?php 
echo $javascript->link('prototype.js'); 
echo $javascript->link('scriptaculous.js'); 
echo $html->css('main.css'); 
?> 

    <div id="appTitle"> 
    <h2> formBuildr </h2> 
    </div> 

    <div id="register"> 
    <h3>Register</h3> 
    <?php 
echo $form->create('User',array('action'=>'register')); 
echo $form->input('User.name'); 
echo $form->error('User.name','Name not found'); 
echo $form->input('User.email_id'); 
echo $form->error('User.email_id','Email does not match'); 
echo $form->input('User.password'); 
echo $form->end('Register'); 
    ?> 
    </div> 

    <div id="login"> 
    <h3>Login</h3> 
    <?php 
echo $form->create('User',array('action'=>'login')); 
echo $form->input('User.email_id'); 
echo $form->input('User.password'); 
echo $form->end('Login'); 
    ?> 
    </div> 
+0

Was machst du in der Steuerung? Bitte posten Sie diesen Code ebenfalls. – deceze

+0

In der registerUser-Funktion im Modell, warum machst du einen Fund ('all')? Sie sollten wahrscheinlich einen Fund ("zuerst") verwenden. Andernfalls würden Sie alle Benutzer-IDs in der Benutzertabelle erhalten. – jimiyash

+0

Können Sie Ihre Ansicht auch posten? –

Antwort

0

Ihre Validierung scheint richtig

Wie wäre es die folgenden Versuch:

  1. stellen Sie sicher stellen Sie Ihren $ form-> erstellen, um die entsprechende Funktion
  2. Sicherstellen, dass kein $ this ist -> Model-> read() vor dem Ausgeben von Model-> save();

bearbeiten

Haben Sie die folgende ?:

function register() 
{ 
    //do not put any $this->User->read or find() here or before saving pls. 
    if ($this->User->save($this->data)) 
    { 
     //... 
    } 
} 

EDIT2

Wenn Sie eine read() oder finden tun(), bevor die rettende Modell dann das wird die Felder zurücksetzen. Sie sollten die Variable als type = im Formular verborgen übergeben. Ich hoffe ich mache Sinn.

Edit3

Ich glaube, Sie brauchen Ihre registerUser() in Ihrem Controller zu bewegen, weil im Modell diese Funktion mit Ihnen eine falsche Rückkehr nicht vorgesehen. es wird immer wahr sein, auch wenn es Validierungsfehler hat.

+0

Ja, das habe ich .. – Angeline

+0

Nein, eigentlich speichere ich den Eintrag in der Tabelle und bekomme dann nur die ID des gespeicherten Eintrags.Ich lese() oder finde() vor dem Speichern nicht. – Angeline

+0

Ja, ich habe es bemerkt. Versuchen Sie, die Speicherroutine in Ihrem Controller zu entfernen? – drikoda

0

Kommentieren Sie die Umleitung und setzen Sie das Debug auf 2 in config/core.php. Sehen Sie sich dann die SQL an, die generiert wird, um zu sehen, ob Ihr Insert funktioniert. Wenn die Fehler nicht angezeigt werden, verwenden Sie in der Ansicht möglicherweise $ form-> text oder $ form-> select anstelle der $ form-> input-Funktionen. Nur die $ form-> Eingabefunktionen zeigen automatisch die Fehlermeldungen an.

+0

Wenn alles andere scheitert manchmal ist es besser, nur von neuem beginnen und vielleicht schauen, was andere Leute tun. Die Registrierung ist sehr üblich und ich bin mir sicher, dass Sie ein CakePhp Registrierung Tutorial im Internet finden können. – jimiyash

+0

gut, was immer Code ich versuche, ein Fehler kommt auf .. Kann mir jemand ein nettes Tutorial dafür sagen? – Angeline

Verwandte Themen