PHP mysql从“动态”表单将关联数组插入数据库

时间:2010-12-22 18:13:47

标签: php mysql pdo lamp

我有一个允许重复字段的表单。表单通过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']));
   }
}

很抱歉这是一个非常大的问题。我已经在这方面工作了两天而且已经没有想法了。

2 个答案:

答案 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]));
}

?>