密码重置PHP

密码重置PHP,php,mysql,passwords,reset,Php,Mysql,Passwords,Reset,我是新的网站设计,我最近做了一个网站,我想添加一个重置密码功能,它不工作 SQL连接在init.php文件中 <?php include('core/init.php'); include('includes/overall/header.php'); echo " <h1>Reset Password</h1> <div class='Reset' align='center'> <form action='forgot_pass.php'

我是新的网站设计,我最近做了一个网站,我想添加一个重置密码功能,它不工作

SQL连接在init.php文件中

<?php
include('core/init.php');
include('includes/overall/header.php');
echo "
<h1>Reset Password</h1>


<div class='Reset' align='center'>
<form action='forgot_pass.php' method'POST'>
Enter your username<br><input type='text' name='username'><p>
<br>
Enter your email<br><input type='email' name='email'><p>
<input type='submit' value='Submit' name='submit'>
</form>
</div>
";

if (isset($_POST['submit']))
{
$username = $_POST['username'];
$email = $_POST['email'];

$query = mysql_query("SELECT * FROM `users` WHERE `username`='$username'");
$numrow = mysql_num_rows($query);

if ($numrow!=0)
{
    while($row = mysql_fetch_assoc($query))
    {
        $db_email = $row['email'];
    }
    if ($email == $db_email)
    {
        $code = rand(10000,1000000);

        $to = $db_email;
        $subject = "Password Reset";
        $body = "

        Automated email. Click the link
        http://random-html-stuff.webege.com/forgot_pass.php?code=$code&username=$username

        ";

        mysql_query("UPDATE users SET passreset='$code' WHERE username='$username'");
        mail($to,$subject,$body);

        echo "Check Email";
    }
    else
    {
        echo "Email not correct";
    }
} else {
    echo "That user does not exist";
    }


}

?>

您的表单中有一个错误:

<form action='forgot_pass.php' method'POST'>

应该是

<form action='forgot_pass.php' method='POST'>
                                     ^

^
因为它没有正确读取方法选项,所以它是通过GET提交表单的,而您的
isset($\u POST['submit'])
将返回false,并且根本不运行您的代码


最后:正如人们在评论中所说的那样,远离
mysql*
函数,尝试清理进出数据库的数据。

尝试更改查询

$query = mysql_query("SELECT * FROM `users` WHERE `username`='$username'");


定义“它不工作”。您可以使用此代码进行SQL注入。任何时候,只要您将用户输入直接传递到查询,您就可以打开您的数据库,以便对其进行操作/公开数据以确保安全。如果可以,您应该这样做。它们不再得到维护,而是在使用。学习,而不是使用PDO,不要问他们的电子邮件。只需输入用户名,然后在数据库中使用电子邮件。您很容易受到攻击,因此请享受获取服务器pwn3d的乐趣。为什么OP会更改为此?在代码中,用户在两个位置检查数据库中的用户名和电子邮件,而不是在一个位置输入一个查询,看不到OP在哪里检查电子邮件。检查一次并更新一次-但正如@Fred ii所指出的,存在一个主要的设计缺陷。很好。我花了好长时间才弄明白你之前/之后。。。也许考虑把<代码> ^ <代码>在<代码>=<代码>中指出……MARCB谢谢这个建议。
$query = mysql_query("SELECT * FROM `users` WHERE `username`='$username' and `email`='$email'");