我有一个允许重复字段的表单。表单通过php发布并插入数据库。我的问题是我似乎无法正确循环数组。我是否正确设置了表单(name
的格式正确)并且我正确地循环数组吗?我没有成功插入任何数据。
诀窍是重复的字段需要粘在一起。
将这些字段视为一组问题和答案。
每个问题都有标题,问题文本和文件输入。
每个答案都有一个标题,答案文本是一个文件输入,一个复选框用于记录正确的答案。
我的name
设置如下:
name='question[1][title]'
name='question[1][text]'
name='question[1][file]'
answer[1][title][]
answer[1][text][]
answer[1][file][]
answer[1][correct][]
插入表单的php如下:
$insert_question = $db->prepare(
'insert into questions (title, text) values (?, ?)');
$insert_answer = $db->prepare(
'insert into answers (question_id, title, text, correct)'.
' values (?, ?, ?, ?)');
foreach ($_POST['question'] as $q_num => $q)
{
$insert_question->execute(array($q['title'], $q['text']));
$q_id = $db->lastInsertId();
//********************
// insert files
//********************
foreach ($_POST['answer'][$q_num] as $a)
{
$insert_answer->execute(
array($q_id, $a['title'], $a['text'], $a['correct']));
}
}
很抱歉这是一个非常大的问题。我已经在这方面工作了两天而且已经没有想法了。
答案 0 :(得分:2)
我不确定我是否理解你的问题(我不会说流利的英语)。
但是在这里你需要一个其他循环而不是这个循环:
foreach ($_POST['answer'][$q_num] as $a)
{
$insert_answer->execute(
array($q_id, $a['title'], $a['text'], $a['correct']));
}
喜欢:
$lim = count($_POST['answer'][$q_num]['title']);
for($i=0;$i<$lim;++$i){
$insert_answer->execute(
array($q_id, $_POST['answer'][$q_num]['title'][$i], $_POST['answer'][$q_num]['text'][$i], $_POST['answer'][$q_num]['correct'][$i]));
}
它没有测试任何东西,只有当你总是在答案中得到标题,文字和正确时它才能起作用。
答案 1 :(得分:0)
问题在于第二个循环(答案数组)。试试这个
<?php
foreach ($_POST['answer'][$q_num]['title'] as $a => $value)
{
$insert_answer->execute(
array($q_id, $_POST['answer'][$q_num]['title'][$a], $_POST['answer'][$q_num]['text'][$a], $_POST['answer'][$q_num]['correct'][$a]));
}
?>