我的表单没有处理。一旦我输入了详细信息,即使没有,我收到了else语句echo"您的密码重置密钥无效"在第95行。关键是正确的但是......
我认为第160-164行的if语句存在输入标记值的问题。我认为它需要包装在一个php标签中,但我不确定是什么错......?
希望有人可以提供帮助。感谢。
<?php
$objForm = new Form();
$objValid = new Validation($objForm);
$objUser = new User();
// Was the form submitted?
if (isset($_POST["ResetPasswordForm"]))
{
// Form Fields Check
if ($objForm->isPost('email')) {
$objValid->_expected = array(
'email',
'password',
'confirm_password'
);
$objValid->_required = array(
'email',
'password',
'confirm_password'
);
$objValid->_special = array(
'email' => 'email'
);
$objValid->_post_remove = array(
'confirm_password'
);
$objValid->_post_format = array(
'password' => 'password'
);
$email = $objForm->getPost('email');
$user = $objUser->getByEmail($email);
if (empty($user)) {
$objValid->add2Errors('e-mail_not_found');
}
}
// Gather the post data
$email = $_POST["email"];
$password = $_POST["password"];
$confirmpassword = $_POST["confirmpassword"];
$hash = $_POST["q"];
// validate password
$password = $objForm->getPost('password');
$confirmpassword = $objForm->getPost('confirmpassword');
if (!empty($password) && !empty($confirmpassword) && $password != $confirmpassword) {
$objValid->add2Errors('password_mismatch');
}
// Use the same salt from the forgot_password.php file
$salt = "---blank for demo---";
// Generate the reset key
$resetkey = hash('sha512', $salt.$email);
// Does the new reset key match the old one?
if ($resetkey == $hash)
{
if ($password == $confirmpassword)
{
//hash and secure the password
$password = hash('sha512', $password);
// Update the user's password
$query = $conn->prepare('UPDATE clients SET password = :password WHERE email = :email');
$query->bindParam(':password', $password);
$query->bindParam(':email', $email);
$query->execute();
$conn = null;
Helper::redirect('/?page=password_changed');
}
else
$objValid->add2Errors('password_mismatch');
}
else
echo "Your password reset key is invalid.";
}
require_once('_header.php'); ?>
<div id="cat_prod"><h1>- CHANGE PASSWORD -</h1></div>
<br /><br />
<form action="" method="POST">
<table cellpadding="0" cellspacing="0" border="0" class="tbl_insert">
<tr>
<th>
<label for="email">E-mail : *</label>
</th>
<td>
<?php echo $objValid->validate('e-mail_not_found'); ?>
<input type="text" name="email" id="login_email" class="fld"
value="<?php echo $objForm->stickyText('e-mail_not_found'); ?>" />
</td>
</tr>
<tr>
<th>
<label for="password">Password : *</label>
</th>
<td>
<?php echo $objValid->validate('password'); ?>
<?php echo $objValid->validate('password_mismatch'); ?>
<input type="password" name="password" id="password" class="fld" value="" />
</td>
</tr>
<tr>
<th>
<label for="confirm_password">Confirm Password : *</label>
</th>
<td>
<?php echo $objValid->validate('confirm_password'); ?>
<input type="password" name="confirmpassword" id="comfirm_password" class="fld" value="" />
</td>
</tr>
<tr>
<th>
</th>
<td>
<label for="change_pass" class="sbm_blue fl_l">
<input type="hidden" name="q" value="';
if (isset($_GET["q"])) {
echo $_GET["q"];
}
echo '" />
<input type="submit" name="ResetPasswordForm" id="btn_login" class="btn" value=" Reset Password " />
</label>
</td>
</tr>
</table>
</form>
<?php require_once('_footer.php'); ?>
答案 0 :(得分:2)
可能你有一些错字。试试吧。
<input type="hidden" name="q" value="<?php echo isset($_GET["q"]) ? $_GET["q"]: '' ;?>"/>