Как узнать последнюю запись?

  • Автор темы Автор темы mus
  • Дата начала Дата начала

mus

Новичок
Как узнать последнюю запись?

Господа, у меня такая проблема, я хочу сделать антифлуд, и выбрал для этого палатерский способ, тоесть:
чел сможет добавить комментарий к статье лишь тогда, когда пройдет ровно 1 минута с момента последнего добавления комментария.
На теории сделать легко, у меня есть поле date в строчках комментариев, теперь следует просто вычесть время серверное(точнее - настоящее время) от времени создания последней записи.
А теперь, собственно, вопрос, какой и как функцией воспользоваться для определения текущего серверного времени и как узнать какая запись в БД последняя?
Вопросы, по сути, ламерские, однако учится как-то надо.
Заранее благодарю!
(в долгу не останусь)

да, кстати, тип поля date в БД - timestamp (как Вы уже догадались, речь идет о mysql)

И напоследок, а как дизактевизировать кнопку субмит при нажатии на нее 1 раз? Тоесть как в форуме IPB, там кнопка становится неактивной при нажатии на нее единожды!
Ещё раз всем спасибо!
 
Все это очень замечательно, но правила форума все таки почитать надо.
 
mus
а людей-то ты различаешь?
пока при твоем способе никто не сможет ничего запостить.
текущее время пожно определить в запросе. его возвращает функция now()
поле timestamp не подходит для хранения времени создания.
поскольку оно хранит время изменения.
как дизактивировать кнопку, надо посмотреть в коде форума ипб
 
SiMM
на форуме x-forum
Фанат
НЕТ, людей мне ни к чему различать, сайт достаточно невелик, и комментов, думаю, много к нему не будет...В любом случае даже, если и совпадет время добавления комментов разных пользователей, один из них получит сообщение о необходимости подождать всего минутку =)
 
> В любом случае даже, если и совпадет время добавления комментов разных пользователей, один из них получит сообщение о необходимости подождать всего минутку =)
После чего забъёт на комменты и пошлёт тебя лесом. Либо выждет эту минутку и смачно выругается. Конечно есть и третий вариант...
 
Тогда подскажите мне, как правильно организовать антифлуд.
Буду очень признателен!
 
запоминать и проверять айпи адрес

$query="SELECT 1 from $table where ip = '".$_SERVER['REMOTE_ADDR']."' AND stamp > '".(time()-120)."'";
$res=mysql_query($query) or my_error();
if (mysql_num_rows($res)) $err.="Вы нам сегодня уже писали. Спасибо большое.";

Защита не стопроцентная, но вполне достаточная.
Как раз для сайта, куда ходят не часто
 
Защита не стопроцентная
Сори, а как можно еще лучше защитится? Всегда думал что IP сложнее всего скрыть/подделать из всей информации предоставляемой протоколом TCP/IP
 
_RVK_, что то я тебя не пойму. Ведь ясно же, что дело не в подделке IP, а в том, что он может быть одинаковым у множества пользователей. Ну а уж о том, что 100% идентифицировать пользователя невозможно, я думаю, ты знаешь.
 
SiMM
Ага, я не правильно понял. Просто одинаковые IP приведут лишь к неудобству пользоватлей, но не ослабят защиту. Отсюда и мой вопрос.
 
$query="SELECT 1 from $table where ip = '".$_SERVER['REMOTE_ADDR']."' AND stamp > '".(time()-120)."'";
$res=mysql_query($query) or my_error();
if (mysql_num_rows($res)) $err.="Вы нам сегодня уже писали. Спасибо большое.";
Можете объяснить, ка кэто работает?
Тоесть
$query="Выбрать одну запись из таблицы такой-то, где айпи=айпи_пользователя_выполняющего этот запрос и поле штапм больше чем время минус 120";
$res=функции выполнения запроса
if(по завершению выполнения запроса строчек стало больше, то выдать такой-то текст.

Господа, полная сумятица - я где-то ошибаюсь - исправьте меня, пожалуйста!
А именно, мне неясно, что-же, я должен буду хранить ip в таблице для комментариев? Согласен, если так, но так ли это?
И ещё, что за поле штамп? Какую функцию оно выполняет?
Спасибо!
 
Э. да я смотрю,
Выбрать одну запись
нет, там нигде не написано, что выбрать надо одну запись.
просто выбрать строки, удовлетворяющие условию.
if(по завершению выполнения запроса строчек стало больше
это я вообще не понял.
что значит - стало больше? при чем здесь по завершению?
проще надо быть! гораздо проще.
функция mysql_num_rows всего лишь считает количество повзвращённых строк.
if(запрос вернул больше одной строки (то есть уже была в течение двух минут с такого айпи уже запись)) то выдать сообщение об ошибке и в базу не писать
что-же, я должен буду хранить ip в таблице для комментариев
совершенно верно.
при том, что адрес все равно всегда хранят, на всякий случай.
И ещё, что за поле штамп? Какую функцию оно выполняет?
время записи.
в данном случае - это unix timestamp
 
> if(запрос вернул больше одной строки
Поправка - наверно всё же "хоть одну строку" (или "не менее одной").
 
да, спасибо.
больше нуля, конечно же

mus
запись if (mysql_num_rows($res)) равнозначна записи
if (mysql_num_rows($res) > 0)
 
if (mysql_num_rows($res) > 0)
эквивалентность первой и второй записи ясна, я понял сразу, просто перепутал функции mysql_affected_rows с mysql_num_rows.
А по первой части
Я просто не видел ранее такого рода запрос
SELECT 1 FROM
Такой видел
SELECT * FROM
Вот отсюда и непонятка, думал запросом с еденицей можно сразу заменить параметр LIMIT.
Огромное СПАСИБО, господа, за помощь!
Мне всегда нравится в людях то, что даже на ламерские вопросы люди отвечают спокойно и профессионально!
Спасибо ещё раз!
 
Сверху