Передача данных между состояниями PHP - PullRequest
2 голосов
/ 03 мая 2010

Итак, я использую Limonade PHP с дизайном RESTful, который эмулирует маршруты PUT, POST, DELETE для создания, обновления, удаления.

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

Как бы это сделать? В настоящее время у меня есть для создания страницы:

/admin/page/new -> GET function

/admin/page -> POST function
+ validate
    + pass, update db
    + fail, add errors to flash, redirect to /admin/page/mew

Все падает, поскольку я не знаю, как заполнить / admin / page / new недействительными, но отфильтрованными данными.

Ответы [ 3 ]

1 голос
/ 03 мая 2010

Чтобы вернуть данные на перенаправленную страницу, вам нужно либо использовать сеанс, либо засорять запрос с помощью get vars для каждого элемента (на это не приятно смотреть, на закладку закладывать не стоит)

Я бы предположил, что «добавить ошибки во флэш» использует сеанс var (не знаком с Limonade).

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

Конечно, вам все еще нужен не-AJAX метод, работающий для обратной совместимости.

Обновление : Источник лимонады подтверждает, flash() использует $_SESSION. Итак, вы уже используете сеансовые переменные.

1 голос
/ 03 мая 2010

Использовали ли вы сеанс для переноса данных в / admin / page / new? http://www.php.net/manual/en/session.examples.basic.php

редактировать: Я только что нашел эту статью: http://www.recessframework.org/page/towards-restful-php-5-basic-tips, в которой рекомендуется использовать куки-файлы с $ _SESSION. Не уточняется, почему, но любой из них достигнет желаемого результата.

0 голосов
/ 04 мая 2010

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

В ваших служебных функциях:

function passthruFormInput($name) {
    if (isset($_POST[$name])) {
      echo htmlspecialchars($_POST[$name], ENT_QUOTES); 
    }
}

newForm.php (или как вы хотите это называть):

<form action="..." method="POST" onsubmit="...(client side validation function)...">
    ...
    <input name="foo" value="<?php passthruFormInput('foo'); ?>"/>
    ...
</form>

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

Оставление скрипта формы общедоступным может не представлять проблемы для безопасности, но оно должно находиться либо вне корневой иерархии документа, либо в ветке, защищенной ORDER Allow,Deny или mod_rewrite . Вероятно, это должно идти с представлениями.

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