Php MySQL更新不';行不通

Php MySQL更新不';行不通,php,mysql,Php,Mysql,我想根据用户输入更新2个数据库字段。我的代码如下: <body> <?php $db_server["host"] = "localhost"; //database server $db_server["username"] = "root"; // DB username $db_server["password"] = "mypass"; // DB password $db_server["database"] = "mudb";// database name

我想根据用户输入更新2个数据库字段。我的代码如下:

 <body>
<?php
 $db_server["host"] = "localhost"; //database server
$db_server["username"] = "root"; // DB username
$db_server["password"] = "mypass"; // DB password
$db_server["database"] = "mudb";// database name

$dbc = mysql_connect($db_server["host"], $db_server["username"], $db_server["password"]);
mysql_select_db($db_server["database"], $dbc);
$user =  $_COOKIE['mycookie'];

    $q = "SELECT * FROM members WHERE username='$user'"; 
    $r = mysql_query( $q,$dbc);
    while ($row = mysql_fetch_array($r, MYSQLI_ASSOC)) { 
    echo 'username: '.$row['username'], '<br/>';

    $password=$row['password'];
?>

<form method="post" id="changepasswordform" > 
<input type="password" id="newpassword" name="newpassword"/>
<input type="submit"  name="changepasswordbutton"  >  
       </form>

<?php

        echo 'email:        '.$row['email'], '<br/>'; 
        }
?>

<form method="post" id="changeemailform" >  

        <input type="text" id="newemail" name="newemail"/>

       <input type="submit" value="αλλαγή"  name="changeemailbutton"  >
       </form>

<?php
}


    if (isset($_POST['changepasswordbutton'])){

                       $newpassword=$_POST['newpassword'];
                $q2 = "UPDATE members SET password=$newpassword WHERE username='$user'"; 

                $r2 = mysql_query($q2,$dbc);

}   

if (isset($_POST['changeemailbutton'])){
                    $newemail=$_POST['newemail'];
                    $q3 = "UPDATE members SET email=$newemail WHERE username='$user'"; 
                $r3 = @mysql_query( $q3,$dbc);  
}
?>
</body>

您缺少了应该围绕密码字段的
(引号)。 更改:

致:

重要提示:
即使它没有关联,也请不要使用
mysql.*
函数-它已被弃用,并且容易受到sql注入的攻击。最好使用PDO或MySQLi。

您缺少密码字段周围的
'
(引号)。 更改:

致:

重要提示:

即使它没有关联,也请不要使用
mysql.*
函数-它已被弃用,并且容易受到sql注入的攻击。最好使用PDO或MySQLi。

这将达到目的,并保存为sql注入(
mysql\u real\u escape\u string
):


当然,你不应该再使用
mysql.*
,我只是为你的具体情况举个例子。

这就可以了,并且可以保存为sql注入(
mysql\u real\u escape\u string
):


当然你不应该再使用mysql了,我只是举个例子说明你的具体情况。

警告你的代码很容易受到sql注入攻击!您还应该对您的用户密码进行salt+hash操作。请不要使用
mysql.*
函数编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果选择PDO,。是否注意到变量的查询字符串中没有花括号?其他字符串值中的字符串变量应使用
{}
引用,如
updatemembers SET password='{$newpassword}',其中username='{$user}'
警告您的代码非常容易受到sql注入攻击!您还应该对您的用户密码进行salt+hash操作。请不要使用
mysql.*
函数编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果选择PDO,。是否注意到变量的查询字符串中没有花括号?其他字符串值中的字符串变量应该用
{}
引用,比如
updatemembers SET password='{$newpassword}',其中username='{$user}'
这只会让我恶心-sql注入警告!如果您编辑
updatemembers SET password='$newpassword',其中username='$user'
以确保安全,我将删除我的-1并将其替换为+1(如果有帮助)。我不同意否决票。答案完全正确,问题是缺少引用。这是OP源代码中不起作用的部分。无论作者在业余时间做什么(比如打开安全漏洞),都是他自己的问题。他已在评论中得到警告,视情况而定。使用正则表达式解析HTML是不可能的,但某些特定情况下可以回答是的。我理解你的观点,我只是认为评论问题或答案将是证明你观点的更好方式,而不是用愤怒的反对票来诋毁答案。@yiannis同样的原因,你也应该在电子邮件周围添加
'
“更新成员集电子邮件='$newemail',其中用户名='$user'
。和yiannis,试着忽略这些粗鲁的行为,仍然从他们关于使用
mysql.*
的评论中学习。在我的母语中,有一句谚语说,即使是一个坏了的钟,每天也能正确地显示两次小时;)这让我恶心-sql注入警告!如果您编辑
updatemembers SET password='$newpassword',其中username='$user'
以确保安全,我将删除我的-1并将其替换为+1(如果有帮助)。我不同意否决票。答案完全正确,问题是缺少引用。这是OP源代码中不起作用的部分。无论作者在业余时间做什么(比如打开安全漏洞),都是他自己的问题。他已在评论中得到警告,视情况而定。使用正则表达式解析HTML是不可能的,但某些特定情况下可以回答是的。我理解你的观点,我只是认为评论问题或答案将是证明你观点的更好方式,而不是用愤怒的反对票来诋毁答案。@yiannis同样的原因,你也应该在电子邮件周围添加
'
“更新成员集电子邮件='$newemail',其中用户名='$user'
。和yiannis,试着忽略这些粗鲁的行为,仍然从他们关于使用
mysql.*
的评论中学习。在我的母语中,有一句谚语说,即使是一个坏了的钟,每天也能正确地显示两次小时;)
UPDATE members SET password=$newpassword WHERE username='$user'
UPDATE members SET password='{mysql_real_escape_string($password)}' 
WHERE username='{mysql_real_escape_string($user)}'
 $q2 = "UPDATE members SET 
   password='". mysql_real_escape_string($password) ."' 
   WHERE username='". mysql_real_escape_string($user) ."';