Intereting Posts
Зачем использовать PDO над MySQL в PHP? Очистить поле формы после успешной подачи php-формы Сессия PHP не сохраняется между страницами codeigniter Как настроить маршрутизацию для класса контроллера и метода? Как добавить бэкэнд Java на существующий сайт PHP без добавления сервера tomcat для Java Bridge? Узнайте, существует ли дата между двумя датами, игнорируя год Mysql Повторение значения столбца Limit N раз Условная инструкция mySQL. Если true UPDATE, если false INSERT Эффективное масштабирование изображений без потери соотношения сторон или качества в php Вставка значения переменной PHP в файл Javascript Как установить текстовое значение SimpleXmlElement без использования его родительского элемента? MySQLi подготовил операторы с оператором IN Расположение заголовка + Размещение контента Добавление загружаемого изображения при запуске PHP-скрипта Mysql, где id находится в массиве

Упрощение форм PHP, которые предварительно заполняются данными dabase и проверкой ошибок, поэтому активно перезаписывать данные $ _POST

Хорошо, так что это общий сценарий.

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

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

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

// Pull from post or get, or else use data, eg from the database, to populate a form. function in_or_data($index, $data, $trim=false){ return $_POST[$index]? ($trim ? trim($_POST[$index]) : $_POST[$index]) : $data[$index]; } <?php $item_name = in_or_data('item_name', $data_from_database_somewhere); // Pull post data, with defaults coming from the ?> // ..... Later, some example html that just escapes & echoes out the data. ..... <td id='item-name'><input name="item_name" type="text" id="item_name" value="<?php echo escape($item_name); ?>" size="47" maxlength="100" tabindex="9"></td> 

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

 <input type="text" name="abc" value="<?php array_key_exists('abc', $_REQUEST) ? $_REQUEST['abc'] : "default value goes here" ?>" /> 

Более элегантное решение, хотя и серьезное количество работ, будет включать использование ajax (jquery и т. Д.) Для выполнения проверки на стороне сервера в форме, перед отправкой.

То, что вы делаете, кажется мне прекрасным. В основном то, что я делаю в той же ситуации, есть скрытое поле в форме что-то вроде

 <input name="is_edit"` ... /> 

и на моем PHP просто проверьте для $_POST['is_edit'] чтобы я ничего не $_POST['is_edit'] из базы данных. Одна из проблем, связанных с выполнением каждого поля в отдельности, как и вы, заключается в том, что для определенных вещей (например, флажков), если пользователь не проверяет флажок, $_POST['checkbox_data'] не будет установлен, поэтому я верю вы в конечном итоге вытащили бы это из базы данных, используя функцию, указанную выше. Это должно быть либо все, либо ничего, что вытаскивается БД. Поэтому я делаю что-то вроде этого:

 <?php if (isset($_POST['is_edit'])) { $var1 = $_POST['var1']; $var2 = $_POST['var2']; // etc } else { $data = do_db_query_and_get_data(); $var1 = $data['var1']; $var2 = $data['var2']; // etc } ?> <input type="something" value="<?php echo $var1; ?>" /> <input type="something" value="<?php echo $var2; ?>" /> <input type="hidden" name="is_edit" value="1" /> 

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

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