2009-08-08 2 views
1

Помогите мне написать функцию.Справка 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>"; 

} 

То, что я хочу для того чтобы достигнуть, что если Тереза ​​является URL, что пользовательские отчеты в таблице с is_checked = 0 я хочу сказать, ошибка еще я хочу, чтобы вставить!

Это не сработает для меня. Он всегда вставляет.

отчеты:
идентификаторов, URL, is_checked (по умолчанию 0), идентификатор пользователя

У меня есть записи ...

ответ

3

Прямо сейчас, вы код вставки if ($r['is_checked'] == 0), который является противоположностью того, что вы хотите. Но это не единственная проблема.

Вы также используете оператор равенства (==) вместо оператора тождества (===).

В PHP значение 0 является ложным. Таким образом, можно выделить следующие:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 в виде строки)
  • NULL
  • FALSE
  • array() (пустой массив)
  • var $var; (переменная de clared, но без значения в классе)

Так что, если нет результата (вызовет 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>"; 
} 
+0

большое спасибо! – 2009-08-08 04:42:24

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>"; 
} 
0

Вы могли бы устранить необходимость проверки количества для строк в целом, если все, что вы хотите для запроса, чтобы выступать в качестве булева оператора. Используйте агрегатную функцию вместо столбца is_checked, и таким образом запрос всегда будет возвращать одну строку и всегда будет не менее 0.И если вы удалите is_checked колонку и удалить URL-адрес часть 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, где необходимо заполнить предупреждение.

Смежные вопросы