проверить, зарегистрирован ли пользователь за последний час - PullRequest
1 голос
/ 16 января 2010

У меня есть этот фрагмент кода, чтобы проверить, создал ли пользователь учетную запись в последний час:

$result = mysql_query("SELECT * FROM accounts WHERE registration_ip = '$_SERVER[REMOTE_ADDR]' AND created > ".(time() - 3600));

if (mysql_num_rows($result) > 0)
    exit('Blablal')

Он не выходит так, как я хочу, я могу сделать столько счетов, сколько хочу.

Вы видите какую-либо очевидную проблему? Мои таблицы и поля БД верны

Ответы [ 7 ]

1 голос
/ 17 января 2010

Ваша проблема, вероятно, в этом, $ _SERVER [REMOTE_ADDR]

Вы встраиваете это непосредственно в строку в двойных кавычках. Если вы хотите получить доступ к массиву в строке в двойных кавычках, вам нужно поместить переменную доступа к массиву в пару фигурных скобок.

Исправленная строка:

"ВЫБРАТЬ * ИЗ УЧЕТНЫХ ЗАПИСЕЙ, ГДЕ регистрационный_ip = '{$ _SERVER [' REMOTE_ADDR ']}' И создан>". (Время () - 3600)

Кроме того, всегда в индексах кавычек вы использовали REMOTE_ADDR вместо 'REMOTE_ADDR' или "REMOTE_ADDR"

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

1 голос
/ 23 января 2011

я просто взял пробелы, теперь все отлично работает

registration_ip='$_SERVER[REMOTE_ADDR]'
0 голосов
/ 18 января 2010

Вам нужно использовать {} для вещей, которые вы встраиваете в SQL, которые являются PHP. Я думаю, что это должно работать. Я всегда делаю это, так как обнаружил, что это экономит мое время на отладку, так как кажется, что он появляется довольно часто.

$result = mysql_query("SELECT COUNT(*) FROM accounts WHERE registration_ip = '{$_SERVER[REMOTE_ADDR]}' AND created > ".({time()} - 3600));

Если это не сработает, сохраните ваш запрос в переменной, отобразите его на странице и посмотрите, что он отправляет.

$sql = "SELECT COUNT(*) FROM accounts WHERE registration_ip = '{$_SERVER[REMOTE_ADDR]}' AND created > ".({time()} - 3600)";

echo $sql;
0 голосов
/ 17 января 2010

Яда ответ правильный. Единственный другой комментарий, который я хотел бы сделать, заключается в том, что вы экранируете $ _SERVER [REMOTE_ADDR], используя mysql_real_escape для защиты от SQL-инъекций при вероятности переопределения переменной

0 голосов
/ 16 января 2010

Я проверил это локально, и для меня это ведет себя как ожидалось. Я бы сказал, что проблема не в вашем запросе, а в другом месте. Проверьте свои данные и убедитесь, что они вставляются, как ожидалось.

Кроме того, вы можете использовать SELECT COUNT для подсчета столбцов вместо SELECT * - это должно быть быстрее.


  $result = mysql_query("SELECT COUNT(*) FROM accounts WHERE registration_ip = '$_SERVER[REMOTE_ADDR]' AND created > ".(time() - 3600));

  $count = mysql_fetch_array($result);
  if ($count[0] > 0) exit('BLAH');
0 голосов
/ 16 января 2010

Также ваш sql запрос AND created > ".(time() - 3600)); неверен, чтобы получить последний час. Вы хотите что-то вроде этого:

SELECT ... WHERE ... 
AND created > DATE_SUB(now(), INTERVAL 1 HOUR)
0 голосов
/ 16 января 2010

Проверьте это, удалив предложение registration_ip = '$_SERVER[REMOTE_ADDR]'.

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