#1 2009.04.26 16:36

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Первый скрипт...)

Иии нужна помощь. Пишу (точнее пытаюсь) написать гостевую. Вопрос: как сделать чтоб одинаковые сообщения не добавлялись, и при "обновлении" страницы со скриптом тоже не добавлялись сообщения? Гостевую делаю на файле, форма>скрипт обрабатывает и записывает в файл в виде

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

Gemorroj, need help!)

Неактивен

#2 2009.04.26 16:50

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

доставай последнее сообщение из бд и сравнивай с тем, что постится. если совпадают, то шли нахуй.

Неактивен

#3 2009.04.26 16:51

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

У меня на файле... И я х3 как доставать и сравнивать, мож намекнешь?

Неактивен

#4 2009.04.26 16:56

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

смотря каким образом ты хранишь данные в файле.

Неактивен

#5 2009.04.26 16:56

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");

Неактивен

#6 2009.04.26 17:01

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

ты учел, что в любой из переменных может встречаться символ | и структура может нарушиться?

Неактивен

#7 2009.04.26 17:03

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Потом буду заменять на L (l)
Добавлено спустя   1 минуту  10 секунд:
Или предложишь лучший вариант? )

Неактивен

#8 2009.04.26 17:04

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

дай полный код записи данных, начиная с fopen

Неактивен

#9 2009.04.26 17:06

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

$fp = fopen ("messages.dat","a");
fputs ($fp,"$nick|$mail|$site|$town|$mess\r\n");
fclose ($fp);

Неактивен

#10 2009.04.26 17:15

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

Код:

1
span style="color: #0000BB"><?php// считываем файл в массив$data = file('messages.dat');// берем последий элемент$end = end($data);// разбиваем строку по символу | и присваиваем элементам именаlist($nick, $mail, $site, $town, $mess) = explode('|', $end);?>

Ну вот, соответственно, в переменной $mess будет последнее сообщение.

Неактивен

#11 2009.04.26 17:19

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

В $mess? Почему?

Неактивен

#12 2009.04.26 17:34

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

выполни скрипт и посмотри

Неактивен

#13 2009.04.26 17:54

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Уже разобрался, спасибо огромное)))

Неактивен

#14 2009.04.26 18:43

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Но теперь возникла проблемка: при добавлении сообщения, если messages.dat пустой появляются ошибки... Они конечно не мешают, но смотрится это не прилично smile

Отредактировано Nbbt (2009.04.26 18:44)

Неактивен

#15 2009.04.26 20:00

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Первый скрипт...)

Можно проще. Проверяешь субмит, если есть записываешь, если нет то нет. Как записал - субмит убил и все.
Извиняюсь, это не прокатит ) Вот как можно: после того как сообщение записал, в суперглобальную переменную (я в сессию) заносишь сообщение, а перед записью сверяешь с тем, что по посту пришло, если одинаковое, то не записываем. Это точно работает. Я думаю так быстрее будет, чем доставать из базы или файла. Выглядеть это будет так

Код:

1
2
if (isset($_SESSION['старое сообщение']) && $_SESSION['старое сообщение'] != $_POST['новое сообщение'])
{тут пошла запись в базу или файл} а после записи $_SESSION['старое сообщение'] = $_POST['новое сообщение'];

Если есть тема сообщения то можно тему кидать в сессию, оно меньше по размеру

Отредактировано JInn (2009.04.27 05:04)


Как все таки сложно быть ботом...

Неактивен

#16 2009.04.27 18:55

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Пока тот вариан меня устраивает, но всё равно спасибо.
Появился новый вопрос. У меня сообщения при таком цикле

Код:

1
2
3
4
$file = file('messages.dat');
$count = count($file);
for ($i = 0; $i < $count; $i++) {
$text = explode("|",$file[$i]);

Выводятся с первого по последний, а как сделать чтоб с последнего по первый?

Неактивен

#17 2009.04.27 23:18

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

ПыХаПэ сЪеЛЪ мОй мОзгГ *CRAZY*
Ждал, ждал, пока кто ответит... Перелапатил несколько скриптов, обсосал все ф-ции на php.su... Ниче не нашел... И Вот оно -- нечайно увыдел спасительное array_reverse
Радости небыло предела)))
Вобсщем всё оказалось просто, правда мозг сгорел sad
Итог:

Код:

1
2
3
4
5
$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 2009.04.28 09:14

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

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

Код:

1
for ($i = $count; $i >= 0; $i--) {

Неактивен

#19 2009.04.28 13:08

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Помогите с регуляркой...
Что не правильно? Почему не работает?

preg_match("/^[-a-zA-Z0-9_]+[\@][-a-zA-Z0-9_\.]+$/"

Неактивен

#20 2009.04.28 13:37

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

собаку слешировать и в скобки брать не надо.
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 2009.04.28 14:00

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Первый скрипт...)

Вот бы если бы еще объяснил кто нить че это такое - регулярка... Я понимаю что это проверка мыла, пользуюсь, но как работает не догоняю...


Как все таки сложно быть ботом...

Неактивен

#22 2009.04.28 15:59

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Я тут читал
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:30)

Неактивен

#23 2009.04.28 17:22

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Gemorroj, чтот твоя регулярка не зафурыкала  sad
Я такую использовал:

Код:

1
if (preg_match("/[^(\w)|(\@)|(\.)|(\-)]/",$mail))

Норм пашет

Отредактировано Nbbt (2009.04.28 17:29)

Неактивен

#24 2009.04.28 18:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

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

Неактивен

#25 2009.04.28 22:27

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Забил я на проверку регулярками... думаю

Код:

1
2
3
htmlspecialchars(stripslashes(trim(
и
substr(

хватит...

Неактивен

#26 2009.04.28 22:49

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

stripslashes не нужно.

Неактивен

#27 2009.04.29 09:25

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Gemorroj написал:

stripslashes не нужно.

Ok smile

Неактивен

#28 2009.04.29 10:07

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Gemorroj написал:

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

Код:

1
for ($i = $count; $i >= 0; $i--) {

Проверил этот вариант, работает, сообщения "переворачиваются", НО вылезает ошибка smile аррай_реверс рулит в этом случае

Неактивен

#29 2009.04.29 11:19

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

блин. ошибка вылезает из-за того, что ты что-то не так сделал. и потом без array_reverse быстрее.

Неактивен

#30 2009.04.29 14:49

DarkDaNTe
Участник
Откуда: Украина
Зарегистрирован: 2009.01.08
Сообщений: 574
Карма: 11
Профиль

Re: Первый скрипт...)

Все ошибки из-за кривых рук, тупых хостингов и глупой головы)Гг

Неактивен

#31 2009.04.29 22:36

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Я понимаю, что всё норм сделал, работало же с твоим примером, просто + к работе ошибка  вылезала. Насчет глупой головы и кривых рук не надо.... Норм у меня всё, все когда-то начинающими были, да, я могу сделать ошибку, но всегда стараюсь исправлять, и больше не допускать. Гемор, помоги с постраничной навигацией пожалуйста... Исходя из этого както ведь можно?:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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 2009.04.29 22:47

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

зачем ты вот так написал?

echo ''.$text[4].'';

Неактивен

#33 2009.04.29 22:48

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Это само сообщение, а как надо?
Добавлено спустя   1 минуту  47 секунд:
Оно как и имя обязательное поле, условие для вывода не нужно

Неактивен

#34 2009.04.29 23:05

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Первый скрипт...)

кавычки там не нужны.
и множественные echo тоже.
получаешь номер страницы, умножаешь его на количество выводимых сообщений (10 например). - это будет начальная цифра в цикле. затем к этой цифре прибавляешь количество выводимых сообщений (все та же 10) - это будет цифра, при которой скрипт выйдет из цикла.

Неактивен

#35 2009.04.29 23:29

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Ничего не понял sad

Неактивен

#36 2009.05.01 20:17

Nbbt
Участник
Зарегистрирован: 2009.02.11
Сообщений: 44
Карма: 3
Профиль

Re: Первый скрипт...)

Сделал....

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.021 s