#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
}
}