2012-04-26 63 views
0

我有一個簡單的註冊表單和使用md5加密和鹽密碼散列,我收到一個錯誤,說「uni」字段不能爲空,我認爲這是由於事實上,我不確定如何將$ salt添加到表單中(它不會是隱藏的元素嗎?像id字段?)。我做了以下模型:Zend表單註冊與鹽

public function addUser($first_name, $surname, $email, $username, $password, $salt, $age, $gender, $uni) { 

    $salt=substr(md5(mt_rand()),0,20); 
    $md5Password=md5($salt.$password); 

    $data = array(
     'first_name' => $first_name, 
     'surname' => $surname, 
     'email' => $email, 
     'username' => $username, 
     'salt' => $salt, 
     'password' => $md5Password, 
     'age' => $age, 
     'gender' => $gender, 
     'uni' => $uni, 
    ); 
    $this->insert($data); 
} 

,這裏是形式:

<?php 

class Application_Form_Register extends Zend_Form 
{ 


    public function init() { 
     $this->setName('register'); 
     $id = new Zend_Form_Element_Hidden('id'); 
    $id->addFilter('Int'); 
     $first_name = new Zend_Form_Element_Text('first_name'); 
     $first_name->setLabel('Firstname:') 
       ->setRequired(true) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim') 
       ->addValidator('NotEmpty'); 
     $surname = new Zend_Form_Element_Text('surname'); 
     $surname->setLabel('Surname:') 
       ->setRequired(true) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim') 
       ->addValidator('NotEmpty'); 
    $email = new Zend_Form_Element_Text('email'); 
    $email->setLabel('Email:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $username = new Zend_Form_Element_Text('username'); 
    $username->setLabel('Username:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $password = new Zend_Form_Element_Password('password'); 
    $password->setLabel('Password:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $salt = new Zend_Form_Element_Hidden('salt'); 
    $age = new Zend_Form_Element_Text('age'); 
    $age->setLabel('Age:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $gender = new Zend_Form_Element_Text('gender'); 
    $gender->setLabel('Gender:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $uni = new Zend_Form_Element_Text('uni'); 
    $uni->setLabel('University:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $submit = new Zend_Form_Element_Submit('submit'); 
    $submit->setAttrib('id', 'submitbutton'); 
    $this->addElements(array($id, $first_name, $surname, $email, $username, $password, $salt, $age, $gender, $uni, $submit)); 
} 
} 

感謝

裏克

回答

0

第一 '單' 是一個表單域。

$uni = new Zend_Form_Element_Text('uni'); 
    $uni->setLabel('University:') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 

當您將「空」值傳遞給已聲明爲「非空」的數據庫表列時,會發生此錯誤。爲了解決這個問題,給'addUser()'方法傳遞'not null'值,在方法api中設置'uni'的默認值,或者讓db table'uni'列接受'null'值。

就我個人而言,我通常會在這些方法上傳遞一個數組,然後抽出我想要的位。例如:

public function addStation(array $data) { 
     $data = array(
      'station' => $data['station'], 
      'comment' => $data['comment'] 
     ); 

     $this->insert($data); 
    } 

再次個人情況下,我不會把鹽場放在表格中,我會在模型中分配鹽。毫無意義地向世界展示我的鹽什麼。

祝你好運。

+0

是的,但uni不應該爲空,它不是空值我輸入數據到字段中。 – Rex89 2012-04-26 13:37:48

+0

檢查發佈的數據,在某個地方你失去了'uni'數據。你提供的代碼沒有什麼明顯的錯誤。也許轉儲控制器中的$ form變量,並確保一切都到達那裏。 – RockyFord 2012-04-26 13:43:09

+0

對不起,這是我的一個愚蠢的錯誤我錯過了一個列中的分貝,所以我在模型中插入8時,總共有9個.. – Rex89 2012-04-26 14:17:24