WedX - журнал о программировании и компьютерных науках

Почему кнопка активна после обновления?

Я работаю над проектом, и в основном мне нужно хранить содержимое формы ввода в массиве, но я должен добавить его, а не заменить, поэтому я использую session_start().
Проблема в том, что даже если оставить форму ввода пустой и, таким образом, не отправлять какие-либо данные, а просто обновлять страницу, последний элемент добавляется каждый раз.

Например, допустим, что в первый раз я добавил Джона в форму ввода и нажал кнопку SUBMIT, в первый раз результаты будут нормальными, Массив ([0] => John), НО, просто выполнив обновление (и, таким образом, позволив поле ввода пустое) имя John будет добавлено в массив без всякой причины, это пример вывода:

Array (
  [0] => John
  [1] => John
  [2] => John
  [3] => John
  [4] => John
  [5] => John
  [6] => John 
)

В данном случае я сделал 6 обновлений страницы. Похоже, что кнопка остается активной и, таким образом, передает элемент управления if(isset($_POST['invia_prenotazione'])) .

<?php
  session_start();
  if (!isset($_SESSION['nomi']))
  {
    $_SESSION['nomi']=array();
  }

  if(isset($_POST['invia_prenotazione']))
  {
    $_SESSION['nomi'][]=$_POST['nome'];
    echo "<br>";
    print_r($_SESSION['nomi']);
  }
?>

 <!DOCTYPE html>
 <html>
   <head>
     <title>Es1</title>
     <style>
       input
       {
         position: relative;
         display: block;
       }
     </style>
   </head>
   <body>
     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
       Nome Evento: <input type="text" name="nome"><br>
       <input type="submit" name="invia_prenotazione" value="SUBMIT"><br>
     </form>
   </body>
 </html>
05.11.2020

  • Вам просто нужно перенаправить свою страницу после отправки формы. Вот почему рекомендуется разделить HTML и PHP на отдельные файлы, потому что вам придется перенаправлять после завершения вашего PHP-скрипта, что решит вашу проблему. 05.11.2020
  • @GrumpyCrouton Я согласен, что это отличная практика, но, поскольку это домашнее задание, мой учитель сказал хранить все в одном файле. 05.11.2020
  • Помимо лучших практик... Быстрым решением было бы отключить переменную POST после $_SESSION['nomi'][]=$_POST['nome']; --- Например: unset($_POST['nome']) -- Руководство по PHP 05.11.2020
  • @LouysPatriceBessette Я пытался, и по какой-то причине это не сработало, необычно, почему это так. Но все равно спасибо, я знаю, что это должно работать, но почему-то не работает. 05.11.2020
  • @JasperHoward Просто перенаправьте в конце вашего PHP обратно на ту же страницу. 05.11.2020

Ответы:


1

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

посмотрите здесь:
Лучший способ избежать отправки из-за обновления страницы

Как правило, перенаправление страницы формы на ту же страницу не является хорошей практикой и не включает логику в файл представления. Вместо этого у вас должен быть php-файл входа в систему и файл просмотра.

05.11.2020
  • Это исправило это, я знаю, что перенаправление на ту же страницу не является хорошей практикой, но из-за того, что это домашнее задание, мой учитель сказал, что я должен делать это только в одном файле. Спасибо за помощь! 05.11.2020
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]