2009-06-29 16 views
0

名前、電子メール、およびパスワードフィールドのログインページで検証を実行しようとしています。入力が検証に失敗した場合は、エラーメッセージが表示されます。CakePHPで検証エラーが表示されないのはなぜですか?

ここで、詳細を入力して送信すると、次のページにリダイレクトされます。値はデータベースに保存されません。

メッセージが表示されないのはなぜですか?

これは私のモデルである:

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; 
      } 
     } 
    } 
} 

これは私のコントローラである:

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

なぜメッセージ、例えば、 "最低8文字の長" がされていますパスワードフィールドに8文字未満で表示されていませんか?

<!--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

コントローラーで何をしていますか?そのコードも投稿してください。 – deceze

+0

モデルのregisterUser関数で、なぜfind( 'all')を実行していますか?おそらくfind( 'first')を使うべきです。そうしないと、すべてのユーザーIDがユーザー表に入れられます。 – jimiyash

+0

ビューを投稿することはできますか? –

答えて

0

あなたの検証では、次のことをしようとしておよそ

どのように正しいようだ:

  1. ていることを確認していない$これがあることを確認し、適切な機能
  2. に作成>あなたます$ form-を設定Model-> save();を発行する前に、Model-> read()を実行します。

編集

次がありました?:

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

EDIT2

あなたは読み込みをやっているのIF()または()を見つける保存する前にモデルを作成すると、フィールドがリセットされます。変数をtype = hiddenとしてフォームに渡す必要があります。私は理にかなっていると思う。

EDIT3

私はモデルでその機能を持つことはあなたに虚偽のリターンを提供していないので、あなたがあなたのコントローラに)(あなたのregisterUserを移動する必要があると思います。検証エラーがあっても常に真実になります。

+0

はい、私はそれを持っています。 – Angeline

+0

いいえ、実際には、テーブルにエントリを保存して、保存されたエントリのIDだけを取得します。保存する前に私は読んでいません()またはfind()しません。 – Angeline

+0

はい、私は気づいた。コントローラの保存ルーチンを移動してみてください。 – drikoda

0

config/core.phpでリダイレクトラインをコメントアウトし、デバッグを2に設定します。次に、生成されているSQLを見て、挿入が機能しているかどうかを確認します。エラーが表示されていない場合、ビュー内に$ form-> input関数の代わりに$ form-> textまたは$ form-> selectを使用している可能性があります。 $ form-> input関数だけが自動的にエラーメッセージを表示します。

+0

他のすべてが失敗した場合、時にはそれだけで新たにやり直すと、おそらく他の人が何をしているか見て良いです。登録は非常に一般的で、ネット上でcakephp登録チュートリアルを見つけることができます。 – jimiyash

+0

まあ、私はこれまで何度もコードを試していますが、何らかのエラーが発生します。 何人かはいいチュートリアルを教えてくれますか? – Angeline

関連する問題