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

mus

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

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

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

И напоследок, а как дизактевизировать кнопку субмит при нажатии на нее 1 раз? Тоесть как в форуме IPB, там кнопка становится неактивной при нажатии на нее единожды!
Ещё раз всем спасибо!
 

Кром

Новичок
Все это очень замечательно, но правила форума все таки почитать надо.
 

Фанат

oncle terrible
Команда форума
mus
а людей-то ты различаешь?
пока при твоем способе никто не сможет ничего запостить.
текущее время пожно определить в запросе. его возвращает функция now()
поле timestamp не подходит для хранения времени создания.
поскольку оно хранит время изменения.
как дизактивировать кнопку, надо посмотреть в коде форума ипб
 

mus

Новичок
SiMM
на форуме x-forum
Фанат
НЕТ, людей мне ни к чему различать, сайт достаточно невелик, и комментов, думаю, много к нему не будет...В любом случае даже, если и совпадет время добавления комментов разных пользователей, один из них получит сообщение о необходимости подождать всего минутку =)
 

SiMM

Новичок
> В любом случае даже, если и совпадет время добавления комментов разных пользователей, один из них получит сообщение о необходимости подождать всего минутку =)
После чего забъёт на комменты и пошлёт тебя лесом. Либо выждет эту минутку и смачно выругается. Конечно есть и третий вариант...
 

mus

Новичок
Тогда подскажите мне, как правильно организовать антифлуд.
Буду очень признателен!
 

Фанат

oncle terrible
Команда форума
запоминать и проверять айпи адрес

$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.="Вы нам сегодня уже писали. Спасибо большое.";

Защита не стопроцентная, но вполне достаточная.
Как раз для сайта, куда ходят не часто
 

_RVK_

Новичок
Защита не стопроцентная
Сори, а как можно еще лучше защитится? Всегда думал что IP сложнее всего скрыть/подделать из всей информации предоставляемой протоколом TCP/IP
 

SiMM

Новичок
_RVK_, что то я тебя не пойму. Ведь ясно же, что дело не в подделке IP, а в том, что он может быть одинаковым у множества пользователей. Ну а уж о том, что 100% идентифицировать пользователя невозможно, я думаю, ты знаешь.
 

_RVK_

Новичок
SiMM
Ага, я не правильно понял. Просто одинаковые IP приведут лишь к неудобству пользоватлей, но не ослабят защиту. Отсюда и мой вопрос.
 

mus

Новичок
$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 в таблице для комментариев? Согласен, если так, но так ли это?
И ещё, что за поле штамп? Какую функцию оно выполняет?
Спасибо!
 

Фанат

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

SiMM

Новичок
> if(запрос вернул больше одной строки
Поправка - наверно всё же "хоть одну строку" (или "не менее одной").
 

Фанат

oncle terrible
Команда форума
да, спасибо.
больше нуля, конечно же

mus
запись if (mysql_num_rows($res)) равнозначна записи
if (mysql_num_rows($res) > 0)
 

mus

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