gpt4 book ai didi

php - zend 框架中独特的电子邮件检查无法正常工作

转载 作者:搜寻专家 更新时间:2023-10-31 20:46:37 24 4
gpt4 key购买 nike

我正在做一个基于 Zend 框架的项目。在用户注册中,我必须检查唯一的电子邮件。当我第一次注册用户时,我的代码工作正常,但是当我尝试更新用户信息并按下更新按钮时,它给出了错误消息:

Email already taken 

请帮我解决这个问题。我的代码附在下面:

$this->addElement('text', 'email', array(
'label' => 'Your email address:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
'EmailAddress',
array('Db_NoRecordExists', true, array(
'table' => 'users',
'field' => 'email',
'messages' => array(
'recordFound' => 'Email already taken'
)
)
)
)
));

我已经将我的 Controller 更改为:

public function addAction()
{
$modelUsers = new Model_Users();
$userId = $this->_getParam('userId');
$form = $this->_getAddForm();

if ($userId) {
$populateData = array();

$user = $modelUsers->fetch($userId);

if ($user instanceof Model_User) {
$populateData = $user->toArray();
}

$form->populate($populateData);
}

$request = $this->getRequest();

if ($request->isPost()) {
$email = $this->getRequest()->getParam('email');
if (strtolower(trim($email)) == $modelUsers->fetchByEmail($email)) {
// change $this->_user->getAccount()->getEmail() to retrieve the user's current email address

// remove validator from form
$form->getElement('email')->removeValidator('Db_NoRecordExists');
}

$post = $request->getPost();

if ($form->isValid($post)) {
$values = $form->getValidValues($post);
$data = array(
'firstName' => $values['firstName'],
'userTypeId' => 2,
'lastName' => $values['lastName'],
'email' => $values['email'],
'userName' => $values['userName'],
'password' => $values['password'],
'role' => $values['role']
);

if ($userId) {
$user = $modelUsers->fetch($userId);
if ($user instanceof Model_User) {
$user->setFromArray($data);
$success = $user->save();
if ($success) {
echo Zend_Json::encode(array('status' => self::STATUS_SUCCESS, 'message' => 'Successfully updated the user!'));
exit;
}
}
} else {
$user = $modelUsers->createRow($data);
$success = $user->save();
if ($success) {
echo Zend_Json::encode(array('status' => self::STATUS_SUCCESS, 'message' => 'Successfully added the user!'));
exit;
}

}
echo Zend_Json::encode(array('status' => self::STATUS_FAILED, 'message' => 'user not added'));
exit;
} else {

$errors = array();
$errors = $form->errors();

echo Zend_Json::encode(array('status' => self::STATUS_ERROR, 'data' => $errors));
exit;

}
}

$this->view->form = $form;
$this->_helper->layout->disableLayout();

}

型号:

public function fetchByEmail($email)
{
$email=fetchOne('SELECT email FROM users WHERE email = $email');
//$select->where('email=?',$email) ;
//$student = $this->fetchRow($select);
return $email;
}

但是还是不行

最佳答案

解决此问题的一种简单方法是在编辑表单时从该表单元素中删除验证器。如果他们试图更改他们的电子邮件地址,您可能还希望保留验证器,因为他们不应该能够将他们的电子邮件更改为数据库中已经存在的电子邮件地址。

将验证程序留在您的 Zend_Form 类中,仅在编辑用户时添加此代码

if ($this->getRequest->isPost()) {
$email = $this->getRequest()->getParam('email'); // get email from form

// if email address has not changed, remove validator from form
if (strtolower(trim($email)) == $this->_user->getAccount()->getEmail()) {
// change $this->_user->getAccount()->getEmail() to retrieve the user's current email address

// remove validator from form
$form->getElement('email')->removeValidator('Db_NoRecordExists');
}

// validate form
if ($form->isValid($this->getRequest()->getPost()) {
//...
}
}

因此,您正在做的是在编辑表单时从表单元素中删除 Db_NoRecordExists 验证器,并且只有在允许他们不尝试更改电子邮件地址的情况下才可以这样做.

关于php - zend 框架中独特的电子邮件检查无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com