使用多维数组填充动态HTML字段

时间:2011-07-25 18:46:35

标签: php

我有一个用动态创建的输入字段行创建的表单。

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”。

有关如何正确填充字段的任何想法吗?

谢谢。

3 个答案:

答案 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}可能会完全影响你的形式。