我正在使用未正确发布多项选择答案的联系表。我正在使用PHPMailer-FE发送表单结果。 PHPMailer-FE包含一个php类文件,配置脚本和TPL文件。
我遇到了Ryan Cramer的jquery.amselect.js小部件的问题,该小部件中的“ Array”一词正在电子邮件中发送,而不是用逗号分隔的选定值列表。
以下是实际使用的amselect小部件的示例:http://www.ryancramer.com/projects/asmselect/examples/example1.html。
这里是HTML:
<select style="width: 200px !important;" id="cards" name="cards[]" multiple="multiple" title="Choose All That Apply" >
<option value="Visa">Visa</option>
<option value="Mastercard">Mastercard</option>
<option value="Amex">American Express</option>
<option value="Discover">Discover</option>
<option value="Diners">Diner's Club</option>
<option value="JCB">JCB</option>
<option value="Visa-Delta">Visa Debit/Delta</option>
<option value="Switch-Maestro">Switch/Maestro</option>
<option value="solo">solo</option>
<option value="Visa-Electron">Visa Electron</option>
</select>
感谢@aSeptik,我现在可以解决此问题,我们可以使用implode标签。在他的工作演示中,PHP包含在HTML文件的顶部:
$message .= implode(', ',$_POST['cards']);
我尝试在TPL或类文件中使用implode标记,但没有成功。
非常感谢您的协助,我正在努力解决此问题。非常感谢!此致,诺兰
UPDATED: (PHPMailer-FE + amselect示例)
通常,这是由于输入名称不正确引起的。我以前没有使用多选,但我建议您的输入标签必须看起来像这样:
<input type="checkbox" name="myBox[]" />
<input type="checkbox" name="myBox[]" />
<input type="checkbox" name="myBox[]" />
等...
注意,名称属性中的数组符号必须带有方括号。如果这样做,PHP会将变量显示为数组。
在您的情况下(现在已经添加了一个示例),您只需要使select标记的末尾具有数组运算符即可:
<select class="mydrop" name="cards-accepted[]" multiple="multiple" size="5">
</select>
我看过您说过使用的插件,现在我看到了问题所在,它有问题。
它生成的输入不利于发布到服务器,因为它们都具有相同的名称。 PHP无法区分具有相同名称的输入(除非它们包含方括号-[]-然后将它们视为数组)]
我在这里模拟了一个小演示:
使用类似firebug的工具检查复选框,您将看到它们都具有相同的名称。
如果我在哪里,我将使用JQuery重命名您的插件创建的chekbox,如下所示:
请参阅:http://jsbin.com/upuhe/2/edit
$("select").multiselect()
.each(function(){
var selectEl = $(this);
var selectElName = selectEl.attr("name")
selectEl.multiselect("widget")
.find("input[type=checkbox]")
.attr({ name: selectElName });
})
这假设您设置了选择的内容,例如<select name='select[]' multiple='multiple'>