Вы не зашли.
#1.
Nbbt
Off
(3)
Участник
2009.04.26 12:12
Иии нужна помощь. Пишу (точнее пытаюсь) написать гостевую. Вопрос: как сделать чтоб одинаковые сообщения не добавлялись, и при "обновлении" страницы со скриптом тоже не добавлялись сообщения? Гостевую делаю на файле, форма>скрипт обрабатывает и записывает в файл в виде
ник|мыло|сайт|город|сообщение
следующая строка в таком же виде и т.д
Gemorroj, need help!)
доставай последнее сообщение из бд и сравнивай с тем, что постится. если совпадают, то шли нахуй.
#3.
Nbbt
Off
(3)
Участник
2009.04.26 12:12
У меня на файле... И я х3 как доставать и сравнивать, мож намекнешь?
смотря каким образом ты хранишь данные в файле.
#5.
Nbbt
Off
(3)
Участник
2009.04.26 12:12
fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");
ты учел, что в любой из переменных может встречаться символ
| и структура может нарушиться?
#7.
Nbbt
Off
(3)
Участник
2009.04.26 13:01
Потом буду заменять на L (l)
Добавлено спустя 1 минуту 10 секунд: Или предложишь лучший вариант? )
дай полный код записи данных, начиная с fopen
#9.
Nbbt
Off
(3)
Участник
2009.04.26 13:01
$fp = fopen ("messages.dat","a");
fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");
fclose ($fp);
Код:
span style="color: #0000BB"><?php// считываем файл в массив$data = file('messages.dat');// берем последий элемент$end = end($data);// разбиваем строку по символу | и присваиваем элементам именаlist($nick, $mail, $site, $town, $mess) = explode('|', $end);?> |
Ну вот, соответственно, в переменной $mess будет последнее сообщение.
#11.
Nbbt
Off
(3)
Участник
2009.04.26 13:01
В $mess? Почему?
выполни скрипт и посмотри
#13.
Nbbt
Off
(3)
Участник
2009.04.26 13:01
Уже разобрался, спасибо огромное)))
#14.
Nbbt
Off
(3)
Участник
2009.04.26 14:02
Но теперь возникла проблемка: при добавлении сообщения, если messages.dat пустой появляются ошибки... Они конечно не мешают, но смотрится это не прилично
Отредактировано Nbbt (2009.04.26 14:02)
#15.
JInn
Off
(2)
Участник
2009.04.26 16:04
Можно проще. Проверяешь субмит, если есть записываешь, если нет то нет. Как записал - субмит убил и все.
Извиняюсь, это не прокатит ) Вот как можно: после того как сообщение записал, в суперглобальную переменную (я в сессию) заносишь сообщение, а перед записью сверяешь с тем, что по посту пришло, если одинаковое, то не записываем. Это точно работает. Я думаю так быстрее будет, чем доставать из базы или файла. Выглядеть это будет так
Код:
if (isset($_SESSION['старое сообщение']) && $_SESSION['старое сообщение'] != $_POST['новое сообщение']) |
{тут пошла запись в базу или файл} а после записи $_SESSION['старое сообщение'] = $_POST['новое сообщение']; |
Если есть тема сообщения то можно тему кидать в сессию, оно меньше по размеру
Отредактировано JInn (2009.04.27 01:01)
Как все таки сложно быть ботом...
#16.
Nbbt
Off
(3)
Участник
2009.04.27 14:02
Пока тот вариан меня устраивает, но всё равно спасибо.
Появился новый вопрос. У меня сообщения при таком цикле
Код:
$file = file('messages.dat'); |
$count = count($file); |
for ($i = 0; $i < $count; $i++) { |
$text = explode("|",$file[$i]); |
Выводятся с первого по последний, а как сделать чтоб с последнего по первый?
#17.
Nbbt
Off
(3)
Участник
2009.04.27 19:07
ПыХаПэ сЪеЛЪ мОй мОзгГ *CRAZY*
Ждал, ждал, пока кто ответит... Перелапатил несколько скриптов, обсосал все ф-ции на php.su... Ниче не нашел... И Вот оно -- нечайно увыдел спасительное
array_reverseРадости небыло предела)))
Вобсщем всё оказалось просто, правда мозг сгорел

Итог:
Код:
$file = file('messages.dat'); |
$file = array_reverse($file); |
$count = count($file); |
for ($i = 0; $i < $count; $i++) { |
$text = explode("|",$file[$i]); |
Теперь всё вроде норм пока выводится
Гемор, похвалишь?)))
Добавлено спустя 1 минуту 59 секунд: Блин, столько долгов в универе, а этот несчасный мой первый кривой скрипт не дает покоя, блин

))
ну можно было сделать и без array_reverse

Код:
for ($i = $count; $i >= 0; $i--) { |
#19.
Nbbt
Off
(3)
Участник
2009.04.28 09:09
Помогите с регуляркой...
Что не правильно? Почему не работает?
preg_match("/^[-a-zA-Z0-9_]+[\@][-a-zA-Z0-9_\.]+$/"
собаку слешировать и в скобки брать не надо.
preg_match('/^[a-z][a-z0-9_\.\-]{1,23}@([a-z][a-z0-9\-]{1,24}\.){1,3}[a-z]{2,6}$/i', $email)
пользуйся такой)
#21.
JInn
Off
(2)
Участник
2009.04.28 10:10
Вот бы если бы еще объяснил кто нить че это такое - регулярка... Я понимаю что это проверка мыла, пользуюсь, но как работает не догоняю...
Как все таки сложно быть ботом...
#22.
Nbbt
Off
(3)
Участник
2009.04.28 11:11
Я тут читал
http://www.php.su/articles/?cat=regexp&page=001
http://pyha.ru/forum/topic/19.0
еше тут о символах
http://ru.wikipedia.org/wiki/Представление_символов_в_регулярных_выражениях
Отредактировано Nbbt (2009.04.28 13:01)
#23.
Nbbt
Off
(3)
Участник
2009.04.28 13:01
Gemorroj, чтот твоя регулярка не зафурыкала

Я такую использовал:
Код:
if (preg_match("/[^(\w)|(\@)|(\.)|(\-)]/",$mail)) |
Норм пашет
Отредактировано Nbbt (2009.04.28 13:01)
эта регулярка используется почти во всех местах на этом сайте, где требуется проверка емыла)
#25.
Nbbt
Off
(3)
Участник
2009.04.28 18:06
Забил я на проверку регулярками... думаю
Код:
htmlspecialchars(stripslashes(trim( |
и |
substr( |
хватит...
#27.
Nbbt
Off
(3)
Участник
2009.04.29 05:05
Gemorroj написал:
stripslashes не нужно.
Ok
#28.
Nbbt
Off
(3)
Участник
2009.04.29 06:06
Gemorroj написал:ну можно было сделать и без array_reverse

Код:
for ($i = $count; $i >= 0; $i--) { |
Проверил этот вариант, работает, сообщения "переворачиваются", НО вылезает ошибка

аррай_реверс рулит в этом случае
блин. ошибка вылезает из-за того, что ты что-то не так сделал. и потом без array_reverse быстрее.
Все ошибки из-за кривых рук, тупых хостингов и глупой головы)Гг
#31.
Nbbt
Off
(3)
Участник
2009.04.29 18:06
Я понимаю, что всё норм сделал, работало же с твоим примером, просто + к работе ошибка вылезала. Насчет глупой головы и кривых рук не надо.... Норм у меня всё, все когда-то начинающими были, да, я могу сделать ошибку, но всегда стараюсь исправлять, и больше не допускать. Гемор, помоги с постраничной навигацией пожалуйста... Исходя из этого както ведь можно?:
Код:
$file = file('messages.dat'); |
$file = array_reverse($file); |
$count = count($file); |
for ($i = 0; $i < $count; $i++) { |
$text = explode("|",$file[$i]); |
echo '<div class="nick">'; |
if($text[3] == '') { echo '<b>'.$text[0].'</b>'; } else { echo '<b>'.$text[0].'</b> ('.$text[3].')'; } |
echo '</div>'; |
echo '<div class="info">'; |
if($text[1] != '') { echo 'Маил: '.$text[1].'<br/>'; } else { echo 'Маил: Не указан<br/>'; } |
if($text[2] != '') { echo 'Сайт: <a href="http://'.$text[2].'/">'.$text[2].'</a><br/>'; } else { echo 'Сайт: Не указан<br/>'; } |
echo '</div>'; |
echo '<div class="mess">'; |
echo ''.$text[4].''; |
echo '</div>'; |
зачем ты вот так написал?
echo ''.$text[4].'';
#33.
Nbbt
Off
(3)
Участник
2009.04.29 18:06
Это само сообщение, а как надо?
Добавлено спустя 1 минуту 47 секунд: Оно как и имя обязательное поле, условие для вывода не нужно
кавычки там не нужны.
и множественные echo тоже.
получаешь номер страницы, умножаешь его на количество выводимых сообщений (10 например). - это будет начальная цифра в цикле. затем к этой цифре прибавляешь количество выводимых сообщений (все та же 10) - это будет цифра, при которой скрипт выйдет из цикла.
#35.
Nbbt
Off
(3)
Участник
2009.04.29 19:07
Ничего не понял
#36.
Nbbt
Off
(3)
Участник
2009.05.01 16:04
Сделал....