2012-04-26 170 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