Вы не зашли.
Главная » PHP » Первый скрипт...)
#1. Nbbt Off (3)
Участник
2009.04.26 16:04
Иии нужна помощь. Пишу (точнее пытаюсь) написать гостевую. Вопрос: как сделать чтоб одинаковые сообщения не добавлялись, и при "обновлении" страницы со скриптом тоже не добавлялись сообщения? Гостевую делаю на файле, форма>скрипт обрабатывает и записывает в файл в виде

ник|мыло|сайт|город|сообщение
следующая строка в таком же виде и т.д

Gemorroj, need help!)
#2. Gemorroj Off (107)
Administrator
2009.04.26 16:04
доставай последнее сообщение из бд и сравнивай с тем, что постится. если совпадают, то шли нахуй.
#3. Nbbt Off (3)
Участник
2009.04.26 16:04
У меня на файле... И я х3 как доставать и сравнивать, мож намекнешь?
#4. Gemorroj Off (107)
Administrator
2009.04.26 16:04
смотря каким образом ты хранишь данные в файле.
#5. Nbbt Off (3)
Участник
2009.04.26 16:04
fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");
#6. Gemorroj Off (107)
Administrator
2009.04.26 17:05
ты учел, что в любой из переменных может встречаться символ | и структура может нарушиться?
#7. Nbbt Off (3)
Участник
2009.04.26 17:05
Потом буду заменять на L (l)
Добавлено спустя   1 минуту  10 секунд:
Или предложишь лучший вариант? )
#8. Gemorroj Off (107)
Administrator
2009.04.26 17:05
дай полный код записи данных, начиная с fopen
#9. Nbbt Off (3)
Участник
2009.04.26 17:05
$fp = fopen ("messages.dat","a");
fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");
fclose ($fp);
#10. Gemorroj Off (107)
Administrator
2009.04.26 17:05
Код:
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 17:05
В $mess? Почему?
#12. Gemorroj Off (107)
Administrator
2009.04.26 17:05
выполни скрипт и посмотри
#13. Nbbt Off (3)
Участник
2009.04.26 17:05
Уже разобрался, спасибо огромное)))
#14. Nbbt Off (3)
Участник
2009.04.26 18:06
Но теперь возникла проблемка: при добавлении сообщения, если messages.dat пустой появляются ошибки... Они конечно не мешают, но смотрится это не прилично smile
Отредактировано Nbbt (2009.04.26 18:06)
#15. JInn Off (2)
Участник
2009.04.26 20:08
Можно проще. Проверяешь субмит, если есть записываешь, если нет то нет. Как записал - субмит убил и все.
Извиняюсь, это не прокатит ) Вот как можно: после того как сообщение записал, в суперглобальную переменную (я в сессию) заносишь сообщение, а перед записью сверяешь с тем, что по посту пришло, если одинаковое, то не записываем. Это точно работает. Я думаю так быстрее будет, чем доставать из базы или файла. Выглядеть это будет так
Код:
if (isset($_SESSION['старое сообщение']) && $_SESSION['старое сообщение'] != $_POST['новое сообщение'])
{тут пошла запись в базу или файл} а после записи $_SESSION['старое сообщение'] = $_POST['новое сообщение'];
Если есть тема сообщения то можно тему кидать в сессию, оно меньше по размеру
Отредактировано JInn (2009.04.27 05:05)
Как все таки сложно быть ботом...
#16. Nbbt Off (3)
Участник
2009.04.27 18:06
Пока тот вариан меня устраивает, но всё равно спасибо.
Появился новый вопрос. У меня сообщения при таком цикле
Код:
$file = file('messages.dat');
$count = count($file);
for ($i = 0; $i < $count; $i++) {
$text = explode("|",$file[$i]);
Выводятся с первого по последний, а как сделать чтоб с последнего по первый?
#17. Nbbt Off (3)
Участник
2009.04.27 23:11
ПыХаПэ сЪеЛЪ мОй мОзгГ *CRAZY*
Ждал, ждал, пока кто ответит... Перелапатил несколько скриптов, обсосал все ф-ции на php.su... Ниче не нашел... И Вот оно -- нечайно увыдел спасительное array_reverse
Радости небыло предела)))
Вобсщем всё оказалось просто, правда мозг сгорел sad
Итог:
Код:
$file = file('messages.dat');
$file = array_reverse($file);
$count = count($file);
for ($i = 0; $i < $count; $i++) {
$text = explode("|",$file[$i]);
Теперь всё вроде норм пока выводится
Гемор, похвалишь?)))
Добавлено спустя   1 минуту  59 секунд:
Блин, столько долгов в универе, а этот несчасный мой первый кривой скрипт не дает покоя, блин smile))
#18. Gemorroj Off (107)
Administrator
2009.04.28 09:09
ну можно было сделать и без array_reverse smile
Код:
for ($i = $count; $i >= 0; $i--) {
#19. Nbbt Off (3)
Участник
2009.04.28 13:01
Помогите с регуляркой...
Что не правильно? Почему не работает?

preg_match("/^[-a-zA-Z0-9_]+[\@][-a-zA-Z0-9_\.]+$/"
#20. Gemorroj Off (107)
Administrator
2009.04.28 13:01
собаку слешировать и в скобки брать не надо.
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 14:02
Вот бы если бы еще объяснил кто нить че это такое - регулярка... Я понимаю что это проверка мыла, пользуюсь, но как работает не догоняю...
Как все таки сложно быть ботом...
#22. Nbbt Off (3)
Участник
2009.04.28 15:03
Я тут читал
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 17:05)
#23. Nbbt Off (3)
Участник
2009.04.28 17:05
Gemorroj, чтот твоя регулярка не зафурыкала  sad
Я такую использовал:
Код:
if (preg_match("/[^(\w)|(\@)|(\.)|(\-)]/",$mail))
Норм пашет
Отредактировано Nbbt (2009.04.28 17:05)
#24. Gemorroj Off (107)
Administrator
2009.04.28 18:06
эта регулярка используется почти во всех местах на этом сайте, где требуется проверка емыла)
#25. Nbbt Off (3)
Участник
2009.04.28 22:10
Забил я на проверку регулярками... думаю
Код:
htmlspecialchars(stripslashes(trim(
и
substr(
хватит...
#26. Gemorroj Off (107)
Administrator
2009.04.28 22:10
stripslashes не нужно.
#27. Nbbt Off (3)
Участник
2009.04.29 09:09
Gemorroj написал:
stripslashes не нужно.
Ok smile
#28. Nbbt Off (3)
Участник
2009.04.29 10:10
Gemorroj написал:
ну можно было сделать и без array_reverse smile
Код:
for ($i = $count; $i >= 0; $i--) {
Проверил этот вариант, работает, сообщения "переворачиваются", НО вылезает ошибка smile аррай_реверс рулит в этом случае
#29. Gemorroj Off (107)
Administrator
2009.04.29 11:11
блин. ошибка вылезает из-за того, что ты что-то не так сделал. и потом без array_reverse быстрее.
#30. DarkDaNTe Off (11)
Участник
2009.04.29 14:02
Все ошибки из-за кривых рук, тупых хостингов и глупой головы)Гг
#31. Nbbt Off (3)
Участник
2009.04.29 22:10
Я понимаю, что всё норм сделал, работало же с твоим примером, просто + к работе ошибка  вылезала. Насчет глупой головы и кривых рук не надо.... Норм у меня всё, все когда-то начинающими были, да, я могу сделать ошибку, но всегда стараюсь исправлять, и больше не допускать. Гемор, помоги с постраничной навигацией пожалуйста... Исходя из этого както ведь можно?:
Код:
$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>';
#32. Gemorroj Off (107)
Administrator
2009.04.29 22:10
зачем ты вот так написал?
echo ''.$text[4].'';
#33. Nbbt Off (3)
Участник
2009.04.29 22:10
Это само сообщение, а как надо?
Добавлено спустя   1 минуту  47 секунд:
Оно как и имя обязательное поле, условие для вывода не нужно
#34. Gemorroj Off (107)
Administrator
2009.04.29 23:11
кавычки там не нужны.
и множественные echo тоже.
получаешь номер страницы, умножаешь его на количество выводимых сообщений (10 например). - это будет начальная цифра в цикле. затем к этой цифре прибавляешь количество выводимых сообщений (все та же 10) - это будет цифра, при которой скрипт выйдет из цикла.
#35. Nbbt Off (3)
Участник
2009.04.29 23:11
Ничего не понял sad
#36. Nbbt Off (3)
Участник
2009.05.01 20:08
Сделал....
Страниц: 1 2 3 4 Все
Главная
WEB
PunBB Mod v0.6.2
0.025 s