Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Очистка $_POST

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Предотвращение повторной отправки данных на сервер
Dezmont
Отправлено: 14 Декабря, 2011 - 08:52:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




В общем у меня форма, которая работает через $_POST и пишет данные в БД.
PHP:
скопировать код в буфер обмена
  1. $sql = "INSERT INTO $table_name ($form_name) VALUES ($clear_data)";
  2. if(!mysql_query($sql)){
  3.    $a = mysql_error();
  4.    foreach($input_data as $input_k => $input_v){
  5.       $b = str_replace($input_k,'!!!WARNING!!!',$a);
  6.       if($b !== $a){ // ключ $input_k найден в строке $a, то выполняется if
  7.          $flow = "Повторяющаяся запись $_POST[$input_k] для $input_v";
  8.          header("Refresh:2;url={$_SERVER['REQUEST_URI']}");
  9.          echo $flow;
  10.       }
  11.    }
  12. }


Мне нужно как-то очистить $_POST, чтобы на странице сохранилась выведенная строка $flow... Как это можно реализовать? Передавать скрипту REQUEST_URI постом или гетом значение переменной $flow? Как лучше это реализовать?
 
 Top
Zuldek
Отправлено: 14 Декабря, 2011 - 09:01:59
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




POST "очищается" обновлением страницы. Нужные параметры сохраняйте хоть в GET, хоть дописывайте в сессию, — как удобнее.
 
 Top
Dezmont
Отправлено: 14 Декабря, 2011 - 09:04:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




А кроме обновления других вариантов "очистки" больше нет? Ну и редиректа на другую страницу.... Просто тупо удалить определённые ячейки массива?

(Отредактировано автором: 14 Декабря, 2011 - 09:06:42)

 
 Top
Pimpys
Отправлено: 14 Декабря, 2011 - 09:08:15
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2011  
Откуда: Украина, Киев


Помог: 0 раз(а)




Яб сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. if(!empty($_POST)){
  4.             $sql = "INSERT INTO $table_name ($form_name) VALUES ($clear_data)";
  5.    if(!mysql_query($sql)){
  6.       $a = mysql_error();
  7.       foreach($input_data as $input_k => $input_v){
  8.          $b = str_replace($input_k,'!!!WARNING!!!',$a);
  9.          if($b !== $a){ // ключ $input_k найден в строке $a, то выполняется if
  10.             $flow = "Повторяющаяся запись $_POST[$input_k] для $input_v";
  11.             header("Refresh:2;url={$_SERVER['REQUEST_URI']}");
  12.             echo $flow;
  13.          }
  14.       }
  15.    }
  16. //Сброс пост данных
  17.         header('Location: '.$_SERVER['PHP_SELF']); //Или там какой надо
  18.         die();
  19. }
  20. /*
  21. <form>
  22. <inpyt type = text value="$_REQUEST['text']">
  23. </form>
  24. */
  25.  

Цитата:
А кроме обновления других вариантов "очистки" больше нет? Ну и редиректа на другую страницу.... Просто тупо удалить определённые ячейки массива?

Обновлением стр, лутче.

(Отредактировано автором: 14 Декабря, 2011 - 09:10:14)



-----
Очисти свою карму — будь везучим!
 
 Top
Panoptik
Отправлено: 14 Декабря, 2011 - 09:12:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а ничего что при обновлении браузеры обычно повторно отправляют данные гет/пост?


-----
Just do it
 
 Top
Zuldek
Отправлено: 14 Декабря, 2011 - 09:12:57
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Dezmont пишет:
А кроме обновления других вариантов "очистки" больше нет?


Ключ в понимании работы POST.
Браузер по кнопке F5 начнет заново формировать последний запрос в истории, то есть снова отправлять вашему обработчику данные из POST. Потому "очистка" данных у себя ничего не даст.
Для этого применяется редирект с передачей браузеру пользователя нового заголовка (запроса).
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $url = 'http://www.some.ru/some.php';
  3. header("Location: $url");
  4. ?>

После этого браузер пользователя при обновлении страницы будет отправлять запрос http://www.some.ru/some.php.
 
 Top
Pimpys
Отправлено: 14 Декабря, 2011 - 09:13:09
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2011  
Откуда: Украина, Киев


Помог: 0 раз(а)




Panoptik пишет:
а ничего что при обновлении браузеры обычно повторно отправляют данные гет/пост?

Так как я написал, оно обновит и сбросит 100%
Не ну по $_SERVER['PHP_SELF'] может и нет я не проверял, и он был для примера Улыбка
Можно Урл какойто на туже стр например.

(Отредактировано автором: 14 Декабря, 2011 - 09:14:38)



-----
Очисти свою карму — будь везучим!
 
 Top
Panoptik
Отправлено: 14 Декабря, 2011 - 09:14:38
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




да, конечно. не заметил хедер


-----
Just do it
 
 Top
Данил_123
Отправлено: 14 Декабря, 2011 - 09:21:57
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




$_POST[var] = null;


-----
http://mysitecost.ru
 
 Top
Dezmont
Отправлено: 14 Декабря, 2011 - 09:25:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




Zuldek, а в чём суть принципа работы заголовка Location? PHP посылает только этот заголовок серверу, игнорируя всё остальное? Или есть приоритет заголовков?

З.Ы. И заодно не скажете, что при нажатии на кнопку "НАЗАД" в браузере происходит? Принцип её работы. )))
Или просто пошлите куда-нить читать, если есть какой-нибудь конкретный ресурс...
 
 Top
Panoptik
Отправлено: 14 Декабря, 2011 - 09:27:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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


-----
Just do it
 
 Top
Dezmont
Отправлено: 14 Декабря, 2011 - 09:27:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




Данил_123 пишет:
$_POST[var] = null;

var эт типа ключ массива? Просто если так, то ячейка то всё равно будет существовать, просто со значением NULL...
(Добавление)
Panoptik пишет:
при нажатии назад браузер будет посылать ту же информацию, которая отправлялась на той странице
по идее когда браузер видит заголовок локейшн, то ему уже всё равно на остальные данные, потому что у него прямое задание идти по указанному адресу


Т.е. он сохраняет предыдущий набор http заголовков и посылает их серверу? Что-то тут не то, потому что опять ведь должен ПОСТ отправляться...
 
 Top
Данил_123
Отправлено: 14 Декабря, 2011 - 09:33:42
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




Dezmont да, допишешь в конце кода.. Нул это не строка, а 0 байтовое значение.. Думаю ведь проверки будут проверки на еmpty.. Значит все будет работать


-----
http://mysitecost.ru
 
 Top
Panoptik
Отправлено: 14 Декабря, 2011 - 09:34:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




Dezmont пишет:
Т.е. он сохраняет предыдущий набор http заголовков и посылает их серверу? Что-то тут не то, потому что опять ведь должен ПОСТ отправляться...
в данном случае пост и отправиться. это аналогично с гетом, когда вы переходите по ссылке с параметрами у вас уже существует гет, почему тогда браузер не может хранить пост данные?

Цитата:
$_POST[var] = null;
тут должно больше помочь unset($_POST[var])


-----
Just do it
 
 Top
Dezmont
Отправлено: 14 Декабря, 2011 - 09:41:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




Panoptik пишет:
в данном случае пост и отправиться. это аналогично с гетом, когда вы переходите по ссылке с параметрами у вас уже существует гет, почему тогда браузер не может хранить пост данные?


Ну тогда он их не отправляет, а хранит и тупо выводит? Ведь когда нажимаешь "назад", то форма повторно не отправляется... Браузер обычно вставляет данные, которые пользователь ввёл в <input> в поля формы.

Panoptik пишет:
тут должно больше помочь unset($_POST[var])

Ну да... Но эт я не то спросил. Мне т нужно было избавиться от повторной отправки и самого сообщения.
Буду редиректить лучше, а то чувствую куда-то не туда вообще полез))
(Добавление)
Спасибо большое... Буду читать про принцип работы браузеров)))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB