Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] PHP | Обнуление массива $_POST при обновлении

Ответить
Настройки темы
[решено] PHP | Обнуление массива $_POST при обновлении

Пользователь


Сообщения: 121
Благодарности: 14


Конфигурация

Профиль | Отправить PM | Цитировать


Текстовое поле + кнопка "отправить". После отправления сообщение записывается в файл. Если нажать кнопку "обновить" в браузере, то сообщение записывается опять! Как сделать, чтобы оно записывалось только при нажатии на кнопку "отправить"? Вот пример, на всякий случай:
PHP код: Выделить весь код

<?php

  
if(!empty($_POST['comment'])){
    
$fhfopen("guestbook.txt","a");
    
fputs($fh,$_POST['comment']."\n");
    
fclose($fh);
  }
  
$fh= @fopen("guestbook.txt","r");
  if(
$fh){
    while(!
feof($fh)){
      
$linefgets($fh);
      echo 
$line."<hr/>\n";
    }
    
fclose($fh);
  }
?>

-------
MeGUI для чайников.


Отправлено: 20:29, 22-03-2009

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Перед добавлением коммента в файл выполняйте поиск. Если есть совпадение - значит игнорировать.

Отправлено: 20:37, 22-03-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 121
Благодарности: 14

Профиль | Отправить PM | Цитировать


Это общепринятое решение? Похоже на костыль... А если я два раза нажму на кнопку "отправить", то, по идее, должно добавиться два коммента, но добавится только один. Ну может с комментариями этот подход и оправдан, а если я таким образом добавляю какие-нибудь очки(карму)? Как сделать, чтобы очки добавлялись только при нажатии на кнопку, но не при обновлении страницы?

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

-------
MeGUI для чайников.


Отправлено: 22:28, 22-03-2009 | #3


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Ну если хотите "правильный подход", то начните с того, что гостевая книга использует базу данных с сохранением IP отправителя и времени отправки сообщения (прошло меньше 30 секунд от предыдущего сообщения - с добавлением нового отказать. Антифлуд-система). Также можно добавить скрытое поле с каким-нибудь md5-хэшем от системного времени, которое включается в БД в качестве ключа: ключ найден - добавлять не будем. С "кармой" аналогично. Вам в любом случае придётся записывать "кто, кому, за что" во избежание накрутки счётчика. Кроме того, подобные рейтинговые системы реализуются на AJAX для удобства пользователей, а значит никакие обновления страниц не помогут (но могут помочь повторные клики, поэтому в БД и записываем кучу информации).

А вот чтобы $_POST при обновлении обнулять - это вам, видимо, браузеры переписывать надо.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:03, 23-03-2009 | #4


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Coutty, +1, видать задело : ))
delog, в вашем примере первое сообщение можно считать общепринятым. Ведь иногда куда сложнее в программе составить условие и разные "защиты от дурка", чем сам алгоритм выполняемой части программы.

Предложу еще свой метод

Предположим, у нас есть форма в файле 1.html

PHP код: Выделить весь код

<form action="2.php" method="post" name="delog">
<
input name="comment" type="text" />
<
input name="button" type="submit" />
</
form

В файле 2.php выполняется скрипт:

PHP код: Выделить весь код

<?php
  
if(!empty($_POST['comment'])){
    
$fhfopen("guestbook.txt","a");
    
fputs($fh,$_POST['comment']."\n");
    
fclose($fh);
  }
  
$fh= @fopen("guestbook.txt","r");
  if(
$fh){
    while(!
feof($fh)){
      
$linefgets($fh);
      echo 
$line."<hr/>\n";
    }
    
fclose($fh);
  }
?>

В этом же файле со скриптом вставляем ява скрипт автоматической переадресовки.

Код: Выделить весь код
<script language="JavaScript"> 
  window.location.href = "1.html"
</script>
И вот вы опять почти незаметно в первой форме и обновляйте сколько желаете.

В этом весь фокус. Этот метод используется на многих форумах, при отправлении сообщения.

Coutty, правильный ход мысли?

-------
Мой блог Web Development

Это сообщение посчитали полезным следующие участники:

Отправлено: 04:38, 23-03-2009 | #5


Пользователь


Сообщения: 121
Благодарности: 14

Профиль | Отправить PM | Цитировать


Спасибо, пример с ява-скриптом - то, что надо. Только вывод на экран надо затолкать в 1.html(php), а в 2.php оставить запись в файл.

Цитата:
А вот чтобы $_POST при обновлении обнулять - это вам, видимо, браузеры переписывать надо.
Да, на счет обнуления POST'a я сглупил. Сейчас подумал, а ведь GET в адресной строке мне никто не даст изменить, можно было догадаться, что и POST тоже.

-------
MeGUI для чайников.


Отправлено: 10:58, 23-03-2009 | #6



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] PHP | Обнуление массива $_POST при обновлении

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - [решено] Завис при обновлении Vista okshef Microsoft Windows Vista 151 14-01-2012 00:15
Службы - [решено] Ошибка при обновлении 80070490 emilj Microsoft Windows Vista 5 31-08-2009 20:54
Как передать в javascript данные массива, полученного из кода на php vagner_HATE Вебмастеру 1 18-06-2009 13:51
[решено] PHP | Вывод массива в файл Coutty Вебмастеру 2 29-10-2008 08:48
PHP. Запись массива в файл. Hemp Вебмастеру 3 08-10-2004 20:50




 
Переход