2016-07-07 25 views
1


Ich habe es mit einem PHP-Formular zu tun, das Checkboxen und eine MySQL-Datenbank enthält. Endlich habe ich erreicht, mehrere Zeilen, eine für jedes ausgewählte Element, einzufügen, indem ich das Array überschlinge.
Aber jetzt muss ich mich einem anderen Problem stellen: In meiner DB habe ich eine Haupttabelle, um die Auswahlfragen zu speichern, und eine weitere Tabelle, um die Antworten aus den Kontrollkästchen zu speichern.
Ich möchte zuerst die Abfrage ausführen die Ein-Wahl-Antworten in die Haupttabelle (eine Zeile pro Formular) einfügen, so dass es eine serielle ID generiert.
Und zweitens, um diese ID zurückzubekommen und sie mit jeder in die Checkbox-Tabelle eingefügten Zeile zu verknüpfen, um die beiden Tabellen über diese ID zu verknüpfen.
Ist das möglich bitte und wie soll ich tun?

Wie fügt man Daten aus einem PHP-Formular in eine MySQL-Datenbank mit Fremdschlüsseln ein?

Hier wird der HTML-Code:

<input type="checkbox" name="nature_contact[]" value="1"><label >Phone</label><br/> 
<input type="checkbox" name="nature_contact[]" value="2"><label >Mail</label><br/> 
<input type="checkbox" name="nature_contact[]" value="3"><label >Visit</label><br/> 
<input type="checkbox" name="nature_contact[]" value="4"><label >Unk</label> <br/><br/> 
<input type="text" name="coord"/> 
      <br/> 
<input type="text" name="tel"/> 
      <br/><br/>    
<input type="submit" name="add" value="SEND"/> 

Und hier der PHP-Teil:

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['coord'])) { 
      $coord=$_POST['coord']; 
     } 
     else { $coord = ''; 
     } 
     if(isset($_POST['tel'])) { 
      $tel=$_POST['tel']; 
     } 
     else { $tel = ''; 
     }   
    $query="INSERT INTO nmp_mfs.general (coord, tel) VALUES ('".$coord."', '".$tel."')"; 
    $statement_gnl = $pdo->prepare($query); 
    $statement_gnl->execute(); 
    } 
} 
catch(PDOException $e) { 
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); 
    die($msg); 
} 

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['nature_contact'])) { 
      $sql = "INSERT INTO nmp_mfs.t_temporaire (nature_contact) VALUES ".rtrim(str_repeat('(?),', count($_POST["nature_contact"])), ','); 
      $statement = $pdo->prepare($sql); 
      $count = 1; 
      foreach($_POST["nature_contact"] as $nature_contact) { 
       $statement->bindValue($count++, $nature_contact); 
      } 
      $statement->execute(); 
     } 
    } 
} 
catch(PDOException $e) { 
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); 
    die($msg); 
} 

Antwort

0

Ja, das ist möglich.

Sie müssen die letzte Eingabe-ID des Haupttabellenzeile wie:

$lastInsertedID = $db->lastInsertId(); 

1.) Legen Sie die Frage in der Datenbanktabelle (Haupt-)

2.) die letzte Eingabe id Hole ($ lastInsertedID)

3.) Fügen Sie Antworten zu der Frage in die Antworttabelle ein und geben Sie die zuletzt eingefügte ID an.

$query = "INSERT INTO nmp_mfs.t_temporaire (questionID, nature_contact) 
VALUES ($lastInsertedID, $nature_contact)"; // Example 

4.) Wählen Sie die IDs Ihrer Fragen.

5.) Holen Sie sich die entsprechenden Antworten:

$query = "SELECT awnsers WHERE question_id = questionID"; // Simple example 
+0

Vielen Dank! Ich habe versucht mit (max id), aber lastInsertId() ist viel zuverlässiger. Allerdings muss ich diesen Wert in die Funktion hinzufügen: .trrim (str_repeat ('(?),', Count ($ _ POST ["nature_contact"])), ','), und das ist schwierig für mich. Ich versuchte mit str_repeat ('($ lastID,?),' Aber es gibt eine Zeichenkette anstelle des Wertes von $ lastID zurück. Ist es möglich zu lösen? – RemiC

+0

Es FUNKTIONIERT! Ich habe Zitate vergessen in: str_repeat ('('. $ LastID . ",?)" – RemiC

0

Um Ihre Daten synchronisiert stellen Sie sicher, Sie Transaktion in mysql.Sorry für mein schlechtes Englisch verwenden können, möchte ich etwas tun, nur nützlich.