簡體   English   中英

PHP表單處理器錯誤回傳

[英]PHP Form Processor Error Passback

我有一個基本的PHP表單頁面,其中包含大量數據,一旦完成,這些數據將保存到MySql的約4-5個不同的表中。 由於構造此保存例程將需要一些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
          }
     }
?>

我之前遇到過此問題,我們如何解決此問題的方法是將所有字段放入會話中,然后使用header(“ Location:form.php”)重定向回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']);

這可能是一種麻煩的方式,但已證明對我們的目的有效。 只是以為我會分享。

我認為您可以使用一系列錯誤來做到這一點。

  1. 將錯誤標志設置為false(如果發生錯誤,則將其設置為true,因此不存儲在數據庫中)。

  2. 檢查元素1,如果有錯誤,則將其存儲在數組$error['name'] = 'value'

  3. 同樣,檢查所有元素,並使用相同的過程進行存儲。

  4. 最后,如果將錯誤標志設置為false,則不要將其存儲在數據庫中(如果在同一頁面上,則可以在要顯示錯誤消息的窗體上訪問該數組。)

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

頁面下方。

但是,最好的方法是使用面向對象的方法。

[更新]

  1. 在html表單元素上存儲php對象並通過GET方法傳遞php對象?

  2. 如何從PHP腳本發送重定向頁面傳遞變量作為發布變量

我也猜,將整個對象存儲在SESSION中並不是一個壞方法

我會發回包含錯誤和值的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM