2014-03-29 162 views
0

我有一些腳本from the internet允許客戶重置他們的密碼,如果他們需要但我似乎無法得到它的工作。忘記密碼不工作

這是多麼我已經實現了它:

<?php 
    error_reporting(0); 
    $EmailAddress=$_POST['EmailAddress']; 

    if($_POST['submit']=='Send') 
    { 
     require "db.inc"; 
     $query="SELECT * from members WHERE EmailAddress='$EmailAddress'"; 
     $result=mysql_query($query) or die(error); 

     if(mysql_num_rows($result)) 
     { 
      echo "User exist"; 
     } 
     else 
     { 
      echo "No user exist with this email id1"; 
     } 
    } 


    if(mysql_num_rows($result)) 
    { 
     $code=rand(100,999); 
     $message="You activation link is: http://yourwebsitename.com/forgot.php? EmailAddress=$EmailAddress&code=$code"; 
     mail($EmailAddress, "Subject Goes Here", $message); 
     echo "Email sent"; 
    } 
    else 
    { 
     echo "No user exist with this email id2"; 
    } 
?> 

這是一個重定向到該網頁的形式

<form method="POST" action="EmailPassword.php"> 
    <div class="Row"> 
     <div class="Lable">Email Address:</div> <!--End of Lable--> 
     <div class="input"> 
      <input type="email" id="EmailAddress" class="detail" name="EmailAddress" placeholder="Email Address" required /> 
     </div> <!--End input--> 
    </div> <!--End row--> 

    <br /> 
    <div class="submit"> 
     <input type="submit" id="Reset" Name="submit" value="Send Password" /> 
    </div><!--End of .submit--> 
</form> 

我得到的錯誤是

無用戶存在這個電子郵件id2。

+3

** **危險:您正在使用[**的**過時的數據庫API(http://stackoverflow.com/q/12859942/19068),並應使用[現代更換] (http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

+1

您錯過了所有嘗試從您在電子郵件中發送的URL中讀取數據的代碼 – Quentin

+1

是的,@Quentin說過,必須有更多的代碼,可能在兩個相同的if語句(id1和id2)之間, 。 – Shomz

回答

0

您需要將隨機代碼寫入數據庫(或任何您想要的)並將其綁定到用戶的電子郵件。然後,當用戶打開激活鏈接時,你需要一個類似的代碼片段來處理它。但是,這次您將讀取GET變量並選擇與電子郵件臨時代碼相匹配的數據庫記錄。像這樣,例如:

SELECT id FROM members WHERE EmailAddress='$EmailAddress' AND tmpCode='$code'; 
// make sure to sanitize those inputs, otherwise Bobby Tables might join in!! 
// this query assumes you have a varChar field tmpCode in your members table 

只有在此之後,您纔可以向用戶發送新密碼或將其帶到創建新密碼屏幕。

Meet Bobby Tables

+0

謝謝你。當你說隨機代碼寫入數據庫時​​,你的意思是爲它插入的隨機代碼添加一個額外的列?我對這一切都很陌生。我也只有一個星期的時間來完成這個項目,所以我們現在沒有在這方面做過標記,所以不要太擔心安全問題。我知道這不好的做法,但我會回到它。 – Kie21

+0

不客氣。是的,添加一個字段到數據庫是一種方法來做到這一點,這就是我的代碼行。我建議你從第一天就開始做,因爲有時很難擺脫壞習慣。要非常小心你在網上找到的腳本,特別是如果你不知道什麼和**他們如何做**。例如,你使用的那個腳本可以被利用,因爲它使用了不推薦使用的mysql函數(它可能很老 - mysqli和PDO現在已經被認爲是標準的,瞭解他們準備好的語句)。 – Shomz