if statement php?


if statement php?

我不知道为什么,但这是不工作:

我正在工作的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语句并直接将数据放入数据库时,它正在工作。

我是新来的,所以请宽容。我希望有人能指出我的错误。

谢谢!

上帝啊!我不敢相信,到目前为止,没有一个答案指出原始代码中的大量 SQL注入向量;老实说,如果if块没有按照您最初的预期工作,这对数据库的安全性更好!

必须净化、转义和清理所有来自用户的数据;如果不这样做,您的数据库就会受到SQL注入攻击。如果这对你来说是新的,那么我建议你阅读一些关于这个主题的文章,或者投资一本关于这个主题的书。

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。

我想你可能想检查true,而不是'true' -你正在寻找一串恰好拼写为true的文本,而不是布尔值true/false。

如果$check是布尔值(或在比较中求值为布尔值):

if($check == true){ 

或者更好,直接:

if ($check) {

尝试将if语句改为:

if ($check) {

你要做的是将其作为布尔值计算,所以你需要将其视为一个布尔值。这里的关键点是$check可能具有的值,因为它来自客户端-最好的做法是让客户端使用1为真,0为假。

这可能值得你读一读。请注意,几乎所有字符串值(即您将从$_GET$_POST获得的值)都会求值为真——这里您很容易被捕获的地方是'false'求值为真。

你从浏览器得到的任何东西都是不确定的。周围有讨厌的人,

清理输入

我们需要知道$check包含什么…请提供更多信息。在general中,它将工作:

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());
}

,也许它可以工作:

if ( $check == TRUE ) {