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, возможно?

 PHP.SU

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


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

> Без описания
ЧИМ
Отправлено: 11 Декабря, 2016 - 09:47:12
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


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




Добрый день, пытаюсь не переходя на другую страницу вносить записи в базу данных. Записи заносятся, но есть проблема. После первого срабатывания данные формы хранятся в POST и после каждого обновления страницы запись в БД заносится автоматически с данными которые были занесены в прошлый раз. Можно ли средствами PHP очистить метод POST?
unset($_POST); пробовал - нет эффекта.

Собственно кусок кода(без подключений)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form method="post" name="sender">
  3. <table border="1">
  4.     <tr>
  5.         <th>Наименование</th><th>Дата производства</th><th>Дата поставки</th><th>Срок годности(до)</th><th>Количество</th><th>Единица измерения</th>
  6.     </tr>
  7.     <tr>
  8.         <td><input type="text" autofocus="1" placeholder="Введите название медикамента" name="name_med"></td>
  9.         <td><input type="date" autofocus="2" placeholder="0000-00-00" name="date_pr"></td>
  10.         <td><input type="date" autofocus="3" placeholder="0000-00-00" name="date_post"></td>
  11.     <td><input type="date" autofocus="4" placeholder="0000-00-00" name="date_godn"></td>
  12.     <td><input type="number" autofocus="5" placeholder="Введите количество" name="kolvo"></td>
  13.     <td><select name="izm" autofocus="6"><option value="sht">шт</option><option value="mg">мг</option><option value="ml">мл</option> </select></td>
  14.     <td><input type="button" autofocus="7" value="Записать в приход" onclick="sw()" name="add_pr"></td>
  15.     </tr>
  16. </table>
  17. </form>    
  18. <!--
  19. <script language="JavaScript">  
  20. function sw() {
  21. alert("Вы нажали кнопку");
  22. }
  23. -->
  24.  
  25.     <?php
  26.  
  27. include 'sql_con.php';
  28. if($_POST['add_pr'] and $_SERVER['REQUEST_METHOD'] == "POST")
  29. {
  30.    $name_med=$_POST['name_med'];
  31.    $date_pr=date('Y-m-d G:i:s',strtotime($_POST['date_pr']));
  32.    $date_post=date('Y-m-d G:i:s',strtotime($_POST['date_post']));
  33.    $date_godn=date('Y-m-d G:i:s',strtotime($_POST['date_godn']));
  34.    $kolvo=$_POST['kolvo'];
  35.    $izm=$_POST['izm'];
  36.    $polya=TB_POL;
  37.    $con= mysqli_connect('localhost', 'login', 'pass', 'apteka');
  38.    mysqli_query("SET NAMES utf8");
  39.        
  40.    mysqli_query("INSERT INTO $polya VALUES ('$name_med','$date_pr','$date_post','$date_godn','$kolvo','$izm')");
  41.    
  42.    echo 'Медикамент поставлен на приход!';
  43.    }
  44. else {
  45.        
  46.         echo 'Запись не вставлена.';
  47.    }
  48.  
  49.    ?>
  50.  
 
 Top
Строитель Модератор
Отправлено: 11 Декабря, 2016 - 10:17:57
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




ЧИМ, данные в POST можно сбросить, передав браузеру заголовок Location . При этом страница будет перезагружена.
 
 Top
ЧИМ
Отправлено: 11 Декабря, 2016 - 10:45:04
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


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




Строитель пишет:
ЧИМ, данные в POST можно сбросить, передав браузеру заголовок Location . При этом страница будет перезагружена.

Если я правильно понял то конструкция для очистки заголовка в POST выглядит так:

и вставил я его вот сюда:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if($_POST['add_pr'])
  3. {
  4.     $name_med=$_POST['name_med'];
  5.     $date_pr=date('Y-m-d G:i:s',strtotime($_POST['date_pr']));
  6.     $date_post=date('Y-m-d G:i:s',strtotime($_POST['date_post']));
  7.     $date_godn=date('Y-m-d G:i:s',strtotime($_POST['date_godn']));
  8.     $kolvo=$_POST['kolvo'];
  9.     $izm=$_POST['izm'];
  10.     $polya=TB_POL;
  11.     $con=mysqli_connect('localhost', user_login, user_pass, 'apteka');
  12.     mysqli_query("SET NAMES utf8");
  13.    
  14.  
  15.     mysqli_query("INSERT INTO $polya VALUES ('$name_med','$date_pr','$date_post','$date_godn','$kolvo','$izm')");
  16.    echo 'Медикамент поставлен на приход!';
  17.    
  18.    header("Location:"."");
  19.    exit();
  20.        
  21.     }
  22.  else {
  23.        
  24.           echo 'Запись не вставлена.';
  25.     }
  26.  


Но ничего не выходит, всё равно при обновлении страницы и при нажатии на кнопку в POST остаются все данные. После обновления страницы выводится сообщение "Медикамент поставлен на приход!".

(Отредактировано автором: 11 Декабря, 2016 - 11:52:05)

 
 Top
Строитель Модератор
Отправлено: 11 Декабря, 2016 - 14:15:10
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




ЧИМ, попробуйте так
Спойлер (Отобразить)
 
 Top
ЧИМ
Отправлено: 11 Декабря, 2016 - 17:15:59
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


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




Строитель пишет:
ЧИМ, попробуйте так
Спойлер (Отобразить)


Большое спасибо за этот кусок кода, теперь заносится в базу только по нажатию на кнопку, но я немного не понял как это работает, так как не могу отследить ход событий ни echo ни с помощью print_r. Сообщений просто нет, причём никаких и не могу понять почему. Кстати код работает и без вот этой части:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. if (isset($_SESSION['msg']))
  4.     {
  5.     $msg = $_SESSION['msg'];
  6.     unset($_SESSION['msg']);
  7.     }
  8. else {
  9.     $msg = '';
  10.  

Что с ней, что без неё - эффект один и тот же.

Вот ещё один момент:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (!mysqli_query($con, $sql))
  3.             {
  4.         if (!$name_med) {
  5.             $_SESSION['msg'] = 'Запись не вставлена!';
  6.             echo 'Запись не вставлена!';
  7.         }
  8.     }
  9.     else {
  10.             $_SESSION['msg'] = 'Медикамент поставлен на приход!';
  11.             echo 'Медикамент поставлен на приход!';
  12.         }
  13.  

Ни одно из сообщений не выводится при условии ввода в базу данных, или при вводе с пустым полем наименования. Хотя сам ввод данных из условия if работает но дальше не понятно что происходит, такое ощущение что просто на этом всё обрывается и не идёт даже в else.
Сейчас конструкция работает в таком виде:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <title></title>
  6.     </head>
  7.     <body>
  8. <form method="post" name="sender" >
  9. <table border="1">
  10.     <tr>
  11.         <th>Наименование</th><th>Дата производства</th><th>Дата поставки</th><th>Срок годности(до)</th><th>Количество</th><th>Еденица измерения</th>
  12.     </tr>
  13.     <tr>
  14.         <td><input type="text" autofocus="1" placeholder="Введите название медикамента" name="name_med"></td>
  15.         <td><input type="date" autofocus="2" placeholder="0000-00-00" name="date_pr"></td>
  16.         <td><input type="date" autofocus="3" placeholder="0000-00-00" name="date_post"></td>
  17.     <td><input type="date" autofocus="4" placeholder="0000-00-00" name="date_godn"></td>
  18.     <td><input type="number" autofocus="5" placeholder="Введите количество" name="kolvo"></td>
  19.     <td><select name="izm" autofocus="6"><option value="шт">шт</option><option value="мг">мг</option><option value="мл">мл</option> </select></td>
  20.     <td><input type="submit" autofocus="7" value="Записать в приход" name="add_pr"></td>
  21.    
  22.     </tr>
  23. </table>
  24. </form>
  25.    <?php
  26.   include 'sql_con.php';
  27.   $post=$_POST['add_pr'];
  28.  
  29. if ($post) {
  30.    print_r($post);
  31.    $name_med=$_POST['name_med'];
  32.    $date_pr=date('Y-m-d G:i:s',strtotime($_POST['date_pr']));
  33.    $date_post=date('Y-m-d G:i:s',strtotime($_POST['date_post']));
  34.    $date_godn=date('Y-m-d G:i:s',strtotime($_POST['date_godn']));
  35.    $kolvo=$_POST['kolvo'];
  36.    $izm=$_POST['izm'];
  37.    $polya=TB_POL;
  38.    $charset='utf8';
  39.    $con=mysqli_connect(HOST, LOGIN, PASS, BD);
  40.    mysqli_set_charset($con, $charset);
  41.    $sql = "
  42.       INSERT INTO $polya
  43.       VALUES (
  44.           '$name_med',
  45.           '$date_pr',
  46.           '$date_post',
  47.           '$date_godn',
  48.           '$kolvo',
  49.           '$izm'
  50.       )
  51.   ";
  52.    mysqli_query($con, $sql);
  53.  
  54.    header('Location: '. basename("prihod.php"));    
  55. }
  56. ?>
  57.  

Ещё раз огромное спасибо!

(Отредактировано автором: 11 Декабря, 2016 - 17:22:30)

 
 Top
Строитель Модератор
Отправлено: 11 Декабря, 2016 - 22:01:50
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




ЧИМ пишет:
Кстати код работает и без вот этой части:
Эта часть нужна для вывода в браузер сообщений об успешной записи, или наоборот - об ошибке. Так, как страницу перезагружает header('Location: ...) , то и вывод в echo вы не получите. Именно поэтому я дописал в скрипт сессии.
(Добавление)
Вместо этого

header('Location: '. basename("prihod.php"));

Напишите так :

header('Location: prihod.php');
 
 Top
ЧИМ
Отправлено: 12 Декабря, 2016 - 19:52:06
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Дек. 2016  


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




Строитель пишет:
ЧИМ пишет:
Кстати код работает и без вот этой части:
Эта часть нужна для вывода в браузер сообщений об успешной записи, или наоборот - об ошибке. Так, как страницу перезагружает header('Location: ...) , то и вывод в echo вы не получите. Именно поэтому я дописал в скрипт сессии.
(Добавление)
Вместо этого

header('Location: '. basename("prihod.php"));

Напишите так :

header('Location: prihod.php');

Заменил. Ну в принципе разницы я так понял нет, так как "." это символ который стыкует между собой две конструкции.
А на счёт сессии всё же не понятно, потому как не работал вывод сообщений когда я код просто скопировал и вставил.
 
 Top
Строитель Модератор
Отправлено: 12 Декабря, 2016 - 21:44:56
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




ЧИМ пишет:
Заменил. Ну в принципе разницы я так понял нет, так как "." это символ который стыкует между собой две конструкции.
Дело не в конкатенации (".") , а в том, что в моём варианте браузер перенаправляется на эту же страницу. Название файла с кодом определяется функцией basename(), на вход которой передаётся константа __FILE__ . Всё вместе выглядело так:

header('Location: '. basename(__FILE__));

А в вашем варианте перенаправление браузера выполняется не на этот же файл с формой, а на prihod.php . Поэтому использование функции basename() у вас становится бессмысленным. Соответственно вам следует записать так:

header('Location: prihod.php');


Теперь на счёт вывода уведомлений. Если вы:

1. оставите в коде условие
PHP:
скопировать код в буфер обмена
  1. if (!mysqli_query($con, $sql)) {
  2.     $_SESSION['msg'] = 'Запись не вставлена!';
  3. } else {
  4.     $_SESSION['msg'] = 'Медикамент поставлен на приход!';
  5. }
  6.  


2. в самом вверху кода оставите старт сессии

и

3. вверху файла prihod.php добавите старт сессии с этим условием
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_SESSION['msg'])) {
  3.     echo $_SESSION['msg'];
  4.     unset($_SESSION['msg']);
  5. }
  6.  


То получите в браузер вывод уведомлений.
 
 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