私はこの質問に対するこの答えを見つけましたhttps://stackoverflow.com/a/7244888/1473523、しかし私の状況では私は隠しフィールドを置くことができないので、PHPで無効な選択フィールドを投稿する方法はありませんか?
6 に答える
いいえ、それがフィールドを無効にすることです。値がサーバーにポストバックされないようにします。フィールドを無効にする場合は、変更できないため、その値を知っておく必要があります。値をポストバックする必要はありません。
値が他の入力に基づいて変化している場合は、その入力サーバー側をキャプチャし、それを使用して、クライアント側を選択する値を計算したのと同じ方法で、ポストバックされる値を計算する必要があります。正確であるためにクライアント側の計算値に依存することは、重大なセキュリティ上の欠陥です。
フォームが投稿される前に何らかの方法でフィールドを有効にするか、非表示のフィールドを追加するかを選択できます。
フォームを送信する直前に、javascriptで無効になっている属性を削除してみてください。
あなたが投稿した質問から、これは無効化フィールドが作成される方法です:
<select class="txtbx1" name="country_disabled" disabled="disabled">
非表示にすることもできます。
<select class="txtbx1" name="country_disabled" type="hidden">
このようなものをクライアントに依存しないでください。JSを無効にしたり、ブラウザの開発者ツールやFiddlerなどのツールを使用してリクエストを作成したりできます。
期待する値があるが、ユーザーが変更を許可されていない場合は、サーバーサイドに保持します。たとえば、セッションを使用します。
無効なフィールドを投稿する方法はありません。それが意味をなさない場合です。
したがって、値が送信されないときにサーバー側でデフォルト値を定義するか、デフォルト値<input type="hidden" name="same_as_select" value="default" />
を提供するために使用するかのいずれかで、フォームが有効になっている場合、フォームは常にデフォルト値を上書きします。
いいえ、方法はありませんが、未定義のインデックス通知を防ぐために、そのフィールドが空であるかどうかをテストできます。
if(empty($_POST['select_name'])){ //or !isset()
$disabled_select = 0; //or its default value
} else {
$disabled_select = $_POST['select_name'];
}
私は単一行を使用することを好みます:
$disabled_select = empty($_POST['select_name']) ? 0 : $_POST['select_name'];