Проверка результата подсчета MySQL с помощью инструкции if / else

#php #mysql

#php #mysql

Вопрос:

Хорошо, вот мой код, который ограничивает скорость отправки формы. Когда форма отправляется, она принимает временную метку и IP-адрес, а затем при загрузке страницы у меня есть SQL-оператор, который принимает IP-адрес пользователя, подсчитывает, сколько раз он появлялся в базе данных за последний час, и если это 2, то почтовый ящик не отображается, иначе, проблема в том, что это не совсем работает, он просто продолжает показывать почтовый ящик, несмотря ни на что. Вот код:

 <?php

$IP = $_SERVER['REMOTE_ADDR'];
$sql = "select count(*) from mysql_table where ip='$IP' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR))"; 
$result = mysql_query($sql) or print mysql_error();

if ($result['count(*)'] == 2) {
die('You are out of posts this hour.');
}

else {
?>

<font style="position:relative; margin: 0 auto; top:15px; color:#fff; font-size:16px; font-family:Arial;">Note, once you have posted, it <b>CANNOT</b> be removed.</font>
<div id="postbox">
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<textarea id="postbox" name="postbox"></textarea><br />
<input type="checkbox" name="allowcommenting" value="1" id="commenting" CHECKED ><font style="margin-right:45px; font-family:Arial; font-size:18px; color:#fff; position:relative; top:15px;">Allow commenting?</font>
<?php
            require_once 'math-security.php';

            $math = new BasicMathSecurity( 'math' );
            echo $math->getField();
?>
<input type="submit" name="submit" id="submit" value="Share" value="This cannot be undone." />
</form>
</div>

<?php
}
?>
  

Комментарии:

1. Затем это требует базовой отладки. Есть ли IP-адрес в базе данных? Приводит ли запрос к чему-либо? и т.д.

2. Кстати, вам следует провести дезинфекцию, $IP прежде чем помещать его в базу данных, хотя это маловероятно, REMOTE_ADDR что это может быть подделано

3. Введен IP-адрес. Сейчас я проверю запрос.

4. $result['count(*)'] ??Что это? Кроме того, вы уверены, что хотите использовать die() ?

5. Die является временным, пока я заставляю его работать… $result[‘count(*)’] — это количество раз, сколько оно появляется, я думаю.

Ответ №1:

$result В этом случае еще не содержится подсчет. Сначала вы должны извлечь результирующую строку из результирующего набора запроса, затем вы можете сравнить.

 $sql = "select count(*) from mysql_table where ip='$IP' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR))"; 
$result = mysql_query($sql) or print mysql_error();
if($row = mysql_fetch_row($result)) {
   if ($row[0] == 2) {
      die('You are out of posts this hour.');
   }
}
  

Комментарии:

1. Это возвращает ошибку, ( ! ) Предупреждение: mysql_fetch_row() ожидает, что параметр 1 будет ресурсным, логическое значение, указанное в C:wampwwwanonpostindex.php в строке 453

Ответ №2:

Используйте mysql_fetch_assoc($result) или mysql_fetch_array($result) Вот один пример:

 $query = 'SELECT count(*) FROM '.$table;
$result = mysql_query($query);
$res = mysql_fetch_array($result);
echo "Count - ".$res[0];exit;