核实,
我有这张桌子
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我不希望这个执行.上面的代码不会这样做.
一些帮助会很有帮助:)
$_GET["reportPost"]应该走出弦外.我认为PHP没有正确地逃脱,在任何情况下,即使使用简单的变量也是不好的做法.你可能想这样做:
$query = mysql_query("select * from reports where contentID = '" . mysql_real_escape_string($_GET[reportPost]) . "';");
基本的SQL注入保护免费投入:-)您是否尝试验证我们是否无法获取数据,然后尝试检查我们获取的内容?
if (!mysql_num_rows($query) && $report['checked'] == 0) {这看起来不对.正如其他人所建议的那样,要么用&|替换&&,要么用否定(!).哦,顺便说一下,我建议你看一下PDO.更实用,并且更容易切换到另一个数据库后端
编辑:我忘了在生成的字符串周围添加引号mysql_real_escape_string().我想我被PDO宠坏了,$ db-> quote()和参数化查询自动完成...