2011-04-19 77 views
0
<?php 
$host = "localhost"; 
$user = "root"; 
$pass = "pass"; 
$db = "table"; 
$connect=mysql_connect($host, $user, $pass) or die(mysql_error()); 
mysql_select_db($db, $connect) or die(mysql_error()); 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $username = trim($_POST["username"]); 
    $res = mysql_query("SELECT id, username, email, ip FROM users WHERE username='". mysql_real_escape_string($username) . "'"); 

    $arr = mysql_fetch_assoc($res); 
    $user_id = $arr['id']; 
    $user_name = $arr['username']; 
    $user_email = $arr['email']; 
    $user_ip = $arr['ip']; 
    $res = mysql_query("UPDATE users SET enabled=no WHERE id=$user_id") or mysql_error(); 
} 
?> 
<form method="post" action=""> 
<input type="text" size="40" name="username"> 
<tr><td colspan="2"><input type="submit" class="btn" value='send'></td></tr> 
</form> 

该脚本不执行:$res = mysql_query("UPDATE users SET enabled=no WHERE id=$user_id") or mysql_error();PHP的MySQL更新

有什么不对?

回答

7

用途:

$res = mysql_query("UPDATE users SET enabled='no' WHERE id=$user_id") or die(mysql_error()); 
2

尝试包裹启用=没有和ID = $ user_ID的引号

$res = mysql_query("UPDATE users SET enabled='no' WHERE id='$user_id'") or mysql_error(); 

你也应该确保你逃避你的变量作为你的代码很容易受到SQL注射

$username = mysql_real_escape_string(trim($_POST["username"])); 
+0

如果id列是我怀疑单引号$ user_ID的整数你不需要单引号括起来的user_id $ – 2011-04-19 12:21:59

+0

... 你确定? – PHP 2011-04-19 12:22:27

+0

的确如此,但这是最好的实践 - 如果它在引号内并且你转义了变量,它可以防止SQL注入 – fin1te 2011-04-19 12:22:34

0

您需要调试。

在该行

$res = mysql_query("UPDATE users SET enabled=no WHERE id=$user_id") or mysql_error(); 

写这条线

"UPDATE users SET enabled=no WHERE id=$user_id" 

你会看到什么命令将被执行的结束。可能$ user_id变量出错。

,如果你看到错误的SQL命令去头,并试图探讨为什么USER_ID未来错