0

簡単な登録フォームと、md5 暗号化とソルトを使用してハッシュ化されたパスワードがあります。「uni」フィールドを null にすることはできないというエラーが表示されます。これは、追加方法がわからないことが原因であると想定しています。 $salt をフォームに挿入します (隠し要素ではないでしょうか? id フィールドのように?)。以下のモデルを作成しました。

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

ありがとう

リック

4

1 に答える 1

0

最初の 'uni' はフォーム フィールドです。

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

このエラーは、'not null' と宣言された db テーブル列に 'null' 値を渡すと発生します。これを解決するには、'addUser()' メソッドに 'not null' 値を渡すか、メソッド API で 'uni' のデフォルト値を設定するか、db テーブルの 'uni' 列が 'null' 値を受け入れるようにします。

個人的には、通常、メソッドでこれらの種類に配列を渡し、必要なビットを引き出します。何かのようなもの:

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

        $this->insert($data);
    }

繰り返しますが、個人的には、塩フィールドをフォームにまったく配置せず、モデルに塩を割り当てます。私の塩について世界に何かを見せる意味はまったくありません.

幸運を。

于 2012-04-26T13:22:29.583 に答える