帮我写一个函数。
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
我有记录......
答案 0 :(得分:3)
现在,您的代码正在插入 if ($r['is_checked'] == 0
),这与您想要的相反。但这不是唯一的问题。
您还使用等于运算符(==
)而不是标识运算符(===
)。
在PHP中,0是假值。以下是:
""
(空字符串)0
(0为整数)"0"
(0为字符串)NULL
FALSE
array()
(空数组)var $var;
(声明的变量,但类中没有值)因此,如果没有结果(将导致NULL
)或is_checked
是这些值中的任何一个,则使用相等运算符将使您的比较成为真。
你真正想要做的是检查价值是否真的等于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。