0

URLを使用せずにフォームの検証を試みてきました。そこで、フォームに隠しフィールドを作成し、それを検証 php スクリプトに送信しようと考えました。私ができることを望んでいたのは、フォームにあるエラーをこの非表示フィールドに設定して返すことです。ただし、スコープから出ると、設定したものはすべて破棄されます。$_POST にはグローバルスコープがあると思いましたか? たぶん、隠しフィールドを間違って設定したと宣言しましたか?以下にコードを配置しました。

<?php
    include_once $_SERVER['DOCUMENT_ROOT'].'/poles/config/databaseConnect.php';
    include_once $_SERVER['DOCUMENT_ROOT'].'/poles/config/functions.php';
    include_once $_SERVER['DOCUMENT_ROOT'].'/poles/models/users.php';
    include_once $_SERVER['DOCUMENT_ROOT'].'/poles/models/userDetails.php';

    //get the refering url to be used to redirect
    $refUrl = $_SERVER['HTTP_REFERER'];

    if(isset($_POST['register'])){
        //declare a temp error array
        $tempError;

        //check if the form is empty
        if(empty($_POST['Email'])&&empty($_POST['Email Confirmation'])&&empty($_POST['Password'])&&empty($_POST['Password Confirmation'])
        &&empty($_POST['Stage Name'])&&empty($_POST['Main Club'])){
            $tempError = 'Please fill in the form.';
        }else{
            //set variables
        }

        if(!empty($tempError)){
            //start a session to declare session errors
            $_POST['errors'] = $tempError;
            //redirect back to referring url
            header('Location:'.$refUrl);
            exit();
        }else{
            //log user in and redirect to member home page
        }

    }

基本形(入力欄は長くなるので省略)

 <div class="col-md-6 well">
          <span class="jsError"></span><?php if(isset($_POST['errors'])){ $errors = $_POST['errors']; } if(!empty($errors)){ echo '<p class="alert alert-danger text-center">'.$errors.'</p>'; } ?>
          <form class="form-horizontal" role="form" method="post" action="controllers/registrationController.php" id="registration">
            <input type="hidden" name="errors" value="<?php if(isset($_POST['errors'])){echo $_POST['errors']; } ?>">
            </form>

私も $_SESSION 変数メソッドの使用を調べましたが、見つけたものは少し複雑であるか、どこでもたくさんのセッションを開始する必要がありました (私の意見ではコードが乱雑になります)。

4

2 に答える 2

1

リダイレクトの代わりに JavaScript を使用してこれを実現できますが、リダイレクトを介してデータを渡す唯一の方法は、URL、セッション、または Cookie を使用することです。

$_POST['errors'] = $tempError;
//redirect back to referring url

?>
<html><head><title></title></head><body>
<form id="temp_form">
<?php
foreach($_POST as $k=>$v) {
?><input type="hidden" name="<?php echo htmlentities($k); ?>" value="<?php echo htmlentities($v); ?>" /><?php 
}
?>
</form>
<script type="text/javascript">
    setTimeout(function() { document.getElementById('temp_form').submit(); },100);
</script>
</body>
</html>
<?php
    die();
于 2013-11-05T00:41:27.737 に答える