[英]Changing User Password in PHP and mySQL
经过长时间的休息后才找到答案!
只是在改变
$querynewpass = "UPDATE tz_members SET `pass`='".$_POST['$passwordnew1']."' WHERE usr='{$_SESSION['usr']}'";
至:
$querynewpass = "UPDATE tz_members SET `pass`='".md5($_POST['passwordnew1'])."' WHERE usr='{$_SESSION['usr']}'";
只是我错过的简单md5!
我试图使用一种形式来更改用户密码,在该表格中输入当前密码和新密码。 它应检查mySQL数据库以查看其输入的当前密码是否与他们登录的当前会话用户匹配,然后将mySQL数据库更新为新密码。 这是到目前为止我拥有的脚本:
if($_POST['submit']=='Change')
{
// Checking whether the Password Change form has been submitted
$err = array();
// Will hold our errors
if(!$_POST['password1'] || !$_POST['passwordnew1'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['password1'] = mysql_real_escape_string($_POST['password1']);
$_POST['passwordnew1'] = mysql_real_escape_string($_POST['passwordnew1']);
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_SESSION['usr']}' AND pass='".md5($_POST['password1'])."'"));
if($row['usr'])
{
// If everything is OK change password
$querynewpass = "UPDATE user SET `password`='".$_POST['$passwordnew1']."' WHERE id='".$_SESSION['usr']."'";
$resultnewpass = mysql_query($querynewpass) or die(mysql_error());
}
else $err[]='Wrong Password To Start With!';
}
if($err)
$_SESSION['msg']['passwordchange-err'] = implode('<br />',$err);
// Save the error messages in the session
header("Location: index.php");
exit;
}
但是它带有一个错误“表'databasename.user'不存在”,我有一个登录和注册表格,使用此方法可以正常工作!
更新:我有一个数据库,该数据库具有一个名为tz_members的表,其列为id,pass,user,regIP和dt
我的mysql查询现在是:
$querynewpass = "UPDATE tz_members SET `pass`='".$_POST['$passwordnew1']."' WHERE usr='{$_SESSION['usr']}'";
再次更新,添加了表单代码供您查看:
<!-- Pass Change Form -->
<form action="" method="post">
<?php
if($_SESSION['msg']['passwordchange-err'])
{
echo '<div class="err">'.$_SESSION['msg']['passwordchange-err'].'</div>';
unset($_SESSION['msg']['passwordchange-err']);
}
if($_SESSION['msg']['passwordchange-success'])
{
echo '<div class="success">'.$_SESSION['msg']['passwordchange-success'].'</div>';
unset($_SESSION['msg']['passwordchange-success']);
}
?>
<label class="grey" for="password1">Current Password:</label>
<input class="field" type="password" name="password1" id="password1" value="" size="23" />
<label class="grey" for="password">New Password:</label>
<input class="field" type="password" name="passwordnew1" id="passwordnew1" size="23" />
<input type="submit" name="submit" value="Change" class="bt_register" />
</form>
您在似乎与同一表相关的两个查询中使用了两个不同的表(和列)。
检查您的架构,并适当调整第二个查询。
第二个查询应该类似于以下内容:
$querynewpass = "UPDATE tz_members SET `pass`='".md5($_POST['passwordnew1'])."' WHERE usr='{$_SESSION['usr']}'";
检查您的数据库。 也许用户表不存在。 另外,在更新过程中,您正在更新密码而不进行加密,但是您通过匹配加密的密码从tz_members
表中获取数据。 所以我的最终解决方案是:检查数据库,看看是否有任何用户表。 玩得开心
我试图做与您最终使它正常工作相同的事情,这可能对您发布正确的完整代码很有帮助,因此其他正在寻找此代码的人都可以查看解决方案。
我发现的唯一需要花费几分钟时间调试以上代码的错误如下:
$querynewpass = mysql_query("UPDATE tz_members SET `pass`='".md5($_POST['passwordnew1'])."' WHERE usr='{$_SESSION['usr']}'");
是在添加mysql_query()标记之后添加的,该代码非常有用,感谢来回共享。
试试这个代码:
$SQL = "UPDATE `table-name` SET `password` = '".$newpassword."' WHERE `tablename`.`ID` = '".$_SESSION["database ID"];."';";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.