PHP的密码恢复邮件无法正常工作

时间:2016-04-14 04:29:57

标签: php jquery mysql

我正在尝试创建一个脚本来通过邮件恢复密码,但它不起作用。以前它出现了电子邮件无效的错误。 现在它结束了我的邮件,但其中有encrypted password

请帮我解密密码 任何导致此错误的人都非常感激

  <?php
    require_once("config.php");    //Database Connection

    //Catch Field Data
    $email     =     $_POST['email'];
    $submitted    =    $_POST['submitted'];

    if($email) {
        $query        =    printf("SELECT * FROM registration where email='$email'");
        $result        =    mysql_query($query);
        $rowAccount    =    mysql_fetch_array($result);
    }

    if ($rowAccount) {

        $subject = "Your goprestige Username / Password Reminder";
        $headers = "From: info@abc.com";
        $fname = $rowAccount['fname'];
        $password = $rowAccount['password'];
        $msg = "<h1>My abc Admin</h1>
        <p>Hello '$user'!</p>
        <p>Here is the username/password reminder you requested. If you didn't request this reminder then don't panic too much, the likely hood of someone gaining access is minimal. Thank you abc </p>
        <p>Username: '$fname'</p>
        <p>Password: '$password'</p>
        <p>Many thanks, the abc Support Team.</p>
        ";

        $success = mail($email, $subject, $msg, $headers);

        if($success) {
            echo "<p id=errors>Reminder Success: Your Username and Password have been emailed to $email";
        }
    } else ($submitted) {
        echo '<p id="errors">Reminder Failed: The email you entered was not found on the system, please try again.</p>';
    }
?>

HTML

 <form class="form-horizontal ct-u-paddingBottom20" action="php/forget.php" method="post" id="passwd" style="display:none;">
                          <div class="form-group">
                                <label for="username" class="col-sm-2 control-label">Useremail: </label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" id="email" name="email" placeholder="enter your email id" required>
                                </div>
                            </div>
                          <div>
                              <center>
                                  <span style="color:green;display:none;" class="success-footer"><h4 style="margin-left: 0px;">password link is sent  </h4></span>
                                  <span style="color:orange;display:none;" class="error-footer"><h4 style="margin-left: 0px;">invalid email</h4></span>
                                </center>
                          </div>
                          <div class="form-group">
                                <div class="col-sm-offset-2 col-sm-10">
                                     <p><input type="submit" value="Reset Password" /></p>
                                </div>
                            </div>


                       </form>

的Javascript

<script type="text/javascript">

          var frm = $('#passwd');
          frm.submit(function (ev) {
              $.ajax({
                  type: frm.attr('method'),
                  url: frm.attr('action'),
                  data: frm.serialize(),
                  success: function (data) {
            //alert(data);
                      if (data) {
                        //alert('data');
                        $('.success-footer').css('display','block');
                      }
                      else{
                        $('.error-footer').css('display','block')
                      }
                  }
              });

              ev.preventDefault();

          });
      </script>

3 个答案:

答案 0 :(得分:1)

我假设您正在使用xampp发送电子邮件。如果是这种情况,请按照此讨论中的准则How to configure XAMPP to send mail from localhost?配置您的电子邮件设置。

这是示例代码

<?php
$Results['id'] = 1;
$message = "Your password reset link send to your e-mail address.";
$to      = 'your_email_id@gmail.com';
$subject = "Forget Password";
$from    = 'info@abc.com';
// $body    = 'Hi, <br/> <br/>Your Membership ID is '.$Results['id'].' <br><br>Click here to reset your password http://google.com/login-signup-in-php/reset.php?encrypt='.$encrypt.'&action=reset .';
$body    = "Hello";
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: ". strip_tags($from) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

mail($to, $subject, $message, $headers);
?>

如果您正确遵循指南,请尝试上面给出的代码,基本上从您的代码中删除一些从数据库中获取的数据,以便在邮件发送数据时生成测试。如果成功,那就是你把它放回去的时间

if (condition) {
  # code...
} else {
  # code...
}

你的代码。

希望这有助于解决问题

答案 1 :(得分:1)

通常,密码是经过哈希处理的,而不是编码的。不同之处在于哈希不能没有&#34;没有哈希&#34;带回原始密码。在代码的密码保存功能中,请检查您是否使用了password_hash()函数。如果你这样做了,你就无法获得该密码。

这实际上是一件好事,因为密码提醒通常是一种不安全的方式来提供一个&#34;忘记密码&#34;功能。请参阅Troy Hunt关于构建安全密码重置功能(http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html

的文章

可能有以下几种解决方案:

1)提供一次性,有时间限制的使用密码,可以用来更改密码。确保其中只有一个在任何时刻都有效。

2)提供指向唯一网址的链接,该链接允许用户对某些内容(例如安全问题)提出质疑,以验证他们不仅是电子邮件的收件人,还是实际上是请求更改密码的人。

第二种选择会更安全,因为它会提供额外的验证层,当然是为了方便用户。

答案 2 :(得分:-1)

像这样更新你的jquery ajax:

$.ajax({
  method: "POST",
  .....
})

因为方法是默认的:&#39; GET&#39;