【问题标题】:PHP mysql insert associative array into database from a "dynamic" formPHP mysql从“动态”形式将关联数组插入数据库
【发布时间】:2011-05-29 13:48:18
【问题描述】:

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

很抱歉,这是一个很大的问题。我已经为此工作了两天,但已经没有想法了。

【问题讨论】:

    标签: php mysql pdo lamp


    【解决方案1】:

    我不确定我是否理解您的问题(我不会说流利的英语)。

    但是在这里你需要另一个循环而不是这个:

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

    它没有测试任何东西,只有当你总是在答案中得到标题、文本和正确时它才应该工作。

    【讨论】:

    • 感谢您的回答,不幸的是,无论标题字段是否为空,我都需要插入数据。
    • 您是否测试了解决方案?无论文本字段存在时标题是否为空。
    【解决方案2】:

    问题在于第二个循环(答案数组)。试试这个

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

    【讨论】:

    • 感谢您的回答,不幸的是,无论标题字段是否为空,我都需要插入数据。
    猜你喜欢
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2016-05-26
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多