空の POST 方法 <select ..multiple> HTML 要素が空の場合?
-
16-09-2019 - |
質問
HTML フォームに次の複数選択ボックスがあり、ユーザーは 1 つ以上のオプションを選択できます。
<select id="eng_0" name="eng_0[]" multiple size="3">
<option value="Privilégier">Privilégier</option>
<option value="Accepté">Accepté</option>
<option value="Temporaire">Temporaire</option>
</select>
ユーザーがオプションを選択しない場合、フォームは PHP バックエンドに POST されますが、フィールドがフォーム上にないかのように、$_POST['eng_0'] に空の配列値は作成されません。
これは、チェックボックスがオフになっているため送信されない問題のようなものです。
選択されたオプションがない場合でも、選択したオブジェクトをPOSTする方法はありますか?それが役立つ場合は、jQuery で行うことができます。
解決
、あなたはダミーの値が含まれている同じ名前の非表示のフォーム要素を含めることができます。その後、ちょうどあなたがその変数のために取得する値が['dummy_value']
であるならば、あなたはあなたのコード内で「何も選択」を意味しないとということを扱うことができ、ダミーの値を無視します。
他のヒント
あなたはそれが無い内容で送信されたかのように配列が設定されていない状況を扱うことができない理由はありますか?
if (!isset($_POST['eng_0']))
$_POST['eng_0'] = array();
EDITます:
複数の選択はあなたの形で存在するときは常に隠しフィールドを追加します:
<input type="hidden" name="eng_0_exists" value="1"/>
次にチェックします:
if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
$_POST['eng_0'] = array();
隠し入力を追加する場合 前に 複数選択要素の場合、複数選択項目がいずれも選択されていない場合は、非表示の入力値が送信されます。ただし、オプションを選択すると、その選択した値が代わりに使用されます。
このようにして、Laravel/php の 2 つの異なるシナリオを区別することができました。
- すべて設定
myitems
を空にします (非表示の入力が必要なので、PHP は空の文字列を受け取ります)myitems
) - モデルの他のプロパティを変更せずに更新する
myitems
(つまり、すべてを除外します)myitems
フォームに入力します。PHP は、myitems
鍵)
サンプルコード:
<input type="hidden" name="myitems" value="" />
<select name="myitems[]" multiple>
<option value="1">Foo</option>
<option value="2">Bar</option>
</select>
あなたは追加することができます - 選択してください - エントリと、それを事前に選択
。<select id="eng_0" name="eng_0[]" multiple size="3">
<option value="nothing" selected="selected">- please select -</option>
<option value="Privilégier">Privilégier</option>
<option value="Accepté">Accepté</option>
<option value="Temporaire">Temporaire</option>
</select>
タグのようなものを追加します。
$("#field").change(function() {
if (($("#field").val() || []) == "") $("form").append("<input type='hidden' name='field' value=''>");
});
どのようなユーザーがそれを選択した場合でも、選択について何が$ _POSTに到着していない場合はどうなりますか?
<form action="cart.php" method="POST">
<input type="hidden" id="acao" name="acao" value="add" />
<input type="hidden" id="id" name="id" value="<?=$cnt->cnt_codigo?>" />
<?php
$resOpc = mysql_query("SELECT * FROM loja_opcionais ORDER BY descricao")or die(mysql_error());
if(mysql_num_rows($resOpc) > 0){
?>
<select id="opcional" nome="opcional">
<?php
while($opc = mysql_fetch_object($resOpc)){
?>
<option value="<?=$opc->descricao?>"><?=$opc->descricao?></option>
<?php
}
?>
</select>
<?php
}
?>
<button class="botao" type="submit">Adicionar ao Carrinho</button>
</form>
とき私がしますprint_r($ _ POST)を行います。他側の出力は単純です: アレイ([処置] =>追加[ID] => 3)及びIは、他側の値を変更しても、選択タグの兆候;
何の$ _POST、ポスト空の文字列(何も)が存在しない場合は、絶対に、最もシンプルなソリューションです。
ここで<select name="related[]" multiple>
とフォームのための私の解決策
自分のフォームの保存を扱うPHPのセクションに次の行を追加します:
if (!isset($_POST['related'])) $_POST['related']="";
の名前は、選択あなたの<input type="hidden" name="yourfield" value="" />
の場合と同じであるフォームにmultiple="multiple"
を含めます。
ブラウザは、彼らが非複数選択または通常の入力のために行うように選択multiple="multiple"
するための空のフォームパラメータを送信しないことを残念なことです。
受け入れ答えに提案されているようにダミーの値を使用すると、非常にクリーンなソリューションではありません。
(この質問は、jQueryのとは関係ありません)。