Передача ошибки обработчика форм PHP - PullRequest
1 голос
/ 04 марта 2011

У меня есть базовая страница формы PHP, которая содержит довольно большой объем данных, которые будут сохранены в 4-5 различных таблицах в MySql, как только все это будет сделано. Поскольку для создания этой подпрограммы сохранения потребуется немного PHP, я хочу, чтобы действие POST не указывало на PHP_SELF, а вместо этого занимало отдельный файл PHP для обработки.

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

Как лучше всего вернуться к исходной странице формы (HTTP_REFERER) при сохранении ввода данных?

Страница формы:

<form action="processor.php" action="post">
<!-- lots of fields -->
<input type="submit" id="submitButton" name="Save" value="Save" />
</form>

Страница процессора:

<?php
     if ( isset($_POST['date']) && ($_SERVER['HTTP_REFERER'] == "form.php") )
     {
          $errors = false;

          //attempt to put data in database

          if ( $errors )
          {
               //Pass back to the form.php page with error message and all data intact
          }
     }
?>

Ответы [ 3 ]

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

Раньше я сталкивался с этой проблемой, как мы решили, что нужно поместить все поля в сеанс, а затем перенаправить обратно в form.php, используя header ("Location: form.php");

Когда данные были отправлены в форму, мы сохранили $ _REQUEST в $ _SESSION ['post'];если проверка не удалась, мы отправили ее обратно в форму, заполнили поля и удалили сеанс.

Так, например,

$_SESSION['post']['field_a'] = $_REQUEST['field_a'];
$_SESSION['post']['field_b'] = $_REQUEST['field_b'];

С некоторыми причудливыми соглашениями об именах вы можете просто зациклить этоупростите процесс.

Затем на странице формы мы просто проверили, есть ли какие-либо данные, или просто отображаем эти данные независимо.

$str_field_a = @$_SESSION['post']['field_a'];
...
<input name="field_a" value="<?php echo $str_field_a; ?>" />
...
unset($_SESSION['post']);

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

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

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

if ( $errors ) {
    ?><form action="form.php" method="post" name="error">
    <input type="hidden" name="errcode" value="<?php echo $errorcodes; /*or whatever message*/ ?>" />
    <input type="hidden" name="anotherdata" value="anothervalue" />
    <?php /*you can add all post datas here as hidden field*/  ?>
    </form>
    <script type="text/javascript">document.error.submit();</script><?php
}

И это похоже на мой form.php

//first I set default blank variables for form
$formvalue="";
$formnumericvalue="";
//i set them, yay!

//if I get values from post.php, I update the values
if (isset($_POST['iserror'])) { //you can either echo a error message or update current data here, I'm showing this for both
    $formvalue=$_POST['formvalue'];//don't forget to validate these!
    $formnumericvalue=$_POST['formnumericvalue']; //don't forget to validate these!
}
//I also do this method for edit forms

//and finally I show the form
?>
<form name="form" method="post" action="post.php">
    <input type="text" name="formvalue" value="<?php echo $formvalue; ?>" />
</form>
0 голосов
/ 04 марта 2011

Я думаю, что вы можете сделать это, используя массив ошибок.

  1. Установить флаг ошибки false (если ошибка возникает, установить ее в значение true, чтобы не сохранять в базе данных).

  2. Проверьте элемент 1, если ошибка, затем сохраните его в массиве $error['name'] = 'value'

  3. Аналогично проверьте все элементы и сохраните, используя ту же процедуру.

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

    if(isset($error['elementname'])) echo $error['elementname']; 
    

под страницей.

Однако наилучшим подходом является использование объектно-ориентированного подхода.

[ОБНОВЛЕНИЕ]

  1. хранение объектов php в элементе html-формы и передача объектов php методом GET?

  2. как отправить страницу перенаправленияпередать переменные как переменные post из php-скрипта

Также я предполагаю, что сохранение всего объекта в SESSION будетне плохой подход

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