我在HTML表单中有以下多选框,用户可以在其中选择一个或多个选项。
<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>
当用户没有选择任何选项时,表单将被POST到PHP后端,但它不会为$ _POST ['eng_0']创建空数组值,就好像该字段在表单上不均匀一样。
这有点像未提交问题的未选中复选框。
即使没有选择的选项,有没有办法让它对选择对象进行POST?如果有帮助,它可以在jQuery中。
答案 0 :(得分:20)
如果您的表单是动态生成的,则可以包含一个隐藏的表单元素,该元素具有包含虚拟值的相同名称。然后,只要忽略虚拟值,如果您为该变量获得的值是['dummy_value']
,那么您可以将其视为代码中的“未选择”。
答案 1 :(得分:12)
有没有理由你不能处理没有设置数组的情况,好像它是在没有内容的情况下发送的那样?
if (!isset($_POST['eng_0']))
$_POST['eng_0'] = array();
编辑:
只要表单中存在多个选择,就添加一个隐藏字段:
<input type="hidden" name="eng_0_exists" value="1"/>
然后检查:
if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
$_POST['eng_0'] = array();
答案 2 :(得分:5)
如果在多重选择元素之前添加隐藏输入,如果没有选择多个选择项,它将发送隐藏输入值。只要选择一个选项,就会使用所选的值。
通过这种方式,我能够在Laravel / php中区分出两种不同的场景:
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>
答案 3 :(得分:3)
您可以添加 - 请选择 - 条目并预选。
<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>
答案 4 :(得分:1)
即使用户选择它,但是没有关于select的内容到达$ _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);在另一方面,输出只是: 数组([acao] =&gt;添加[id] =&gt; 3)并且没有选择标记的符号,即使我更改了另一边的值;
答案 5 :(得分:1)
添加类似
的内容
sqlprm[0] = new SqlParameter(DBProcedures.sqlparam_Name, Stu_Name);
sqlprm[1] = new SqlParameter(DBProcedures.sqlpram_Email, Stu_Email);
sqlprm[2] = new SqlParameter(DBProcedures.sqlpram_Mobile_Num, Stu_Mobile);
dr = objDAL.ExecuteReader(DBProcedures.Usp_StuEmail, ref sqlprm, false);
while (dr.Read())
{
InstEmails list1 = new InstEmails()
{
Emaillist = dr["email"].ToString(),
};
data.Add(list1);
};
foreach (var emailId in data)
{
string MessageBody = "studentname" + Stu_Name + " is Intersted" + "studentmail is" + Stu_Email;
string MailSubject = "this is from Traininghubs";
obj.SendEmailToInstitute(emailId.ToString(), MessageBody, MailSubject);
}
}
catch(Exception e)
{
}
return data;
}
#endregion
&#13;
答案 6 :(得分:0)
如果没有$ _POST,发布空字符串(无)绝对是最简单的解决方案。
这是我对<select name="related[]" multiple>
只需在处理表单存储的php部分添加以下行:
if (!isset($_POST['related'])) $_POST['related']="";
答案 7 :(得分:0)
在您的表单中加入<input type="hidden" name="yourfield" value="" />
,其中的名称与您multiple="multiple"
选择的名称相同。
不幸的是,浏览器不会为multiple="multiple"
次选择发送空表单参数,就像它们对非多次选择或普通输入一样。
使用接受答案中提出的虚拟值不是一个非常干净的解决方案。
(这个问题与jQuery无关)