Добавление нескольких элементов в форму, без JavaScript? - PullRequest
0 голосов
/ 05 марта 2011

Спасибо всем. (Почему-то я не смог ответить на голосование, поэтому сегодня все побеждают:] еще раз спасибо!)


Завершите здесь работу с новичками в области php и javascript, извинитесь заранее за что-нибудь нерешительное.

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

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

Как это сделать? И что более важно, возможно ли это без JavaScript?

Без JS я понимаю, что это, вероятно, повлечет за собой повторную загрузку страницы для добавления элементов, несмотря на то, что меня больше смущает, как обрабатываются данные $ _POST, как до, так и после отправки.

Извините за такой открытый вопрос, на самом деле просто ищу кого-то, чтобы указать мне правильное направление, так как поиск этой темы оказался немного сложным.

Спасибо.

Некоторые уточнения Я пытаюсь разработать приложение, максимально независимое от javascript. В этом смысле я не знаю, возможно ли добавить новые элементы только с помощью PHP. Мне кажется, что у рассматриваемого набора полей может быть своя собственная кнопка отправки, действие которой ПОСТАВЛЯЕТСЯ на саму страницу (без взаимодействия с БД и т. Д.), И переменные типа $ book_genre1, $ book_title1 заполняются на странице. Затем «официальная» отправка отправляется позже, что фактически добавляет данные POST, которые содержат массив книг, в БД. Но я не знаю, является ли это безопасной процедурой или хорошей логикой для начала.

Ответы [ 4 ]

1 голос
/ 05 марта 2011

В ответ на приведенный выше ответ, если это именно то, что вам нужно, так как у меня, кажется, другая идея.

Вы просто сохраняете каждое добавление в массиве, хранящемся в переменной сеанса, и при каждой загрузке страницы анализируете данные в читаемый HTML.

$_SESSION['form'][] = serialized_form_data; 

На каждую нагрузку

foreach ($_SESSION['form'] as $form) {
    unserialize_data_and_create_html(); 
}

add_new_form_element();

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

Это лучшая реализация, чем я думал ранее. Я хотел реализовать версию БД.

Извините за задержку. Я не могу комментировать, так как я нахожусь в мобильном режиме (проблемы с js), поэтому я решил вместо этого редактировать.

Вы можете просто использовать $_SESSION['form'] для своих вставок.

Простой foreach также будет работать. Однако не забудьте правильно очистить каждое значение перед его вставкой. Это ключ.

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

0 голосов
/ 05 марта 2011

Перед отправкой формы ... нет данных для обработки.После отправки формы данные отправляются на сервер в виде массива.

(с php.net/manual/en/reserved.variables.post.php):

$ _ POST = "Ассоциативный массив переменных, переданных в текущий скрипт через метод HTTP POST."

Таким образом, пользователь отправляет некоторые данные на сервер.Теперь эти данные доступны для использования в ваших сценариях: заполните базу данных, проверьте значения перед выполнением «x», напишите HTML клиенту и т. Д.

Мне нравится, куда @frosty идет с его подходом.Он потенциально может отправлять несколько запросов на сервер, но это также очень простой подход.Полностью серверное решение.

JavaScript или библиотека jQuery позволят вам достичь аналогичного результата и публиковать на сервере только один раз - просто скрывая / показывая заполненные поля, динамически записывая дополнительные поля в форму(например: После заполнения «Книга № 1» пользователь может нажать «Добавить еще», и JS записывает идентичный набор полей формы со всеми ссылками на книгу № 2).Очевидно, что этот подход будет более сложным, чем прямой подход PHP.И вам потребуется план резервного копирования, если вы хотите разрешить пользователям с отключенным JS участвовать.

0 голосов
/ 05 марта 2011

Я бы посоветовал вам использовать javascript для обработки добавления пользователем нескольких элементов. Посмотрите jQuery (http://www.jquery.com)) - фантастическая библиотека javascript, которая поможет вам сделать много замечательных динамических вещей.

Затем, как только вы получите всю информацию от пользователя, просто один раз, чтобы все сразу к вашему php и сохранить ее. Для получения информации о том, как получить доступ к $ _POST или $ _REQUEST и использовать их, вам необходимо ознакомиться с некоторыми учебными пособиями по PHP или взять книгу. Это довольно простые вещи PHP и слишком большая тема для этой темы.

0 голосов
/ 05 марта 2011

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

Обратите внимание, что хранение информации в такой форме не считается безопасным, поскольку ею можно манипулировать и / или подделывать, поэтому следующий вариант - сохранить ее в сеансе; поскольку он на стороне сервера, необходимо защитить только идентификатор cookie / сессии. Затем значения могут быть получены из сеанса в PHP после того, как произошло POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...