PHP начинающий вопрос. если заявления - PullRequest
1 голос
/ 09 июля 2009

проверь,

У меня есть эта таблица

имя таблицы: отчеты
id (AI)
содержание (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] и checked = 0 Я не хочу выполнить. Приведенный выше код этого не сделает.

Некоторая помощь будет очень ценной:)

Ответы [ 5 ]

5 голосов
/ 09 июля 2009
  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) {
    Это не выглядит правильно. Как предлагают другие, либо замените && на ||, либо отрицание (!) Должно идти.

Да, кстати, я рекомендую вам взглянуть на PDO . Более практичный и упрощает переключение на другую базу данных

РЕДАКТИРОВАТЬ : Я забыл добавить кавычки вокруг строки, сгенерированной mysql_real_escape_string(). Я думаю, что я избалован PDO, где $ db-> quote () и параметризованные запросы делают это автоматически ...

0 голосов
/ 09 июля 2009

почему не просто:

$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 {
....
}
0 голосов
/ 09 июля 2009

Некоторая комбинация ...

$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 и || вместо &&

0 голосов
/ 09 июля 2009

Я бы добавил ваше условие проверено в оператор SQL:

$query = mysql_query("select * from reports where contentID = '" . $_GET[reportPost] . "' AND checked = 0");

Теперь в результате вы получаете записи только в том случае, если они проверены, поэтому вам нужно только проверить количество строк в ответе на ваш запрос.

if (!mysql_num_rows($query)) {

Надеюсь, это поможет.

0 голосов
/ 09 июля 2009

Может быть, вам стоит попробовать:

 if (mysql_num_rows($query) && $report[0]['checked'] == 0) {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...