检查,
我有这张桌子
tablename:reports
id(AI)
content(varchar),
contentID(int),
检查(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...");
}
}
我希望使用此代码实现的是,如果已经在 contentID = $ _GET [reportPost] 的报告中记录并且已检查= 0 我不想要这要执行。上面的代码不会这样做。
一些帮助会非常有用:)
答案 0 :(得分:5)
$_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) {这看起来不对。正如其他人所建议的那样,要么替换&amp;&amp; amp;与||,或否定(!)必须去。
哦,顺便说一句,我建议你看看PDO。更实用,更容易切换到另一个数据库后端
编辑:我忘了在mysql_real_escape_string()
生成的字符串周围添加引号。我想我被PDO宠坏了,$ db-&gt; quote()和参数化查询自动完成......
答案 1 :(得分:0)
可能你应该尝试:
if (mysql_num_rows($query) && $report[0]['checked'] == 0) {
答案 2 :(得分:0)
......的某种组合
$query = mysql\_query("select * from reports where contentID = $\_GET[reportPost] AND checked<>0");
$report = mysql\_fetch\_assoc($query);
if (!mysql_num_rows($query) || $report['checked'] == 0) {
echo 'There is already a pending report on this object.';
} else {
...
}
注意WHERE和||中的第二个子句而不是&amp;&amp;
答案 3 :(得分:0)
我会将你的条件添加到sql语句中:
$query = mysql_query("select * from reports where contentID = '" . $_GET[reportPost] . "' AND checked = 0");
现在您只检查结果中的记录,因此您只需要测试查询响应中的行数。
if (!mysql_num_rows($query)) {
希望这有帮助。
答案 4 :(得分:0)
为什么不呢:
$query = mysql_query("select * from reports where contentID = $_GET[reportPost] and checked = 0");
$report = mysql_fetch_assoc($query);
if (mysql_num_rows($query)) {
echo 'This object is already been reported but not dealt with.';
} else {
....
}