0

検証を実行するサードパーティ サービスに送信するフォームがあります。エラーが発生すると、フォームと同じページにリダイレクトされますが、元のフォーム値を含むクエリ文字列とエラー メッセージが追加されます。

このクエリ文字列が原因で、ブラウザはそれを「新しいページ」と見なし、フォームは空白になります。

私は PHP を使用して 1 つの方法を試しました (コード レビューの質問を参照)。つまり、「各フィールドの GET 値を個別に取得し、これらをフォームの値として設定する」というものです。それは一種の作品ですが、:

  • ラジオボタンの扱いが難しい
  • 私は完全な PHP 機能を持っていません。特定の PHP を実行できる PHP-in-pages プラグインを使用して WordPress にいますが、関数を定義してから再利用することで窒息しています。

このフォームを再入力するための推奨される方法 (PHP または JavaScript ... また、サイトには jQuery もあります) は何ですか?

4

3 に答える 3

3

Javascript は、PHP がサーバーに余分な負荷をかけるためです。ただし、ユーザー入力の検証は、クライアント側 (JS) と (サーバー側) PHP の両方で行う必要があります。

于 2012-06-26T16:47:11.930 に答える
2

フィールドを動的に組み立てる場合を除き、PHP を使用してフィールドを動的に再設定するのは簡単ではありません。の場合、次のようなことができます。

PHP

$fields = [
    'username' => ['type' => 'text', 'value' => $_GET['username']],
    'setting1' => ['type' => 'radio', 'value' => $_GET['radio']]
];
foreach( $fields as $name => $input ) {
    echo "<input type='{$input['type']}' name='{$name}' value='{$input['value']}'>";
}

そうでない場合は、このように PHP と JavaScript を組み合わせて使用​​できます。私は物事を単純化するためにjQueryを使用しています。

PHP と JavaScript

$fields = $_GET;
echo '<script type="text/javascript">
var errors = { ';
foreach( $fields as $name => $value ) {
    echo $name . " : '{$value}',\n";
}
echo '};

$.each(errors, function(name, value) {
    $("input[name="+name+"]").val(value);
});
</script>';

これはテストされておらず、少なくとも 1 つのバグ (errors 配列に余分なカンマ) があることはわかっていますが、出発点としては適切です。2 番目の方法の目的は、PHP を使用して配列を組み立て、JavaScript が使用してループを実行し、これらの値を各入力フィールドに割り当てることです。ただし、選択ボックスやラジオ ボタンなどのロジックは複雑になります。割り当てるだけでなく、プロパティなどvalを設定する必要があります。checked

残念ながら、すでにこれを行っているライブラリまたは jQuery プラグインがあるかどうかはわかりません。

于 2012-06-26T20:41:30.960 に答える
1

これは、ラジオボタンをチェックする jquery コードです。

     $("form :radio:checked").before("CHECKED"); //selects only checked buttons

これは、フォームが送信されないようにし、フィールドに再入力するコードです。

function prepareEventhandlers() {
document.getElementById("formname").onsubmit = function() {
if (document.getElementById("email").value == "") { // e.g. if no email was given
    document.getElementById("errormessage").innerHTML = "it didnt work!";
    return false;
} else {
    document.getElementById("errormessage").innerHTML = "";
    return true;
}
};
}


window.onload = function () {
prepareEventhandlers();
}

幸運を!

于 2012-06-26T18:13:00.807 に答える