我正在处理一个允许用户复制表单输入组的表单(请参阅此处:http://jsfiddle.net/Sd9Ag/5/)。
我想将数据插入到包含两个表的数据库中:“question”(包含列:“QID”,“text”)和“answer”(包含列:“AID”,“QID”,“text” “)。
当我提交表单时,信息会像这样发布(在此示例中,表单有2个问题,都有3个答案):
问题:
Array ( [0] => question 1 [1] => question 2 )
回答:
Array ( [0] => q1 answer 1 [1] => q1 answer 2 [2] => q1 answer 3 [3] => q2 answer 1 [4] => q2 answer 2 [5] => q2 answer 3 )
我的问题是:在循环使用post变量将这些问题插入数据库时,将这些问题与答案相关联的最佳方法是什么?
我应该为每个表单输入组的name
编写一个不同的方法吗?
有没有办法将每个输入“集合”分组到一个数组中?
答案 0 :(得分:2)
我希望有一个这样的最终数组,所有内容都在一个数组中,以便在处理时很容易循环: -
array([0] => array([0] => question 1,
[1] =>array([0] => q1 answer 1, [1] => q1 answer 2)),
[1] => array([0] => question 2,
[1] => array([0])),
...
检查此格式的输入名称是否产生上述后期数据数组: -
//Question 1
<input type="input" name="question[0][0]">
//Answers to 1
<input type="input" name="question[0][1][]">
<input type="input" name="question[0][1][]">
//Question 2
<input type="input" name="question[1][0]">
//Answer to 2
<input type="input" name="question[1][1][]">
我不确定这是否会按照我上面给出的格式发布值。如果它有效且您更喜欢这种格式,请在代码中生成如下内容。
为了使其更具可读性,您可以像这样分配
//Question 1
<input type="input" name="qa[0][question]">
//Answers to 1
<input type="input" name="qa[0][answer][]">
<input type="input" name="qa[0][answer][]">
//Question 2
<input type="input" name="qa[1][question]">
//Answer to 2
<input type="input" name="qa[1][answer][]">
希望这有帮助
答案 1 :(得分:2)
我过去做过一些与调度小部件类似的东西,允许你为日程安排添加天数,就像你有问题的答案一样。我处理它的方法是通过javascript添加额外的行,递增计数器以命名字段。
这样的事情:
<input type="text" name="question[1]">
<input type="text" name="answer[1][1]">
现在你在javascript中保留一个计数器,你有多少答案,所以当你添加一个新答案时,你只需增加该计数器。例如,如果您以默认值1答案开头:
var count = 1
//creating new answer field logic
count++;
answer_name = 'answer[' + question + '][' + count + ']';
当然,这有点复杂,但希望你能够了解我的目标。
然后当你提交时,你抓住你的问题数组然后只是查询答案数组以获得该问题的所有答案。问题1的答案将以$答案[1]作为数组。