0
用户在我的网站上忘记密码。 他们输入用户名,并发送一封电子邮件,其中包含带有附加到重置页面的URL的标记的链接。 当链接被点击时,标记会被验证是否存在并到期。 如果不错,重置密码表单会显示其他错误消息,然后重试。 一切都很好,在这里。 当用户输入新密码并点击提交时,url的附加部分消失,只是常规页面url在地址栏中。 重置密码表格只是坐在那里空白。 因为我使用$ _GET来检索令牌和$ _POST来处理表单,这可能是我的问题吗? 包括我的页面代码在这里:经过令牌验证重置表单不处理
<?php
require_once ('functions.inc.php');
include("header.php");
require_once ('config.inc.php');
?>
<body>
<div data-role="page" id="resetpassword">
<div data-role="header">
<h1>Reset Password</h1>
</div>
<div data-role="content">
<?php
$page_title = 'ResetPassword';
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$tk = ($_GET['token']);
$q1 = "SELECT uname, request_time FROM users WHERE token = '$tk'";
$r1 = mysqli_query($dbconn,$q1)or die("Error: ".mysqli_error($dbconn));
$row = mysqli_fetch_array($r1);
$user = $row['uname'];
$then = $row['request_time'];
//echo $then;
$now = time();
//echo $now;
$expired = ($now - $then);
//echo $expired;
$num_rows = mysqli_num_rows($r1);
if ($num_rows !== 1 || $expired > 900){
echo "An error has prevented a password change.<br />Most likely the link has expired.<br />Please try again.";
?>
</div>
<div data-role="footer" class="ui-bar">
<a href="../index.php" data-role="button">Try Again</a>
</div><!-- /footer -->
</div>
<?php
exit();
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$trimmed = array_map('trim', $_POST);
if (preg_match ('/^[[:alnum:]]{8,20}$/', ($trimmed['password']))) {
$p = mysqli_real_escape_string($dbconn, ($trimmed['password']));
// hash the password
require ("passhash.php");
$pass_hash = PassHash::hash($p);
} else {
echo '<p>Please enter a valid password!</p>';
}
if ($pass_hash) {
$q2 = "UPDATE `users` SET upass='$pass_hash' WHERE uname='$user'";
$r2 = mysqli_query($dbconn, $q2)or die("Error: ".mysqli_error($dbconn));
if ($r2 == TRUE) {
echo "<p>Password Changed!</p>";
}
}
?>
</div><!-- /content -->
<div data-role="footer" class="ui-bar">
<a href="../index.php" data-role="button">Login</a>
</div><!-- /footer -->
</div><!-- /page -->
<?php
}
}
?>
<form id="passwordreset" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?token=<?php echo $tk;?>" data-ajax="false">
<p>Choose a new password.<br />
Letters and numbers only.<br />
Minimum of 8 Maximum of 20 characters.</p>
<label for="password" class="ui-hidden-accessible">New Password:</label>
<input type="password" name="password" id="password" value="" placeholder="New Password"/>
<button type="submit" name="submit" value="submit"/>Submit</button>
</form>
</div><!-- /content -->
<div data-role="footer" class="ui-bar">
</div><!-- /footer -->
</div><!-- /page -->
</body>
</html>
对不起,我花了这么久才找回来。感谢您的回复和链接。我的表单现在有action =“<?php echo $ _SERVER ['PHP_SELF'];?>?token ='$ tk'”但仍不处理表单。 – 2012-07-29 10:36:35
为什么不呢?解释 – Samson 2012-07-30 07:07:50
嗯,我不确定。当我输入新密码并单击提交时,表格会再次出现,但它是空的。我检查了我正在尝试更新的数据库,没有发生任何变化。我的脚本的第一部分工作正常。我让令牌过期,并显示错误。如果我尝试使用一个不存在的令牌,我会收到错误消息。就像它应该的那样。这是新的密码部分,只是不工作的更新。 – 2012-07-30 11:47:01