我有一个用动态创建的输入字段行创建的表单。
foreach ($data as $k => $v){
print "<tr>Table # $k</tr>";
print "<tr><td>First Name</td><td>Last Name</td></tr>"
for($i = 1; $i <= $data[$k]['tickets']; $i++){
print "<tr><td><input name='fname[]' type='text' class='mid_text_data' value=".$prefill[$k]['first_name']." maxlength='15' /></td><td><input name='lname[]' type='text' class='mid_text_data' value=".$prefill[$k]['last_name']." maxlength='15' /></tr>";
}
}
我根据$ data数组中的'ticket'数创建了输入字段,但我想用$ prefill [$ k] ['first_name']预填充fname的值。
我的$ prefill和$ data变量如下所示:
$prefill = {
[145]=> array(9) {
["first_name"]=> string(5) "John"
["last_name"]=> string(6) "Doe"
["company"]=> string(10) "Big Business"
["email"]=> string(21) "jdoe@email.org"
["photo_op"]=> int(0)
["gala"]=> int(1)
["chairman"]=> int(0)
["prefix"]=> NULL
["table_number"]=>int(60)
}
[146]=> array(9) {
["first_name"]=> string(5) "Jane"
["last_name"]=> string(6) "Doe"
["company"]=> string(10) "Big Business"
["email"]=> string(21) "JaDoe@email.org"
["photo_op"]=> int(0)
["gala"]=> int(1)
["chairman"]=> int(0)
["prefix"]=> NULL
["table_number"]=>int(60)
}
[147]=> array(9) {
["first_name"]=> string(5) "Stan"
["last_name"]=> string(6) "Derp"
["company"]=> string(10) "Big Business"
["email"]=> string(21) "sderp@email.org"
["photo_op"]=> int(0)
["gala"]=> int(1)
["chairman"]=> int(0)
["prefix"]=> NULL
["table_number"]=>int(83)
}
}
$data = {
[60]=> array(5) {
["tickets"]=> int(10)
["gala"]=> int(8)
["chair"]=> int(2)
["ind_id"]=> float(805879)
["photo"]=> int(0)
}
[83]=> array(5) {
["tickets"]=> int(5)
["gala"]=> int(5)
["chair"]=> NULL
["ind_id"]=> float(805879)
["photo"]=> int(1)
}
}
目前,表格会在我的每个“fname”字段中重复“John”。
有关如何正确填充字段的任何想法吗?
谢谢。
答案 0 :(得分:1)
$ prefill和$ data之间的关系似乎就像是“有一个”。难道你不能合并这两个数组以进行更简单的操作吗?
例如,如果您只使用$ data中的票证,为什么不直接将它放入$ prefill(例如,直接在您的SQL查询中)。
$prefill = {
[1]=> array(9) {
["first_name"]=> string(5) "John"
["last_name"]=> string(6) "Doe"
["company"]=> string(10) "Big Business"
["email"]=> string(21) "jdoe@email.org"
["photo_op"]=> int(0)
["gala"]=> int(1)
["chairman"]=> int(0)
["prefix"]=> NULL
["table_number"]=>int(60),
["tickets"]=> int(10)
}
如果您需要所有$ data的数据,只需将$ data部分嵌套在相应的$ prefill部分中:
$prefill = {
[1]=> array(9) {
["first_name"]=> string(5) "John"
["last_name"]=> string(6) "Doe"
["company"]=> string(10) "Big Business"
["email"]=> string(21) "jdoe@email.org"
["photo_op"]=> int(0)
["gala"]=> int(1)
["chairman"]=> int(0)
["prefix"]=> NULL
["table_number"]=>int(60),
["data"]=> array(5) {
["tickets"]=> int(10)
["gala"]=> int(8)
["chair"]=> int(2)
["ind_id"]=> float(805879)
["photo"]=> int(0)
}
}
答案 1 :(得分:0)
您可以尝试$prefill[$k]
$prefill[i]
答案 2 :(得分:0)
您使用$i
作为内部循环,但在数组引用中使用$k
。试试这个:
for($i = 1; $i <= $data[$k]['tickets']; $i++) {
echo <<<EOL
<tr>
<td>
<input name="fname[]" type="text" class="mid_text_data" value="{$prefill[$i]['first_name']} maxlength='15' /></td>
<td>
<input name="lname[]" type="text" class="mid_text_data" value="{$prefill[$k]['last_name']}" maxlength="15" />
</tr>
EOL;
}
注意使用HEREDOC - 更容易阅读这样的html,而不是将它们全部压缩成一行文本。
但是,要严格说明,您应该通过实际使用htmlspecialchars()
来转义预填充数组中的所有HTML元字符 - 否则需要额外的"
或'
或{{1}可能会完全影响你的形式。