php初学者问题.如果声明

1 php mysql sql

核实,

我有这张桌子

tablename:报告
id(AI)
内容(varchar),
contentID(int),
checked(tinyint)

 if (isset($_GET['reportPost'])){

 $query = mysql_query("select * from reports where contentID = $_GET[reportPost]");
 $report = mysql_fetch_assoc($query);

 if (!mysql_num_rows($query) && $report['checked'] == 0) {
 echo 'There is already a pending report on this object.';
 } else {
 header("Refresh: 2; url=showthread.php?id=$id");
 echo '<div class="successMsg">Thanks for your report!</div>';
 mysql_query("insert into reports...");
 }

 }
Run Code Online (Sandbox Code Playgroud)

我想用这段代码实现的是,如果已经在contentID = $ _GET [reportPost]的报告中记录并且被检查= 0我不希望这个执行.上面的代码不会这样做.

一些帮助会很有帮助:)

Iva*_*ica 5

  1. $_GET["reportPost"]应该走出弦外.我认为PHP没有正确地逃脱,在任何情况下,即使使用简单的变量也是不好的做法.你可能想这样做:

    $query = mysql_query("select * from reports where contentID = '" . mysql_real_escape_string($_GET[reportPost]) . "';");
    基本的SQL注入保护免费投入:-)

  2. 您是否尝试验证我们是否无法获取数据,然后尝试检查我们获取的内容?

        if (!mysql_num_rows($query) && $report['checked'] == 0) {
    这看起来不对.正如其他人所建议的那样,要么用&|替换&&,要么用否定(!).

哦,顺便说一下,我建议你看一下PDO.更实用,并且更容易切换到另一个数据库后端

编辑:我忘了在生成的字符串周围添加引号mysql_real_escape_string().我想我被PDO宠坏了,$ db-> quote()和参数化查询自动完成...