我的表单中有一个部分,用户可以点击添加更多"。
例如,我们假设您可以在注册时添加朋友:
<a href="#">Click to add friend</a>
<label>First Name</label>
<input type="text" name="friend[firstName]">
<label>Last Name</label>
<input type="text" name="friend[lastName]">
...
你可以拥有任意数量的朋友。
当我提交表单时,我会在表格中捕获主记录。我们称之为tableA
。设置完成后,我返回插入ID,然后将所有朋友插入tableB
,外键指向主记录。
到目前为止一切顺利。
我要做的是将每个朋友捕获为一个数组并保存为json对象。我关闭,但不完全在那里。
以上输出:
...
[friend_data] => {"friend":{"firstName":"Tyler","lastName":"Durden"}}
我们说我加了三个朋友。只记录最后一位朋友(这是有意义的)。
所以我尝试改变我的输入:
HTML
<label>First Name</label>
<input type="text" name="friend[][firstName]">
<label>Last Name</label>
<input type="text" name="friend[][lastName]">
...
这让我知道了:
[friend_data] => {"friend":[{"firstName":"Tyler"},{"lastName":"Durden"},{"firstName:"Joe"},{"lastName":"Smith"}]}
我(想)试图完成的是:
[friend_data] => {"friend":[{"firstName":"Tyler"},{"lastName":"Durden"}],[{"firstName:"Joe"},{"lastName":"Smith"}]}
我用它来创建上面的内容:
PHP
json_encode(array('friend' => $input['friend']))
这样我就可以遍历json对象并像这样呈现每个数组:
HTML
<ul>
<li>First Name: Tyler</li>
<li>Last Name: Durden</li>
</ul>
<ul>
<li>First Name: Joe</li>
<li>Last Name: Smith</li>
</ul>
感谢您的任何建议!
修改
感谢您的建议Marco Alka!
我已经像这样更新了我的标记:
HTML
...
<input type="text" name="friend[1][firstName]">
<input type="text" name="friend[1][lastName]">
我的输入是通过javascript动态创建的。我添加新朋友时,标记看起来像这样:
...
<input type="text" name="friend[2][firstName]">
<input type="text" name="friend[2][lastName]">
......等等。
这就产生了这个:
...
[friend_data] => {"friend":{"1":{"firstName":"Tyler","lastName":"Durden"},"2":{"firstName":"Joe","lastName":"Smith","address":"3014 SW Prairieview Rd","city":"Ankeny","zip":"","acresAllotted":""}}}
我仍然不认为这是对的。 它与我如何编码数据有关吗?
$person->friend_data = json_encode(array('friend' => $input['friend']));
解
感谢Marco Alka的帮助!以下是我在其他人遇到这个帖子时所做的事情。
如前所述,我的表单中有一部分可以添加朋友到我的注册。默认情况下,页面加载时只能看到一个朋友。使用javascript(jQuery)我允许用户添加任意数量的朋友。
这是最初加载时页面上的标记(为简单起见缩短了)。
HTML
<p><a href="#" id="add">Add Friend</a>
<form>
<div class="clone">
<label>First Name</label>
<input type="text" name="friends[1][firstName]">
<label>Last Name</label>
<input type="text" name="friends[1][lastName]">
</div>
<button type="submit">Submit</submit>
</form>
jquery的
var friendCount = 1;
$('#add').click(function (event) {
// do stuff.
// update the index
jquery.find(':input').each(function () {
$(this).attr('name', 'friend[' + friendCount + '][' + $(this).data('name') + ']');
});
});
然后在php方面我抓住了所有的值:
PHP
$friends = array();
foreach ($input['friend'] as $friend) {
array_push($friends, $friend);
}
...
$person->friend_data = json_encode($friends);
将产生这个json:
JSON
[friend_data] => [{"firstName":"Tyler","lastName":"Durden"},{"firstName":"Master","lastName":"Shake"}]
答案 0 :(得分:1)
填写ID时可以制作有用的数组:
Friend 1:
<label>First Name</label>
<input type="text" name="friend[0][firstName]">
<label>Last Name</label>
<input type="text" name="friend[0][lastName]">
Friend 2:
<label>First Name</label>
<input type="text" name="friend[1][firstName]">
<label>Last Name</label>
<input type="text" name="friend[1][lastName]">