2014-12-06 25 views
-3

我需要能夠允許用戶通過輸入自己的電子郵件,然後將更新數據庫重置其密碼,併發送電子郵件給用戶提供更新的密碼更新密碼。他們也將被重定向到一個頁面,允許他們更新密碼到其他的東西,但我一直無法獲得數據庫來更新密碼? 請幫忙!需要讓用戶使用電子郵件的PHP

這是我的代碼

<?php 
       $pwd_rand = rand(); 
      $pwd_reset = $pwd_rand; 
      $email_password = $pwd_reset; 
      $new_password = sha1($email_password); 

if (isset($_POST['useremail'])){ 
     require 'PHPMailer/PHPMailerAutoload.php'; 



$mail = new PHPMailer; 
$mail->IsSMTP(); 
$mail->setFrom('[email protected]', 'A Smith'); 
$to = $_POST['useremail']; 
$mail->addAddress($to, 'Somebody'); 
$mail->Subject = 'PHPMailer mail() test'; 
$mail->msgHTML($new_password." This is your new password."); 
if (isset($_POST['submit'])){ 
$db_server = "127.0.0.1"; 
      $db_usr = ""; 
      $db_pwd = ""; 
      $db = $db_usr; 
      $conn = mysqli_connect($db_server, $db_usr, $db_pwd, $db); 
      $q = "SELECT * FROM login WHERE email = '$to'"; 
     $row = mysqli_fetch_assoc($queryget); 
     $r = mysqli_query($conn, $q); 


       $querychange = mysqli_query($conn, "UPDATE login SET password='$newpassword' WHERE email='$to'"); 







     mysqli_close($conn); 
     } 
if (!empty($_POST[$useremail])){ 

mail($to, "From: "); 


     } else { 
      echo "<div class=\"msg\">Please supply your email address.</div>"; 
     } 
    } else { 
     echo "<div class=\"msg\">Please supply your email address.</div>"; 
    } 
} 
{ 

if (!$mail->send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
           echo "<div class=\"msg\">Password has been reset, check your email.</div>"; 
    echo "<script>setTimeout(\"location.href = 'changepassword.php';\",1500);</script>"; 

}} 


?> 

這就是我跟在這一刻^ 我的代碼將發送新密碼的電子郵件,並重定向到更新密碼的頁面,但它沒有工作,用新密碼更新數據庫?

+0

請再具體些 - 會發生什麼,當你做了MYSQL調用來更新用戶的密碼? – aphextwix 2014-12-06 14:44:13

+0

在這個時候,頁面不加載,並且即時通訊猜測是否有更新數據庫的代碼出現錯誤:/ – Natt 2014-12-06 14:47:56

+0

是的,如果頁面沒有加載,通常情況下會提示一個問題!哈哈。你可以請張貼PHP或MYSQL錯誤訊息?爲了得到這個添加'<?php error_reporting(E_ALL); ?>'到你的頁面頂部,然後在你的mysqli_query的末尾添加一個'die'聲明 - 參見[link](http://stackoverflow.com/questions/17053466/how-to-display-errors-for-我的mysqli查詢) – aphextwix 2014-12-06 14:52:18

回答

0

如果更新的密碼在電子郵件中出現,那麼這個問題是不是由於未定義的變量。

因此,您需要查看傳遞給SQL查詢的內容。

這種情況最可能的原因是可變$newpassword沒有被正確地傳遞給MySQL查詢。

嘗試以下任一備用字符串的,看看是否任一工作:

$querychange = mysqli_query($conn, " 
UPDATE login SET password= '".$newpassword."' 
WHERE email='".$to."' "); 

OR

$querychange = mysqli_query($conn, " 
UPDATE login SET password = $newpassword 
WHERE email = $to "); 

第一個例子逸出變量$newpassword$id與」。 * $變量*。'而第二個示例不使用任何引號。

看看這個其他答案一個更好的解釋 - LINK

+0

嘿謝謝你的回覆!我試過了,但我的數據庫仍然沒有被更新? – Natt 2014-12-06 22:29:32

+0

用if(!empty($ _ POST ['useremail']))替換if(!empty($ _ POST [$ useremail]))來解決這個問題, – Natt 2014-12-06 23:24:46

+0

很高興能夠提供幫助! – aphextwix 2014-12-07 10:44:08

0

更新時不需要while循環。

而且更新SQLI查詢並不真正需要被存儲在一個變量。

相關問題