[英]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.