如何获取通过append函数添加到多选下拉框sel2[]的提交值?
问题解决方案
以下是针对你遇到的sel2[]提交后值为空问题的具体修复步骤:
1. 修复表单提交基础问题
你的提交按钮是type="button",这只是普通按钮,无法触发表单提交;同时所有表单元素未被<form>标签包裹,导致数据无法被发送到服务器。
修改后的HTML结构:
<form method="post" action="你的PHP处理页面路径"> <select id="sel1" multiple size="5"> <option value="test1">1st test</option> <option value="test2">2nd test</option> <option value="test3">3rd test</option> <option value="test4">4th test</option> <option value="test5">5th test</option> </select> <select id="sel2" name="sel2[]" multiple size="4"> <option value="dummy">Dummy</option> </select> <br> <input type="button" id="doBtn" value="do it"> <!-- 改成submit类型按钮,同时添加name属性 --> <input type="submit" id="submit" name="submit" value="add"> </form>
2. 确保动态追加的选项被选中
<select multiple>提交时,只有被选中的option才会被发送到服务器。你当前的JS仅追加选项但未设置选中状态,导致新选项默认不参与提交。
修改后的JavaScript代码:
$('#doBtn').click(function () { $('#sel1 option:selected').each(function () { $("<option/>") .val($(this).val()) .text($(this).text()) .prop('selected', true) // 新增:设置选项为选中状态 .appendTo("#sel2"); }); });
3. PHP代码优化(避免报错与注入风险)
修正$_POST索引的语法问题,同时增加空值判断防止implode报错,并且使用预处理语句避免SQL注入:
if(isset($_POST['submit'])) { // 空值处理,避免数组为空时implode报错 $diag_string = !empty($_POST['sel2']) ? implode(', ', $_POST['sel2']) : ''; // 使用预处理语句替代直接拼接SQL $sql = "INSERT INTO 你的表名 (你的字段名) VALUES (?)"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_bind_param($stmt, "s", $diag_string); $qsql = mysqli_stmt_execute($stmt); }
额外提示
- 如果不需要默认的
Dummy选项,可以在追加新选项前通过JS移除它,或者让用户手动取消选中,否则它会被包含在提交的数组中。
内容的提问来源于stack exchange,提问作者Phillip Chirazo
相关产品推荐
相关产品推荐

