使用GUMP进行PHP表单验证

时间:2017-05-04 17:02:45

标签: php validation redirect

我正在使用GUMP https://github.com/Wixel/GUMP进行服务器端表单验证,并且在重定向后显示有关显示邮件的问题。

我想在提交后验证表单数据,然后在出现错误时重定向到表单,但我不知道在重定向后将错误传递给表单的最佳方法。

我已经阅读了这个问题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-form-b​​uilder类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中,请指出它!

1 个答案:

答案 0 :(得分: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>