Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с unshift(), функция оставляет лишние пустые строки 
V
    Опции темы
Shur
Дата 31.3.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 5.3.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



Доброе всем время суток!

1. Я смастерил себе простенький движок для комментариев. Добавление комментов происходит вот так:

Сначала из нескольких переменных формируется сообщение. Потом файл с предыдущими комментами считывается в массив, и наконец сообщение добавляется с помощью array_unshift() в массив, ну и запись в файл.

Код

    $comment = "<a href=mailto:".$email.">".$name."</a>|".$topic."|".$date."|".$message;
    $commfile = @file($sourcefile);
    array_unshift($commfile, $comment);

    $fp_comm = @fopen($sourcefile, "w");
    fclose($fp_comm);
    for ($i=0; $i<=count($commfile); $i++) {
        $fp_comm = @fopen($sourcefile, "a");
        fputs($fp_comm, $commfile[$i]."\r\n");
        fclose($fp_comm);
    }


В общем, в итоге в файле с комментариями образуются пустые строки, которые плодятся в геометрической прогрессии, если добавлять ещё комменты.

Как ещё можно _вставить_ стринг в первую ячейку массива?

зы. Как, кстати, хорошо почистить формы, чтобы при двух нажатиях "отправить" или Ф5 не происходило повторений?

Заранее спасибо smile 
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 31.3.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Shur @  31.3.2007,  18:38 Найти цитируемый пост)
в итоге в файле с комментариями образуются пустые строки, которые плодятся в геометрической прогрессии

Это потому, что в результате file() в элементах массива остаются концевые "\r\n". А Вы их еще раз добавляете при записи. Добавляйте только к новому элементу. Кстати, можно записывать не циклом построчно, а все сразу - fwrite($fp_comm, implode('', $commfile)).


Цитата(Shur @  31.3.2007,  18:38 Найти цитируемый пост)
Как, кстати, хорошо почистить формы, чтобы при двух нажатиях "отправить" или Ф5 не происходило повторений?

Чтобы исключить повторное нажатие, можно задизейблить кнопку javascript-ом: <input type="submit" onclick="this.disabled=true">. А чтобы гарантированно не пересылать форму по F5, принято после отправки POST-данных не сразу выдавать контент, а делать редирект GET-ом, например, с помощью 
Код

header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();


Это сообщение отредактировал(а) SelenIT - 31.3.2007, 18:57


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Shur
Дата 31.3.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 5.3.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



Цитата(SelenIT @  31.3.2007,  16:56 Найти цитируемый пост)
Это потому, что в результате file() в элементах массива остаются концевые "\r\n". А Вы их еще раз добавляете при записи. Добавляйте только к новому элементу. Кстати, можно записывать не циклом построчно, а все сразу - fwrite($fp_comm, implode('', $commfile)).


Ого! Спасибо, работает!))


Цитата(SelenIT @  31.3.2007,  16:56 Найти цитируемый пост)
Чтобы исключить повторное нажатие, можно задизейблить кнопку javascript-ом: <input type="submit" onclick="this.disabled=true">. А чтобы гарантированно не пересылать форму по F5, принято после отправки POST-данных не сразу выдавать контент, а делать редирект GET-ом, например, с помощью 
    
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();


гхм... не совсем понял, куда вставлять приведённый код и как он работает 
??

А вообще спасибо большое!

PM MAIL WWW ICQ   Вверх
SelenIT
Дата 31.3.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Shur @  31.3.2007,  20:44 Найти цитируемый пост)
куда вставлять приведённый код

В обработчик формы, после анализа POST-данных и занесения их в базу. Этот код для случая, когда вывод формы и обработка - в одном файле. Но общий принцип от этого не зависит.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Shur
Дата 31.3.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 5.3.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



Цитата

В обработчик формы, после анализа POST-данных и занесения их в базу. Этот код для случая, когда вывод формы и обработка - в одном файле. Но общий принцип от этого не зависит.

у меня обработка в одном файле, но зависит от _ГЕТ параметра. 
Есть функция для вывода форм и функция обработчик, они контролируются ИФом.
типо 
$do = $_GET['do'];
do=add u do=proc

зы. А как работает и спасает ли от чего-то ансет()? 

Это сообщение отредактировал(а) Shur - 31.3.2007, 21:00
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 31.3.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Вот в конец функции-обработчика нужно вставить, в данном случае, такое:
Код

header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?do=add');
exit();

И ничего в той функции не выводить, ни до, ни после.

unset просто уничтожает существующую переменную или элемент массива. От чего оно должно кого-либо "спасать"?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.