Отправить страницу самому себе и разрешить вводить больше данных

#php #mysql

#php #mysql

Вопрос:

У меня есть два раздела в моей форме PHP. Один раздел позволяет вводить информацию о клиенте (имя, адрес и т.д.), А другой раздел позволяет вводить продукт клиента и его детали (около 15 текстовых полей) и кнопку отправки. Пользователь может вводить неограниченное количество продуктов и деталей для одного и того же клиента. У меня есть 2 таблицы. Таблица Customer и таблица Cust_Products. Поэтому я думаю, что я должен отправить форму самому себе и сохранить данные первого раздела и очистить второй раздел. Какова наилучшая практика для достижения этой функциональности?

Комментарии:

1. Лучшая практика работы с динамическими формами — использование Ajax .

2. @AndrejsCainikovs требуется цитирование

3. Вы можете сохранить свои данные в переменной сеанса (это более безопасно, потому что некоторые деструктивные действия пользователя, такие как перезагрузка страницы и т.д., могут испортить введенные им данные). Или используйте AJAX (как вам советовали). Или как-то хранить данные других пользователей, потому что лучше всего (для безопасности и удобства) обрабатывать фрагменты данных

Ответ №1:

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

 if (isset($_POST['submit']))
{ // product amp; details form 
}
else
{ // customer information
}
  

Комментарии:

1. Спасибо. в первый раз мне нужно сохранить данные о клиенте и продукте. Моя логика сохранения должна быть на той же странице. верно? У вас есть какие-либо примеры?

2. Это приведет к тому, что вам нужно будет адаптировать ее к вашим потребностям. Одним из вариантов является сохранение данных в сеансе по ходу работы, а затем сброс их в базу данных по завершении. Я бы обратился к Google за этим методом. Что касается логики сохранения … если вы хотите отделить презентацию от хранилища данных, то да, она должна быть отдельной.

Ответ №2:

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

Если сеанс не установлен (или пользователь хочет создать нового клиента: укажите ссылку для сброса идентификатора в сеансе), вы предоставляете форму для создания клиента.

Ответ №3:

Дайте вашим формам следующее:

 <input type="hidden" name="user_name" value="$_POST['user_name']">
  

Таким образом, вы можете продолжать использовать одно и то же имя пользователя, если вы делаете репост на ту же страницу, без необходимости пользователю вводить его постоянно.

Ответ №4:

Я использую это при удалении объекта, чтобы заставить пользователя дважды нажать «Удалить», чтобы подтвердить, что они действительно хотят что-то удалить, но я бы предположил, что это должно сработать и для вашей ситуации

 function yourmodule_FORM_ID($form, amp;$form_state) {
    if(!isset($form_state['storage']['confirm'])){
        //this is where your first form goes
    }
    else{
        //this is the second form
    }
}

function yourmodule_FORM_ID_submit($form, amp;$form_state) {
    if(!isset($form_state['storage']['confirm'])){
        $form_state['storage']['confirm'] = TRUE; 
        $form_state['rebuild'] = TRUE;
        //this is where the first form's submit would go
        //you can stuff some info into $form_state if you need it
    }
    else{
        //this is where the second form's submit would go
    }
}