1

ユーザーがフォームを送信すると、次のように if ステートメントを使用して検証されます。

if (strlen($_POST['password']) < 5)
{
    $data['errors'][] = 'Too short';
}
elseif ($_POST['password'] != $_POST['confirm_password'])
{
    $data['errors'][] = 'doesnt match';
}

検証が完了すると、エラーがないかどうかを確認します

if (!$data['errors'])

そうでない場合は、続行してデータベースにデータを入力します

ただし、エラーがある場合、ユーザーはフォーム全体を再入力する必要があります。それは望ましくありません。正当な場合は、データをレンダリングする必要があります

if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
    $data['errors'][] = 'E-mail not valid';
}

ここのように、パスワードの検証が失敗しても電子メールの検証は問題ない場合は、フォームで既に評価されている電子メールを返したいと思います。} else { $data['postback']['email']; のように、すべての検証チェックに else ステートメントを配置する必要がありますか? または、別の簡単な方法でこれを行うことができますか?

どうやってやるの?

4

5 に答える 5

0

チェックするフィールドに AJAX または Javascript/JQuery を使用するだけでよいため、残りのフィールドの値はそのまま残ります。

このアプローチを使用すると、ページをサーバーに送信する必要がないため、ユーザー入力を保持できます。また、余分なリクエストを処理する必要がないため、サーバーにとっても優れています。

例: ログインとパスワードのフィールドがあります。ログインがデータベースに既に存在するかどうかを検証し、パスワード フィールドが一致するかどうかも確認する必要があります。
また、検証する必要のない randomText と呼ばれるテキスト入力を使用することもできます。

したがって、ログイン フィールドには AJAX を使用します。 onBlur イベントが発生すると、データをサーバーに送信し、サーバーはこのログインがデータベースに存在するかどうかを確認し、応答を返します。回答に応じて、javascript/jQuery を使用してユーザーにエラーを表示します。ページの検証でエラーが発生した場合は、必ずページの送信を無効にしてください。
パスワードの検証では、Javascript を使用してフィールド値が一致するかどうかを確認し、一致しない場合はエラーを再度書き込みます。
そして、これらすべてのチェックを実行している間、ページをサーバーに送信しないため、 randomText フィールドは同じままです。

于 2012-12-06T09:43:30.950 に答える
-1
<input type="text" name="email" value="<?php if(isset($_POST['email'])){echo $_POST['email']; } ?>" />
于 2012-12-06T09:26:54.223 に答える
-1

この問題は、検証にelseステートメントを追加することで解決されました。検証が成功した場合、検証で何か他のものが失敗した場合、レンダリングレイアウトにデータを返します。

if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
    $data['errors'][] = 'E-mail not valid';
}
else
{
    $data['post']['email'] = $_POST['email'];
}

次に、post.email 変数を含む $data 配列を単純に戻し、それを画面に出力します。

于 2012-12-08T08:34:57.023 に答える
-1

レンダリングされた HTML 入力要素にすべての値を戻す必要があります。値をフィルタリングし、HTML でそのフィルタリングされた値が必要な場合は、filter_var関数の戻り値を使用する必要があります。

<?php
$filtered = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

HTML:

<input type="text" value="<?php echo $filtered ?>" />

例えば。Zend Framework や Symfony のような何らかのフォーム レンダリングをサポートするテンプレート システムまたはフレームワークを使用すると、少し簡単になります。

于 2012-12-06T09:22:32.147 に答える
-1

このようなことをする

<input value="<?= $_POST['email']; ?>" type="text" name="email" />
于 2012-12-06T09:25:57.280 に答える