我不知道为什么但这不起作用:
我正在进行Ajax发送,我已经向PHP脚本发送了一个值,该脚本解析值并将值存储在php变量中。 现在:
$id = $_GET['id'];
$url = $_GET['url'];
$check = $_GET['check'];
$filid = mysql_real_escape_string($id);
$filurl = mysql_real_escape_string($url);
if($check == 'true'){
$insert = "INSERT INTO tab (id,url) VALUES ('$filid','$filurl')";
mysql_query($insert) or die(mysql_error());
}
我确认我的Ajax代码正在运行,我不确定php。当我删除if语句并直接将数据放入我的数据库时,它正在工作。
我很新,所以请容忍。 我希望有人可以指出我的错误。
谢谢!
答案 0 :(得分:2)
亲爱的上帝!我无法相信到目前为止没有一个答案指出原始代码中的大量 SQL注入向量;说实话,对于数据库的安全性来说,if块不能按照你原来的意图工作更好!
您必须进行sanatize,转义并清理来自用户的所有数据;如果不这样做,将使您的数据库对SQL injection攻击敞开大门。如果这对您来说是新手,那么我建议您阅读some articles并可能投资a book on the subject。
PHP包含一个函数,它会为你调用值mysql_real_escape_string()的值,你应该修改你的SQL语句来读取:
$clean_id = mysql_real_escape_string($id);
$clean_url = mysql_real_escape_string($url);
$insert = "INSERT INTO tab (id,url) VALUES ('$clean_id','$clean_url')";
为了避免记住这些事情,我建议您查看数据库抽象层,它们将为您处理; MDB2是一个受欢迎的软件包,尽管还有很多其他软件包,例如doctrine。
答案 1 :(得分:1)
如果$ check是布尔值(或在比较中计算为布尔值):
if($check == true){
或更好,只是:
if ($check) {
答案 2 :(得分:1)
我想你可能想检查true
,而不是'true'
- 你正在寻找一串拼写为true的文本,而不是布尔值true / false。
答案 3 :(得分:0)
我们需要知道$ check包含哪些内容..请提供更多信息。 在一般中,它将起作用:
if (!empty($check)) {
$insert = "INSERT INTO tab (id,url) VALUES ('$id','$url')";
mysql_query($insert) or die(mysql_error());
}
如果 $ check 是布尔值,请执行以下操作:
if ( $check ) {
$insert = "INSERT INTO tab (id,url) VALUES ('$id','$url')";
mysql_query($insert) or die(mysql_error());
}
和perheps它的工作原理:
if ( $check == TRUE ) {
答案 4 :(得分:0)
尝试将if语句更改为:
if ($check) {
您要做的是将其评估为布尔值,因此您需要将其视为一个布尔值。这里的关键点是$check
可能具有的值,因为它来自客户端 - 最好的做法是让客户端使用1
表示true,0
表示false。 / p>
你可能值得一读this。请注意,几乎任何字符串值(您将从$_GET
和$_POST
获得的内容)将评估为true - 您可以轻松地将此处捕获的位置'false'
评估为true
答案 5 :(得分:0)
您从浏览器获得的任何内容都是iffy。有讨厌的人,
清理输入。