0

以下のような状況でどのフォームが送信されたかを検出する信頼できる方法は何でしょうか? すべてが同じページに送信され、送信されたフォームに基づいて処理が行われます。この方法には多くの欠点が指摘されています。さらに、クエリ文字列も同じスクリプトに送られます。これをどのように行うことをお勧めしますか?

フォーム 1 には 2 つのinputフィールドがあり、フォーム 2 には 3 つのフィールドがあります。

<?php

if ( isset($_POST['valOne']) && isset($_POST['valTwo']) && isset($_POST['valThree']) ) {
    echo 'This is form three';

} elseif ( isset($_POST['valOne']) && isset($_POST['valTwo']) ) {
    echo 'This is form two';
} else {
    echo 'Neither one or two';
}

$formOne  = '<form method="post" action="http://localhost/dev/form.php">';
$formOne .= 'Name: <input type="text" name="valOne" value="Foo" autocomplete="off"><br>';
$formOne .= 'Description: <input type="text" name="valTwo" value="Bar" autocomplete="off"><br>';
$formOne .= '<input type="hidden" name="secretVal" value="secretKey">';
$formOne .= '<input value="Add This" type="submit">';
$formOne .= '</form>';

$formTwo  = '<form method="post" action="http://localhost/dev/form.php">';
$formTwo .= 'Name: <input type="text" name="valOne" value="Foo" autocomplete="off"><br>';
$formTwo .= 'Description: <input type="text" name="valTwo" value="Bar" autocomplete="off"><br>';
$formTwo .= 'URL: <input type="text" name="valThree" value="Tar" autocomplete="off"><br>';
$formTwo .= '<input type="hidden" name="secretVal" value="secretKey">';
$formTwo .= '<input value="Add This" type="submit">';
$formTwo .= '</form>';

$formThree = '<a href="http://localhost/dev/form.php?do=getIt">This is GET. Get it?<a/>';

echo $formOne;
echo '<br>';
echo $formTwo;
echo '<br>';
echo $formThree;

?>
4

5 に答える 5

1

2つのフォームに異なる名前の非表示の入力を使用でき、サーバー側ではif(isset($_POST['hidden_for_form1']))またはで確認できますif(isset($_POST['hidden_for_form2']))

于 2013-06-13T14:53:30.233 に答える
1

form_id パラメータをフォーム アクションに追加できます。

 <form method='post' action='http://localhost/dev/form.php?form_id=1'>

次に、コードでスイッチをオンにし$_GET["form_id"]ます。

于 2013-06-13T14:57:37.527 に答える
1

非表示の入力を使用します

<input type="hidden" name="form" value="form1">

また、フォーム コードを変数に格納する理由はありますか?

于 2013-06-13T14:58:42.587 に答える
0

非表示の入力を追加します。

<input type="hidden" name="form" value="one">
<?switch($_POST['form']){
  case "one":
  ... 
 ?>

名前と値を送信ボタンに割り当てることもできますが、ユーザーが Enter キーを押すと機能しません。

于 2013-06-13T14:54:14.263 に答える