2010-12-22 4 views
0

Ich habe ein Formular, das für die Duplizierung von Feldern ermöglicht. Das Formular wird über PHP gepostet und in eine Datenbank eingefügt. Mein Problem ist, dass ich das Array nicht korrekt durchlaufen kann. Richte ich das Formular korrekt ein (sind die name richtig formatiert) und bin ich die Arrays richtig durchlaufen? Es ist mir nicht gelungen, Daten einzufügen.PHP Mysql einfügen assoziative Array in die Datenbank von einem "dynamischen" Formular

Der Trick ist, dass die doppelten Felder zusammenhalten müssen.

Denken Sie an die Felder als Sätze von Fragen und Antworten.

Jede Frage hat einen Titel, den Fragetext und eine Dateieingabe.

Jede Antwort hat einen Titel, den Antworttext eine Dateieingabe und ein Kontrollkästchen, um die richtige Antwort zu notieren.

Ich habe die name ist wie so ein:

name='question[1][title]' 
name='question[1][text]' 
name='question[1][file]' 

answer[1][title][] 
answer[1][text][] 
answer[1][file][] 
answer[1][correct][] 

Die php das Formular einzufügen ist wie folgt:

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

Sorry, dass dies eine so große Frage. Ich arbeite seit zwei Tagen daran und habe keine Ideen mehr.

Antwort

2

Ich bin mir nicht sicher, ob ich Ihr Problem verstanden habe (ich spreche kein Englisch fließend).

Aber hier müssen Sie eine andere Schleife statt dieses:

foreach ($_POST['answer'][$q_num] as $a) 
    { 
     $insert_answer->execute(
     array($q_id, $a['title'], $a['text'], $a['correct'])); 
    } 

wie:

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

Es hat nichts testen und es sollte nur funktionieren, wenn Sie immer Titel bekommen, Text und korrigieren Sie eine Antwort.

+0

danke für deine antwort, ich brauche leider die dateneingabe unabhängig von leeren titelfeldern. – superUntitled

+0

Haben Sie die Lösung getestet? Egal, ob der Titel leer ist, während das Textfeld existiert. –

+0

Das funktioniert! 'für ($ i = 0; $ i <10; ++ $ i) {echo" danke ";}' – superUntitled

0

Das Problem ist mit der zweiten Schleife (Antwort-Array). Versuchen Sie dies

+0

danke für deine Antwort, ich brauche leider die Daten einfügen unabhängig von leeren Titelfeldern. – superUntitled