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
Форумы портала PHP.SU :: Версия для печати :: Очистка $_POST
Форумы портала PHP.SU » » Вопросы новичков » Очистка $_POST

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

1. Dezmont - 14 Декабря, 2011 - 08:52:09 - перейти к сообщению
В общем у меня форма, которая работает через $_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? Как лучше это реализовать?
2. Zuldek - 14 Декабря, 2011 - 09:01:59 - перейти к сообщению
POST "очищается" обновлением страницы. Нужные параметры сохраняйте хоть в GET, хоть дописывайте в сессию, — как удобнее.
3. Dezmont - 14 Декабря, 2011 - 09:04:56 - перейти к сообщению
А кроме обновления других вариантов "очистки" больше нет? Ну и редиректа на другую страницу.... Просто тупо удалить определённые ячейки массива?
4. Pimpys - 14 Декабря, 2011 - 09:08:15 - перейти к сообщению
Яб сделал так:
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.  

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

Обновлением стр, лутче.
5. Panoptik - 14 Декабря, 2011 - 09:12:03 - перейти к сообщению
а ничего что при обновлении браузеры обычно повторно отправляют данные гет/пост?
6. Zuldek - 14 Декабря, 2011 - 09:12:57 - перейти к сообщению
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.
7. Pimpys - 14 Декабря, 2011 - 09:13:09 - перейти к сообщению
Panoptik пишет:
а ничего что при обновлении браузеры обычно повторно отправляют данные гет/пост?

Так как я написал, оно обновит и сбросит 100%
Не ну по $_SERVER['PHP_SELF'] может и нет я не проверял, и он был для примера Улыбка
Можно Урл какойто на туже стр например.
8. Panoptik - 14 Декабря, 2011 - 09:14:38 - перейти к сообщению
да, конечно. не заметил хедер
9. Данил_123 - 14 Декабря, 2011 - 09:21:57 - перейти к сообщению
$_POST[var] = null;
10. Dezmont - 14 Декабря, 2011 - 09:25:33 - перейти к сообщению
Zuldek, а в чём суть принципа работы заголовка Location? PHP посылает только этот заголовок серверу, игнорируя всё остальное? Или есть приоритет заголовков?

З.Ы. И заодно не скажете, что при нажатии на кнопку "НАЗАД" в браузере происходит? Принцип её работы. )))
Или просто пошлите куда-нить читать, если есть какой-нибудь конкретный ресурс...
11. Panoptik - 14 Декабря, 2011 - 09:27:33 - перейти к сообщению
при нажатии назад браузер будет посылать ту же информацию, которая отправлялась на той странице
по идее когда браузер видит заголовок локейшн, то ему уже всё равно на остальные данные, потому что у него прямое задание идти по указанному адресу
12. Dezmont - 14 Декабря, 2011 - 09:27:55 - перейти к сообщению
Данил_123 пишет:
$_POST[var] = null;

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


Т.е. он сохраняет предыдущий набор http заголовков и посылает их серверу? Что-то тут не то, потому что опять ведь должен ПОСТ отправляться...
13. Данил_123 - 14 Декабря, 2011 - 09:33:42 - перейти к сообщению
Dezmont да, допишешь в конце кода.. Нул это не строка, а 0 байтовое значение.. Думаю ведь проверки будут проверки на еmpty.. Значит все будет работать
14. Panoptik - 14 Декабря, 2011 - 09:34:39 - перейти к сообщению
Dezmont пишет:
Т.е. он сохраняет предыдущий набор http заголовков и посылает их серверу? Что-то тут не то, потому что опять ведь должен ПОСТ отправляться...
в данном случае пост и отправиться. это аналогично с гетом, когда вы переходите по ссылке с параметрами у вас уже существует гет, почему тогда браузер не может хранить пост данные?

Цитата:
$_POST[var] = null;
тут должно больше помочь unset($_POST[var])
15. Dezmont - 14 Декабря, 2011 - 09:41:12 - перейти к сообщению
Panoptik пишет:
в данном случае пост и отправиться. это аналогично с гетом, когда вы переходите по ссылке с параметрами у вас уже существует гет, почему тогда браузер не может хранить пост данные?


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

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

Ну да... Но эт я не то спросил. Мне т нужно было избавиться от повторной отправки и самого сообщения.
Буду редиректить лучше, а то чувствую куда-то не туда вообще полез))
(Добавление)
Спасибо большое... Буду читать про принцип работы браузеров)))

 

Powered by ExBB FM 1.0 RC1