1

2ページからなるユーザー登録フォームの入力を検証しています。$_POST入力が検証に合格すると、variable$validが に設定されtrueます。

最初の登録フォームが正常に検証された場合にのみ、ユーザーを 2 番目の登録フォームに移動させる方法$validtrue?

4

3 に答える 3

1

検証を受け取っ$_POSTて渡すと、ヘッダーを使用してユーザーを 2 番目の登録ページにリダイレクトします。

そして、それを行う前に、$valid の値を次のtrueいずれかに更新してください。

  1. $_SESSIONアクセスし、2 番目の登録ページにアクセスします。
  2. または、必要に応じて、追加してGETパラメーターとして配置できますheader('Location: http://example.com/2ndregistrationstep.php?valid=true')
于 2012-07-15T20:19:55.577 に答える
1

代わりに Javascript を使用してフォームを検証し、フォームに追加するonsubmit="validateForm()"と、validateForm()関数は true または false を返します。false を返すと、フォームは送信されません。

PHP で検証する場合は、最初にフォームを送信する必要があります。無効な場合は、元のフォーム ページにリダイレクトされますが、送信された値を再設定する必要があります。私がすることは、最初にページの上部にあるフォーム フィールドのすべての変数をインスタンス化し、空白の値を設定することです。次に、valid=false のようなフラグのセクション チェックを行い、そうであれば、投稿された値でそれらの変数を更新します。

例えば:

<?php
$first_name = '';
$last_name = '';
$email = '';
$phone = '';
$valid = true;

// Check if valid:
if (isset($_POST['first_name'])) {
    // Validate string and if bad valid = false.
    $valid = false;

    // Set value from $_POST;
    $first_name = $_POST['first_name'];
}
if(isset($_POST['email'])) {
    // Perform validation.

    $valid = true;  // else false

    $email = $_POST['email'];
}

// Check valid flag.
if (!valid) {
    // Display some error to the user.
    $message = 'There was something wrong.';
} else {
    // Tedirect to the destination page.
    // header(..);
}

次に、ページの上部にある変数を使用してフィールドの値を設定します。

<form name="myForm" action="" method="post">
    <input type="text" name="first_name" value="<?=echo $first_name?>">
    <input type="text" name="last_name" value="<?=echo $last_name?>">
    <input type="text" name="email" value="<?=echo $email?>">
    <input type="text" name="phone" value="<?=$phone?>">
</form>

上記の例は、ロジックの説明のみを目的としていることに注意してください。XSSやその他の種類の脆弱性を公開します。

于 2012-07-15T20:29:30.177 に答える
0

登録フォームをスクリプトで直接印刷すると仮定します。単純なロジックを追加しない理由:

<?php

if (isset($_POST)) {
    // .. validate, and then 
    $_SESSION['valid'] = TRUE; // or FALSE
}

if (empty($_SESSION['valid'])) {
    // .. print first step
} else {
    // .. print second step
}
于 2012-07-15T20:29:59.550 に答える