0

フィールドが空かどうかに関係なく、フォーム検証の簡単な例を設定しようとしています。フィールドが空でない場合、アクションはページ ok.php にリダイレクトし、そうでない場合は formvalidation.php に戻ります。フィールドのcssを変更します。エラー配列を formvalidation.php に戻し、それをテストして入力フィールドの css を変更することに問題があります。私は何を間違っていますか?

フォーム検証.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;

}
4

2 に答える 2

0

リダイレクト$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()コードの一番上にあることを忘れないでください

于 2013-05-09T07:35:01.517 に答える
0

このチュートリアルを見てください: http://www.html-form-guide.com/php-form/php-form-validation.html . よりオブジェクト指向に実装されています。

于 2013-05-09T07:42:13.763 に答える