Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как уничтожить переменную чтоб не было повторного добавления сообщения?
 
 автор: LVP   (09.02.2008 в 08:39)   письмо автору
 
 

помогите пожалуйста чайнику....пишу галерею..возникла проблема с переменными..
вобщем на страницу выводится картинка, ниже нее выводятся комментарии, еще ниже форма для добавления комментария...так вот когда заполняю поля формы и нажимаю *комментировать* то к комментариям добавляется только что созданный коментарий, но если нажать ф5 то этот комментарий добавляется снова!!
принцип таков: если значение у переменной $comment установленно то идет добавление комментария. как уничтожить переменную чтоб не было повторного добавления комента?

   
 
 автор: AVS   (09.02.2008 в 09:36)   письмо автору
 
   для: LVP   (09.02.2008 в 08:39)
 

Ничего уничтожать не надо. Дело в том, что при обновлении страницы данные из форм передаются снова скрипту. Просто надо Вам добавить проверку на то, что этот комментарий уже добавлен.

   
 
 автор: LVP   (09.02.2008 в 09:54)   письмо автору
 
   для: AVS   (09.02.2008 в 09:36)
 

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

   
 
 автор: Freddie_X   (09.02.2008 в 11:23)   письмо автору
 
   для: LVP   (09.02.2008 в 09:54)
 

Можно на странице добавления сделать метку с помощью сессии, а затем, при добавлении коментария, удалить эту метку. + при довавлении комментария проверять на наличие метки: если метки нет, отправить на страницу с картинкой. Еесли есть, то добавить комментарий.
Только надо это дело продумать...

   
 
 автор: parti   (09.02.2008 в 14:14)   письмо автору
 
   для: Freddie_X   (09.02.2008 в 11:23)
 

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

$query =  "SELECT COUNT(*) FROM comm WHERE (mes = '$comment') AND (name='$name')";
$usr = mysql_query($query);
if(!$usr) echo "Ошибка - ";
$total1 = @mysql_result($usr, 0);
if  (!$total1 > 0 AND !$name=='' AND !$comment=='')
   {   
$query="INSERT INTO `comment` ( `name_user`,`mes`,`data_mes`)
VALUES( '$name','$comment','$date $time')";
mysql_query($query);

заодно и защита от спама, и от пустых сообщений!;)

   
 
 автор: Trianon   (09.02.2008 в 14:47)   письмо автору
 
   для: LVP   (09.02.2008 в 08:39)
 

Чтобы избежать повторной отправки данных по F5, следует переходить от запроса добавления данных (обычно это POST-запрос) к запросу отображения данных (к GET-запросу) с помощью инструкции header("Location: адрес-Get-запроса");

   
 
 автор: LVP   (09.02.2008 в 15:36)   письмо автору
 
   для: Trianon   (09.02.2008 в 14:47)
 

вот кусок кода...
тут если $usercomment определена, тоесть если юзер написал комментарий то выполняется функция save_comments()....
<?
function save_comments()
{
global $picture, $username, $usermail, $usercomment;
$date = date("d.m.y - H:i:s");
$usercomment = str_replace(" ","probel",$usercomment);
$usercomment = str_replace("\n","probel",$usercomment);
$usercomment = str_replace("\r","probel",$usercomment);
$usercomment = str_replace("\t","probel",$usercomment);
$usercomment = str_replace("\v","probel",$usercomment);
$usercomment = str_replace("\0","probel",$usercomment);
$username = htmlspecialchars($username);
$usermail = htmlspecialchars($usermail);
$usercomment = htmlspecialchars($usercomment);
if($username<>"")
if($usercomment<>"")
{
$text = "\n".$username."^^".$usermail."^^".$date."^^".$usercomment;
$st=explode(".",$picture);
$fp = fopen("files/".$st[0].".txt","a");
fputs($fp, $text);
fclose($fp);
}
}
if($usercomment)
{
save_comments();
}
?>

пробывал в начало добавлять переменную $c=0 а потом в конце функции сохранения добавлять к значению переменной 1... потом проверял
if($с<>1)
{
save_comments();
}
но всеравно ничего не вышло...

Trianon, можно подробнее про ваш вариант??

галерею делаю без использования mysql, на файлах текстовых... вывод картинки, комментариев и формы для комментариев все это в одном файле делаю..

   
 
 автор: Trianon   (09.02.2008 в 16:38)   письмо автору
 
   для: LVP   (09.02.2008 в 15:36)
 

Я не вижу ни формы, ни места, где определяется переменная $usercomment

Возможно, сразу после вызова savecomments();
имеет смысл поставить header("Location: http://и_далее_адрес_этой_страницы "); exit();

   
 
 автор: Freddie_X   (09.02.2008 в 18:16)   письмо автору
 
   для: Trianon   (09.02.2008 в 16:38)
 

Можно сделать 2 скрипта: 1-ый это вывод комментов, 2-ой это добавление комментов.
В конце 2-ого скрипта ставить хеадер, который написал Трианон.
Тогда можно будет обновлять страницу после добавления коммента хоть миллион раз - коммент повторно не добавится... =)

   
 
 автор: Trianon   (09.02.2008 в 18:29)   письмо автору
 
   для: Freddie_X   (09.02.2008 в 18:16)
 

второй скрипт здесь не нужен.

   
 
 автор: Eugene77   (09.02.2008 в 19:49)   письмо автору
 
   для: Trianon   (09.02.2008 в 16:38)
 

>имеет смысл поставить header("Location: http://и_далее_адрес_этой_страницы "); exit();

Пока этот header дойдёт адресату, возможно повторное нажатие на кнопку.

   
 
 автор: Trianon   (09.02.2008 в 20:21)   письмо автору
 
   для: Eugene77   (09.02.2008 в 19:49)
 

Не мешайте мух с котлетами. Речь шла о повторных отправках по F5, а не по явным запросам.

   
 
 автор: LVP   (09.02.2008 в 22:34)   письмо автору
 
   для: Trianon   (09.02.2008 в 20:21)
 

Через header все получилось! Trianon, спасибо большое! Всем спасибо!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования