2016-11-08 2 views
0

Dies steht mit einer Quizanwendung in Verbindung. Fragen werden zufällig aus der Datenbank generiert. Benutzer wählt eine Antwort über Radiobutton aus. Die Antwort wird zusammen mit der Frage-ID und der Benutzer-ID in der Datenbank gespeichert. Alles funktioniert gut.Array innerhalb eines Arrays in Datenbank in Codeigniter einfügen

Das Problem ist, ich habe ein Array, das ich in meiner Datenbank speichern möchte. Das Folgende ist der Code.

The View:

<div class="col-lg-8"> 
    <table class="table" style="width: 100%;"> 
     <?php $i = 0; 
     $ques = 1; 
     echo form_open ('Menu/submit_ans', array ('name' => 'quiz')); 
     foreach ($quiz_array as $q) { ?>  
     <td colspan="2" style="background-color: #337ab7; color: white;"> 
      <h4>Question No. <?php echo $ques?> </h4> 
     </td> 
     <tr> 
      <td colspan="2"><?php echo $q->ques;?></td> 
      <input hidden name="qid[]" type="text" value="<?php echo $q->qid;?>"> 
      <input hidden name="uid[]" type="text" value="<?php echo $user['id'];?>"> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_1;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="1"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_2;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="2"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_3;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="3"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_4;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="4"></td> 
     </tr> 
     <?php $i ++; 
     } ?> 
     </table> 
    <center> 
     <button class="btn btn-success" type="submit">Submit!</button> 
     <a></a> 
    </center> 
</div> 
<?php echo form_close();?> 

Controller:

function submit_ans() { 
    $data = array(
    'qid' => $_POST['qid'], 
    'user_id' => $_POST['uid'], 
    'ans_att' => $_POST['ans'] 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 

Modell:

function insert_ans($data) { 
    foreach($data as $answer) { 
     //var_dump($answer); 
    } 
    $this->db->insert_batch('tbl_answers', $data);   
} 

Es folgt der Fehler erhalte ich:

INSERT INTO `tbl_answers`() VALUES ('6','9','1','5','7','10','4','12','8','3','11','2'), ('1','1','1','1','1','1','1','1','1','1','1','1'), Array 

Wie kann ich das Array in meiner Datenbank speichern?

+0

Verwenden Sie so 'ans ['ans_att'] [] 'selbe für alle – devpro

Antwort

1

In insert_batch müssen Sie müssen Spaltennamen als assoziatives Index gegen jeden Wert etwas wie verwenden:

$data = array(// array structure for batch insert method. 
    array(
     'column1' => 'val' , 
     'column2' => 'val' ,  
    ), 
    array(
     'column1' => 'val' , 
     'column2' => 'val' , 
    ) 
); 

Also, was Sie hier benötigen, müssen Sie Ihre Eingabefelder ändern:

<input type="radio" name="ans['ans_att'][<?php print $i; ?>]" value="4"> 

Auch für alle anderen Felder, oben genannten Array ist nur ein Hinweis für Ihre Array-Struktur, müssen Sie Ihr Array wie erwähnt ändern.

Sie auch Ihre $data Array, das Sie verstehen helfen debuggen können, was machen Sie denn hier, momentan sieht Ihr Array wie:

$data = array(// structure is not matched with required 
    'qid' => some encoded code, 
    'user_id' => array(1,1,2), 
    'ans_att' => array(1,1,2) 
); 

Handbuch Sie mehr helfen zu verstehen: http://www.codeigniter.com/userguide3/database/query_builder.html

+0

Ich habe die Idee der Verwendung von insert_batch fallengelassen. Wie kann ich alle Array-Werte in der Datenbank speichern? $ data = array ( \t 'q_id' => $ _POST [ 'QID'] [0], \t 'User_id' => _POST $ [ 'uid'] [0], 'ans_att' => $ _POST ['ans'] [0] ); Ich möchte Array für alle Fragen und Antworten durchlaufen und dann in der Datenbank speichern. –

+0

@SahibUzZaman: Sie können die Schleife hier für alle Werte verwenden – devpro

+0

Ich versuche, indem ich die gleiche Variable im Array für Fragen und Antworten setze, aber ich kann es nicht zum Iterieren –

0

Sie sollten json_encode Methode kodieren.

Beispiel:

<?php 
function submit_ans(){ 
    $data = array(
    'qid' => json_encode($_POST['qid']), 
    'user_id' => $_POST['uid'], 
    'ans_att' => $_POST['ans'] 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 
?> 

und nach erhalten Aufzeichnung mit json_decode(); Ich hoffe, dieser Code ist hilfreich.

0

Sie nicht ein Array in db speichern, umwandeln Array Zeichenfolge mit 'implodieren' Funktion

Controller:

function submit_ans() { 
    $data = array(
    'qid' => $_POST['qid'], 
    'user_id' => $_POST['uid'], 
    'ans_att' => implode(',',$_POST['ans']) 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 

einfach Insert-Funktion in Modell verwenden, keine Notwendigkeit der insert_batch Modell:

function insert_ans($data) { 

    $this->db->insert('tbl_answers', $data);   
} 
+0

Dadurch kann ich nur einen Wert aus dem Quiz speichern. Wie kann ich alle Werte posten? –

Verwandte Themen