-2

所以,我正在创建一个非常简单的重置功能。索引页面上的一个文件只是一个 html 表单,如下所示:

<html>
<body>
<div>
<form id="reset" action="login/reset.php" method="post">
            <fieldset>
            <label for="reset-email"> Enter your e-mail address here :</label>
            <input type="text" name="SignupEmailAdd" id="login-email" /><br />
            <label for="reset-password"> Enter your new password here :</label> 
            <input type="password" name="SignupPassword" id="reset-password" /><br />

            <input type="submit" id="reset-button" value="Reset my password!" />
            </fieldset>
</form>
</div>
</body>
</html>

将数据库连接到表单的另一个文件称为 reset.php,它具有以下功能:

<? php
session_start(); 

mysql_connect('localhost','root','password');
mysql_select_db('testproject');

$SignupEmailAdd = $_POST['SignupEmailAdd']; 
$SignupPassword = $_POST['SignupPassword'];

if($SignupPassword)
    $sql=mysql_query("UPDATE users SET SignupPassword='$SignupPassword' where SignupEmailAdd='$SignupEmailAdd'");

if($sql)
{
    echo 'Congratulations You have successfully changed your password. 
    <br /><a href= "http://www.bla.com/">Click here to go back to the login page.</a>';
}

else
{
        echo 'The email address you've entered does not exist';.
}

?>

您会看到除了我的 else 功能外一切正常。它不会显示消息“电子邮件地址..不存在”,而是显示“恭喜..”。我可以用我的 else 语句做什么?我也试过这个而不是别的:

<?php
if(!$sql){echo 'The username you entered does not exist';}
?>
4

4 回答 4

3

如果查询错误,该函数mysql_query()返回 FALSE,当查询影响 0 行时返回 NOT。您需要执行以下操作来验证您的声明:

if(mysql_affected_rows($sql) < 1)
{
    printf("There is no email address error!");
}

另外,请考虑切换到 PDO 或 MySQLi,这有助于解决这些情况.. PLUS!您将不太容易受到注入攻击。

文档在mysql_query()这里:http ://us3.php.net/mysql_query ,它提供了所有这些功能的导航。

于 2012-11-28T20:16:20.567 回答
2

虽然你真的应该切换到 PDO/mysqli 并使用准备好的语句来解决你遇到的 sql 注入问题,但这里的问题是你不应该检查mysql_query. true只要没有错误,这将返回一个评估为的值。如果没有更新任何行,这并不意味着存在错误。

在您的情况下,您需要mysql_affected_rows查看一行是否已更新。

于 2012-11-28T20:16:00.690 回答
1

看起来你的撇号弄乱了你的代码。在它周围使用双引号,你应该没问题。你的分号后面还有一个句号,我不知道为什么。

但正如其他人所提到的,安全问题应该是您最关心的问题。

于 2012-11-28T20:16:53.597 回答
0

正如马库斯所说,这是危险的代码。

第一个 $SQL 变量和最后一个不一样。

尝试:

if($SignupPassword)
{
$sql=mysql_query("UPDATE users SET SignupPassword='$SignupPassword' where SignupEmailAdd='$SignupEmailAdd'");


if($sql)
...
else
...
}
于 2012-11-28T20:31:39.490 回答