尝试更新php/mysql代码以更改为新密码时出错

Mic*_*ael 0 html php mysql

如标题中所述,我遇到了SQL注入错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

我该如何解决?下面提供的是我的PHP代码和HTML代码

PHP:

if($_POST['submit']=='Change')
{
    $err = array();
    if(!$_POST['password1'] || !$_POST['passwordnew1'])
        $err[] = 'All the fields must be filled in!';
    if(!count($err))
    {
        $_POST['password1'] = mysql_real_escape_string($_POST['password1']);
        $_POST['passwordnew1'] = mysql_real_escape_string($_POST['passwordnew1']);
        $row = mysql_fetch_assoc(mysql_query("SELECT id,username FROM members WHERE username='{$_SESSION['username']}' AND pass='".md5($_POST['password1'])."'"));
        if($row['username'])
        {
            $querynewpass = mysql_query("UPDATE members SET pass='".md5($_POST['passwordnew1'])."' WHERE username='{$_SESSION['username']}'");
            $result = mysql_query($querynewpass) or die(mysql_error()); 
        }
        else $err[]='Wrong Password To Start With!';
    }
    if($err)
    $_SESSION['msg']['passwordchange-err'] = implode('<br />',$err);
    header("Location: members.php?id=" . $_SESSION['username']);
    exit;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<form action="" method="post">      
<?php
        if($_SESSION['msg']['passwordchange-err'])
        {
        echo '<div class="err">'.$_SESSION['msg']['passwordchange-err'].'</div>';
        unset($_SESSION['msg']['passwordchange-err']);
        }
        if($_SESSION['msg']['passwordchange-success'])
        {
        echo '<div class="success">'.$_SESSION['msg']['passwordchange-success'].'</div>';
        unset($_SESSION['msg']['passwordchange-success']);
        }
?>
    <label class="grey" for="password1">Current Password:</label>
    <input class="field" type="password" name="password1" id="password1" value="" size="23" />
    <label class="grey" for="password">New Password:</label>
    <input class="field" type="password" name="passwordnew1" id="passwordnew1" size="23" />
    <input type="submit" name="submit" value="Change" class="bt_register" style="margin-left: 382px;" />
</form>
Run Code Online (Sandbox Code Playgroud)

我让它在用户能够更改/更新其密码的地方工作,但是,当他们单击表单上的"更改"按钮时,它们将被定向到我上面发布的错误消息,如果他们单击刷新按钮,则只有这样他们被重定向回他们的个人资料并且已经进行了更改.所以我的主要问题是,如何在没有mysql错误消息的情况下让它完全正常工作?任何帮助将非常感激!

Con*_*eet 7

这里有一些问题,不仅可以发表评论.对不起,我无法确切地看到你的错误是什么,但是如果你遵循#1点,它就会消失.

  1. 不要使用该mysql库.它已被弃用,并已在PHP 5.5中被删除(最终!).它目前仅适用于您,因为您的PHP版本已过期.您应该使用PDO或MySQLi.有关PDO的信息,请查看此文章:http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/

  2. 不要将您正在查看的脚本中未生成的任何变量放入查询中,这包括SESSION变量.您只需要在应用程序中存在一个缺陷,用户就可以将数据注入SESSION.将每个变量视为脏.如果你知道它不是 - 100%肯定 - 然后把它当作脏.如果您使用PDO或MySQLi准备好的语句,这不是问题.

  3. 您应该按用户ID引用用户,而不是用户名.更快更安全.

  4. 永远不会md5()在数据库中存储密码原始或简单加密(如使用plain ).至少,您可以使用以下内容进行加密:crypt($password, '$2a$07$sillystring' . sha1($password) . '$')并通过重新密码验证密码并查看其是否匹配.这是一种非常基本,更安全的方式.有很多关于密码腌制的文章更深入,值得一试.