2013-07-04 58 views
-2

我想解决一个我正在制作的web应用程序上的查询,这个查询一直失败,我不知道为什么!代码如下:UPDATE .. SET .. WHERE SQL查询失败

$update = $_GET['update']; 
if($update == "true"){ 
    $setDetails="UPDATE users SET email='{$_POST['email']}', api_key='{$_POST['api_key']}', api_secret='{$_POST['api_secret']}' WHERE username={$_POST['username']}"; 
    if(mysql_query($setDetails)){ 
     $updatemsg = '<div class="alert alert-success"><a href="#" class="close" data-dismiss="alert">×</a><strong>Success!</strong> Your details have been updated in our database.</div>'; 
    }else{ 
     $updatemsg = '<div class="alert alert-error"><a href="#" class="close" data-dismiss="alert">×</a><strong>Failure!</strong> Your details could not be updated in our database. Please try again later or contact us if this keeps happening.</div>'; 
    } 
}else if($update == "false"){ 
    $updatemsg = '<div class="alert alert-success"><a href="#" class="close" data-dismiss="alert">×</a><strong>Success!</strong> Your changed were discarded.</div>'; 
} 

任何想法,帮助或提示?请注意,进一步下来我的网络应用程序,我有SELECT * FROM users WHERE username='$username'这工作正常,所以没有数据库连接的问题。

+1

你是什么意思失败?你有SQL错误吗?还请注意,您并未逃避您的用户名,使SQL注入成为可能。 – Chris

+0

在其他与SQL注入相关的东西中,最后应引用'username = $ _ POST ['username']'字段。 –

+0

@Chris我了解安全问题,我计划下一步解决它们。会发生什么是$ updatemsg返回第二个值(错误消息)。 –

回答

3
$update = $_GET['update']; 
if($update == "true"){ 
    $setDetails="UPDATE users SET email='{$_POST['email']}', api_key='{$_POST['api_key']}', api_secret='{$_POST['api_secret']}' WHERE username='{$_POST['username']}'"; 
    if(mysql_query($setDetails)){ 
     $updatemsg = '<div class="alert alert-success"><a href="#" class="close" data-dismiss="alert">×</a><strong>Success!</strong> Your details have been updated in our database.</div>'; 
    }else{ 
     $updatemsg = '<div class="alert alert-error"><a href="#" class="close" data-dismiss="alert">×</a><strong>Failure!</strong> Your details could not be updated in our database. Please try again later or contact us if this keeps happening.</div>'; 
    } 
}else if($update == "false"){ 
    $updatemsg = '<div class="alert alert-success"><a href="#" class="close" data-dismiss="alert">×</a><strong>Success!</strong> Your changed were discarded.</div>'; 
} 

详情: 您的代码:

$setDetails="UPDATE users SET email='{$_POST['email']}', api_key='{$_POST['api_key']}', api_secret='{$_POST['api_secret']}' WHERE username={$_POST['username']}"; 

正确的代码:

$setDetails="UPDATE users SET email='{$_POST['email']}', api_key='{$_POST['api_key']}', api_secret='{$_POST['api_secret']}' WHERE username='{$_POST['username']}'"; 

缺少'周围的用户名字符串。

+0

感谢您的伟大答案,只是我需要:) –

+0

@BenedictLewis请接受答案。 –

+0

我无法接受另外5分钟的答案,您必须等待10分钟后提出您的问题才能将答案标记为正确。 –

1

尝试像this.Put报价为username

$setDetails="UPDATE users 
      SET email='{$_POST['email']}', 
       api_key='{$_POST['api_key']}', 
       api_secret='{$_POST['api_secret']}' 
      WHERE username='{$_POST['username']}' "; 

,并尽量避免mysql_*语句由于他们弃用。相反使用mysqli_*陈述或者PDO声明

+0

这个建议的解决方案对于注入攻击是不安全的。 – mickmackusa