Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 特定字段的Yii验证_Php_Yii - Fatal编程技术网

Php 特定字段的Yii验证

Php 特定字段的Yii验证,php,yii,Php,Yii,问题防御 我有一个名为“user.php”的模型 我有一些相同的验证规则,如下所示 我现在要创建一个密码重置表单 在这种形式下,我有一个文本框名称email(与用户模型中使用的电子邮件相同) 在密码重置表单中,我想检查此用户是否为已注册用户,是否已注册用户将发送密码重置链接 我不知道如何确定这个电子邮件领域的日期,任何帮助都非常值得赞赏,因为我是YII的新手 user.php class Users extends CActiveRecord { public $cpassword;

问题防御

我有一个名为“user.php”的模型 我有一些相同的验证规则,如下所示 我现在要创建一个密码重置表单 在这种形式下,我有一个文本框名称email(与用户模型中使用的电子邮件相同) 在密码重置表单中,我想检查此用户是否为已注册用户,是否已注册用户将发送密码重置链接

我不知道如何确定这个电子邮件领域的日期,任何帮助都非常值得赞赏,因为我是YII的新手

user.php

    class Users extends CActiveRecord
{
public $cpassword;
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
public function tableName()
    {
        return 'users';
    }
public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('email, password, user_type , cpassword','required'),
            array('email', 'length', 'max'=>200),
                        array('email', 'unique'),
                        array('email', 'email'),
            array('password', 'length', 'max'=>300),
                        array('cpassword', 'length', 'max'=>300),
            array('user_type', 'length', 'max'=>5),
                        array('cpassword', 'compare', 'compareAttribute' => 'password'),

            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('id, email, password, user_type ', 'safe', 'on'=>'search'),
        );
    }
public function relations()
    {

return array(
        );
    }
public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'email' => 'Email',
            'password' => 'Password',
            'user_type' => 'User Type',
                        'cpassword' => 'Confirm Password'
        );
    }
public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;

        $criteria->compare('id',$this->id);
        $criteria->compare('email',$this->email,true);
        $criteria->compare('password',$this->password,true);
        $criteria->compare('user_type',$this->user_type,true);

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }
        public function beforesave()
        {
            $this->password=md5($this->password);
            return true;
        }


}

您可以通过以下方式检查提交:

$user = User::model()->find("email = '".trim($model->email)."'");
if (!empty($user)){
     // users exists
} else {
    // user does not exist
}
如果确实要使用该模型,可以设置电子邮件必须唯一的规则,如下所示:

array('email', 'unique', 'message' => 'Email already in use'),
if($model->validate(array('attribute_name')) 
     // valid
}
然后,您可以检查模型是否在submit上进行了验证,特别是在email字段。如果未验证电子邮件地址是否存在

最后,您可以验证单个模型属性,如下所示:

array('email', 'unique', 'message' => 'Email already in use'),
if($model->validate(array('attribute_name')) 
     // valid
}
下面是完成整个操作的一种方法(不是最好的方法,但最容易理解!)


您是否希望根据输入的电子邮件地址检查用户是否存在?没错,但如何仅检查一个字段;为同一个表创建不同的模型是一种好方法吗?您可以使用场景,基于不同的场景有不同的验证规则,例如,创建新记录和更新现有记录有不同的规则。您可以在这里阅读有关场景的内容-我可以检查一下数据库中是否有电子邮件字段(如unique),如果没有,我想抛出错误('message'=>'不是注册的电子邮件地址'))如果我使用的是您的代码$user=user::model()->find(“email=”。trim($model->email)。“”;如果(!empty($user)){//users exists}或者{//user not exists}发现该用户未注册,我如何将错误推送到相应的视图,即推送到yii生成的表单,$form->error($model,'email')是的,这正是将发生的情况。因此,这很可能会出现在您的控制器中,在if(isset($_POST['User']){}之后。因此,它正在查询数据库,以查看是否有一个用户的电子邮件地址等于提交的电子邮件($model->email)对不起,我不明白你的意思,在控制器中,我正在确认当前用户没有重新注册的电子邮件,我如何将该错误推送到相应的视图,即在我的视图文件中,error msg显示如下$form->error($model,'email'),如何将我的错误值分配给这个变量,爱斯基摩人,谢谢你宝贵的回答。还有一个疑问,在你的回答中,你是按如下方式查看错误->呈现(“resetpassword”,array(“model”=>$model,“error\u message”=>“找不到这样的用户!”);但我想将$error_message的值指定给$form->error($model,'email');这样我就可以用默认的yii样式显示错误,否则我就必须编写这样的代码,有什么方法可以这样做吗。谢谢你的帮助:)