2017-05-04 104 views
0

我正在使用GUMP https://github.com/Wixel/GUMP進行服務器端表單驗證,並在重定向後顯示消息時有疑問。使用GUMP進行PHP表單驗證

我想在提交後驗證表單數據,然後在出現錯誤時重定向到表單,但我不知道在重定向之後將錯誤傳遞到表單的最佳方法。

我讀過這個問題Header Redirect after form Validation in PHP這表明這樣做的方法有兩種:

1.

$message="Some message for the next page."; 
$message=urlencode($message); 
header("Location:page.php?message=".$message); 

2.

$_SESSION['message']='some other message'; 

答案筆者認爲方法1更安全,但你能告訴我爲什麼會這樣嗎?

我也看了一下它是如何通過PHP的形式,器類https://github.com/lkorth/php-form-builder-class做,他們似乎使用方法2:

/*Valldation errors are saved in the session after the form submission, and will be displayed to the user 
when redirected back to the form.*/ 
public static function setError($id, $errors, $element = "") { 
    if(!is_array($errors)) 
     $errors = array($errors); 
    if(empty($_SESSION["pfbc"][$id]["errors"][$element])) 
     $_SESSION["pfbc"][$id]["errors"][$element] = array(); 
    foreach($errors as $error) 
     $_SESSION["pfbc"][$id]["errors"][$element][] = $error; 
} 

所以,我的問題是,這是最好的方法去解決這個問題?通過$_GET或在會話變量中傳遞錯誤?

p.s.如果我錯過了某些東西,並且有一種方法可以更容易地將其嵌入到GUMP中,請指出它!

回答

0

兩個文件,其中一個包含所有的PHP業務邏輯,另一個包含在第一個文件中的表單。第一個文件做兩件事:它檢查是否提交表單並顯示錶單。在第一次運行時,沒有錯誤消息,因爲表單尚未提交。如果表格被提交併且沒有確認,則表格顯示錯誤信息(即:<?php echo $gump->get_readable_errors(true) ?>)。不需要在會話中存儲錯誤消息。您也可以使用之前提交的數據重新填充表單。

form.php的

<?php 
$_error_messages = ''; 
if (isset($_POST) && !empty($_POST)) : 
    $gump = new GUMP(); 
    // Let's sanitize the POST data 
    $_POST = $gump->sanitize($_POST); 
    $gump->validation_rules(array(
     // your validationm rules here 
    )); 
    $gump->filter_rules(array(
     // your filter rules here 
    )); 
    // Validate the form data 
    $validated_data = $gump->run($_POST); 
    if ($validated_data === false) : 
     // The submitted data did not validate, 
     // display the errors in the form 
     $_error_messages = $gump->get_readable_errors(true); 
    else : 
     // The submitted data validated successfully 
     . . . 
    endif; 
endif; 
// Display your form 
include 'form-view.php'; 

形狀view.php

<!DOCTYPE html> 
    <html> 
    <head> 
     // . . . 
    </head> 
    <body> 
     <section> 
      <?php echo $_error_messages ?> 
      <form 
       action = '<?php echo htmlentities('form.php'); ?>' 
       method = 'post' 
       name = 'my_form' 
      > 
       // The rest of your form here 
      </form> 
     </section> 
    </body> 
    </html>