2011-07-13 12 views
1

私はアプリケーションを構築するので、ユーザーは質問を投稿し、その質問に4つの可能な回答を追加することができます。私はデータベースに質問を保存し、挿入されたIDを取得し、それを私の答えに割り当てるので、私は正しい質問のために戻って対応する答えを引き出すことができますが、私のforeachループは1回だけ発生します。 1つの回答だけがデータベースに追加されることを意味します。質問が保存されますし、その後の回答を超えるループ回数の正確な数は、質問のための4つの答えを追加するように私のコードを書き換えることができますどのように?私の現在のコードはforループのヘルプとデータベースへのデータの挿入

$count = count($questions); 
      for($i = 0; $i < $count; $i ++) { 
       if($this->questions_model->insert($questions[$i])) 
       { 
        $answers[$i]['questions_question_id'] = $this->db->insert_id(); 
        if(!$this->answers_model->insert($answers[$i])) { 
         $errors = array("Something has gone wrong please try and submit again"); 
        } 
       } 
       else 
       { 
        $errors = array("Something has gone wrong please try and submit again"); 
       } 
      } 
+0

これは非常に奇妙な質問です。あなたのコードでforeachループが見つからないという事実に似ています。 forループはうまく見えますが、答えを数えるときに何かが間違っている可能性があります。渡す配列のprint_rは、あなたに有用な洞察を与えるかもしれません。 – bigblind

+1

foreachを使用してください! http://php.net/manual/en/control-structures.foreach.php – dwerner

+0

エディタのヘルプを読んだり、コードの書式を設定する方法については、http://stackoverflow.com/editing-helpをご覧ください。ありがとう。 – Kev

答えて

0

通常のforループを使用しないでください。あまりにも多くの作業が必要です。 foreachループを使用します。それを入れ子にする。私はここを参照してください問題は、あなたの質問と回答は一つの大きなフォームから来ているならば、どのように我々はその質問に答える行くかわからないということです

if ($this->questions_model->insert($question)) 
{ 
    $question_id = $this->db->insert_id(); 

    foreach ($answers AS $answer) 
    { 
    $answer['questions_question_id'] = $question_id; 

    if (!$this->answers_model->insert($answer)) { 
     $errors = array("Something has gone wrong please try and submit again"); 
    } 
    } 
} 
else 
{ 
    $errors = array("Something has gone wrong please try and submit again"); 
} 

はこれを試してみてください?ここであなたの最善の賭けは、複数の回答を1つの質問だけを同じフォームに提出することです。その後、上記のコードが動作します。

それ以外の場合は、事前に各質問に回答を添付する方法を組み込む必要があります。たぶん各質問に答えの配列を埋め込むことさえできます。あなたはこれを行うことができます...

foreach ($questions AS $question) 
{ 
    if ($this->questions_model->insert($question)) 
    { 
    $question_id = $this->db->insert_id(); 

    foreach ($question->answers AS $answer) 
    { 
     $answer['questions_question_id'] = $question_id; 

     if (!$this->answers_model->insert($answer)) { 
     $errors = array("Something has gone wrong please try and submit again"); 
     } 
    } 
    } 
    else 
    { 
    $errors = array("Something has gone wrong please try and submit again"); 
    } 
} 

入れ子のループと関数呼び出しはあなたの友人です。各ループがはるかに複雑になる場合は、繰り返し呼び出すことができる関数にその一部をカプセル化することをお勧めします。

1

これはうまくいくかもしれない、以下の通りです私はあなたの質問を理解すればあなたのために。あなたはいつも4つの答えを持っていればうまくいくはずです。さもなければあなたはこれが作るギャップに対処しなければなりませんが、それをどう扱うか考えてください。

 $count = count($questions); 
     $answerMax = 4; 
     for($i = 0; $i < $count; $i ++) 
     { 
      if($this->questions_model->insert($questions[$i])) 
      { 
       for($j = 0; $j < $answerMax; $j++) 
       { 
        $curAnswer = $i * $answerMax + $j; 
        $answers[$curAnswer]['questions_question_id'] = $this->db->insert_id(); 
        if(!$this->answers_model->insert($answers[$curAnswer])) 
        { 
         $errors = array("Something has gone wrong please try and submit again"); 
        } 
       } 
      } 
      else 
      { 
       $errors = array("Something has gone wrong please try and submit again"); 
      } 
     } 
0

私が正しくあなたの質問を理解している場合は、すべての答えを介して実行するために二次forループを実行することができます。

$count = count($questions); 
for($i = 0; $i < $count; $i++) { 
    if($this->questions_model->insert($questions[$i])) { 
     for($e = 0; $e < count($answers); $e++) { 
      if(!$answers[$e]) break; // Stop trying to add answers if this answer is blank/invalid. 
      $answers[$e]['questions_question_id'] = $this->db->insert_id(); 
      if(!$this->answers_model->insert($answers[$e])) { 
       $errors = array("Something has gone wrong please try and submit again"); 
      } 
     } 
    } else { 
     $errors = array("Something has gone wrong please try and submit again"); 
    } 
} 
関連する問題