2014-03-29 165 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