我已经找到了这个表单所需的大部分内容(使字段动态等等)但是现在数组部分似乎无法正常提交。
我想要完成的事情: 带有select字段的表单,可以动态复制,然后作为表单的一部分提交给它自己的表。因此,如果我们在一个表单中添加并选择三个人,它会将其外部密钥提交给它自己的参与表,然后返回到表单所针对的事件。不得不让它充满活力,因为我们永远不会确定有多少人会参加这个活动,但它必须以一种形式发生。只因为它确实如此。我的老板这么说。
这是我的javascript添加另一个字段按钮:
$(document).ready(function() {
$('#btnAdd').click(function() {
var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
var newNum = new Number(num + 1); // the numeric ID of the new input field being added
// create the new element via clone(), and manipulate it's ID using newNum value
var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);
// manipulate the id value of the input inside the new element
newElem.children(':first').attr('id', 'attendee' + newNum).attr('name', 'attendee[' + newNum + ']');
// insert the new element after the last "duplicatable" input field
$('#input' + num).after(newElem);
// enable the "remove" button
$('#btnDel').attr('disabled','');
// business rule: you can only add 5 names
if (newNum == 6)
$('#btnAdd').attr('disabled','disabled');
});
这是该字段的开头形式:
<div id="input1" style="margin-bottom:4px;" class="clonedInput">
<select name="attendee[1]" id="attendee1" style='float:right;margin-right:4.5%;'>
<option value=''>Please choose one...</option>
<?php
while($row_attendees = mysql_fetch_assoc($res_attendees)){
$attendee_id = $row_attendees['attendee_id'];
$attendee_name = $row_attendees['name'];
echo "<option value='".$attendee_id."'>".$attendee_name." </option>";
}
?>
</select><label style='width:100px;display:inline-block;line-height:28px;' for="attendee">Attendee</label>
</div>
我正在准备好所有改变的事情。所有选择的输入都被id'd并正确命名。 div正在更新相同。所有这一切都正常。什么不是我什么时候去提交。这是我的PHP:
foreach($_POST['attendee'] as $attendee){
$sql_attendees = "INSERT into marketing_calendar.attending (event_title, attendee_id) VALUES ('".$_POST['title']."','".$attendee."')";
$res_attendees = mysql_query($sql_attendees) or die(mysql_error());
}
我曾经将这一切联系起来的所有教程都表明这是正确的。但它不起作用。我只得到第一个下拉列表,并没有其他任何东西填充到阵列中。如果我运行表单或回显foreach语句中的参与者变量,至少它显示/提交的全部内容。请帮忙! :)
提前感谢。
更新 我已经尝试了与另一个用户讨论的一些方法来显示$ _POST ['attendee']的数组,但它仍然只是在数组中显示1个id,而不是我实际添加的很多字段。我也尝试从select的name属性中删除数组中的数字。所以它只是name ='attendee []'而不是name ='attendee [1]'等等。这也没有任何帮助。有人可以帮忙解释为什么我的动态添加字段没有被添加到数组中吗?
答案 0 :(得分:1)
我把你的代码放到JSfiddle中,在这里:http://jsfiddle.net/rv8Mv/1/
看起来正在正确添加选择。您可以通过单击“提交”按钮进行检查,该按钮显示将提交给服务器的数据字符串。
您可能想要检查的一件事是确保将所有选定元素括在<form>
元素中,而这些元素并未包含在您的问题中。
我认为您的问题出在服务器上的PHP代码中。
在服务器上,确保使用以下代码接收所有变量:
<?php
foreach($_POST as $key => $value){
error_log($key.' -> '.$value;
}
?>
然后检查错误日志以查看所有POST变量的名称和值。
您可能没有在当前的PHP代码中正确引用POST变量。
答案 1 :(得分:1)
您应该将sql更改为:
foreach($_POST['attendee'] as $attendee){
$sql_attendees = "INSERT into marketing_calendar.attending (event_title, attendee_id) VALUES ('".$_POST['title']."',".$attendee.")";
$res_attendees = mysql_query($sql_attendees) or die(mysql_error());
}
您的attendee_id
是一个int列。您使用单引号包装列内容,表示字符串。如果您的列定义为可为空,则会导致attendee_id
为空。