PHP / SQL帮助功能

时间:2009-08-08 04:21:34

标签: php sql

帮我写一个函数。

function reportThread() {
 global $id;

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id'");
$r = mysql_fetch_assoc($result);

if ($r['is_checked'] == 0) {

echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>";

mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)");

} else echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>";

}

我想要实现的是,如果theres是用户在表中使用is_checked = 0报告的URL,我希望它说错误,我希望它插入!

这对我不起作用。它总是插入。

报告:
id,url,is_checked(默认为0),userID

我有记录......

3 个答案:

答案 0 :(得分:3)

现在,您的代码正在插入 if ($r['is_checked'] == 0,这与您想要的相反。但这不是唯一的问题。

您还使用等于运算符(==)而不是标识运算符(===)。

在PHP中,0是假值。以下是:

  • ""(空字符串)
  • 0(0为整数)
  • "0"(0为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $var;(声明的变量,但类中没有值)

因此,如果没有结果(将导致NULL)或is_checked是这些值中的任何一个,则使用相等运算符将使您的比较成为真。

  

PHP: Comparison Operators

你真正想要做的是检查价值是否真的等于0,如下:

if (strval($r['is_checked']) !== '0') {
  echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>";
  mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)");
} else {
  echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>";
}

但是既然你这样做了,为什么不直接在你的查询中进行操作呢?

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id' AND is_checked = '0'");

// No Result? Continue
if(mysql_num_rows($result) === 0) {
  echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>";
  mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)");
} else {
  echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>";
}

答案 1 :(得分:0)

你的逻辑是歪斜的。如果is_checked等于0,则插入该代码。试试这个:

function reportThread() {
 global $id;

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id'");
$r = mysql_fetch_assoc($result);

if ($r['is_checked'] == 0) 
{
    echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>";
}
else
{
    mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)");
    echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>";
}

答案 2 :(得分:0)

如果你想要的只是查询充当布尔运算符,你可以完全不需要检查行的数量。仅使用聚合函数而不是is_checked列,这样查询将始终返回单行,并且始终至少为0.如果删除is_checked列并删除网址user_id列的一部分(只在您需要时在另一个查询中输出),您可以获得更轻松的东西:

示例:

<script type="text/javascript">
alert("
<?php
$results = mysql_query("SELECT COUNT(threadID) AS counter FROM reports 
           WHERE threadID = '$id'");

while($count = mysql_fetch_assoc($results)) {
       $checked = ($count > 0) ? TRUE : FALSE;
 }

 if($checked) {
     echo "There is already a pending report on this thread.";
 }
 else {
     mysql_query("INSERT INTO reports (threadID, userID) VALUES ('$id', 1)");
     echo "Theres already a pending report on this thread.";
 }
 ?>
 ");

请注意,上面的示例假设您已经退出PHP,输出了javascript(因此无需脚本标记中的冗余回声),然后您只需启动需要填充警报的php in。