php初学者问题。如果声明

时间:2009-07-09 03:33:49

标签: php sql mysql

检查,

我有这张桌子

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 我不想要这要执行。上面的代码不会这样做。

一些帮助会非常有用:)

5 个答案:

答案 0 :(得分: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) {
    这看起来不对。正如其他人所建议的那样,要么替换&amp;&amp; amp;与||,或否定(!)必须去。

  3. 哦,顺便说一句,我建议你看看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 {
....
}