【问题标题】:Basic form validation mechanism PHP基本表单验证机制 PHP
【发布时间】:2013-05-09 07:32:29
【问题描述】:

我正在尝试为表单验证设置简单的示例,无论字段是否为空。如果字段不为空,则将我重定向到页面 ok.php,如果不返回到 formvalidation.php。并更改字段的 css。我在将错误数组返回给 formvalidation.php 并对其进行测试以更改输入字段的 css 时遇到问题。我做错了什么?

formvalidation.php

<?php require("includes/functions.php"); ?>
<?php   
    global $errors;
?>

<form action="posting.php" method="p">
    <ul>
        <li id="field">
            <label for="field">Contact person </label>
            <input 
            <?php
            if (empty($errors)) {
                echo "style=\"background-color:   #ECECEC;\"";
            } else {
                if (in_array("field", $errors)) {
                    echo "style=\"background-color: red;\"";}
                } else {
                    echo "style=\"background-color:       #ECECEC;\"";
                }
            }
            ?> 
            type="text" name="field"/>
        </li>
        <li>
            <input id="saveForm" class="button_text" type="submit"  name="submit" value="Submit" />
        </li>
    </ul>
</form>  

action.php

<?php require("includes/functions.php"); ?>
<?php
    $errors = form_validation ();

    if (!empty($errors)) {
        redirect_to("formvalidation.php");
    } else {
        redirect_to("ok.php");
    }
?>

功能

<?php
function form_validation () {

    $errors = array ();

    $required_fields = array('field');
    foreach($required_fields as $fieldname) {
        if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) {
            $errors[] = $fieldname;
        }
    }

    return $errors;

}

【问题讨论】:

    标签: php arrays forms validation


    【解决方案1】:

    重定向后$error变量为空使用$_SESSION

    <?php
        $_SESSION['error']=form_validation ();
    
        if (!empty($_SESSION['error'])) {
            redirect_to("formvalidation.php");
        } else {redirect_to("ok.php");}
    ?>
    

    在formvalidation.php中

    $error=$_SESSION['error'];
    unset($_SESSION['error']);
    

    不要忘记确保session_start() 在您的代码顶部

    【讨论】:

    • 我已经用你的改变了动作代码,我把 session_start() 放在了 formvalidation.php 的顶部,对吧?但这不会改变 css,因为我认为它返回空的 $error = $_SESSION['error']。字段为空时应显示为红色,但仍为灰色。
    • print_r($_SESSION['error']);并发布输出。会话也必须在 action.php 中开始
    • 它在发布后输出它应该是数组( [0] => 字段)。将其存储到 $error 中可能是问题所在。如何检查变量中的内容,因为 echo $error 什么也没给出?另外,我应该 unset($_SESSION['error']);在页面底部?
    • 您可以检查变量中的内容。在$_SESSION['error']=form_validation ();之后的action.php中写print_r($_SESSION['error']); exit;
    • 不,我想到了我在 formvalidation.php $error = $_SESSION['error'] 中声明的变量。 $_SESSION['error'] 转好,在这个页面 print_r($_SESSION['error']) 发布后输出 Array ( [0] => field )
    【解决方案2】:

    看看这个教程:http://www.html-form-guide.com/php-form/php-form-validation.html。它的实现更加面向对象。

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多