2016-07-07 43 views
1


我正在處理一個包含複選框和MySQL數據庫的PHP表單。我終於實現了通過遍歷數組插入多行,每個行選擇一個項目。
但現在,我不得不面對另一個問題:在我的數據庫中,我有一個主表來存儲單選題和另一個表來存儲複選框的答案。
我想先執行查詢插入主表(單表格每行一個選擇答案),以便它生成一個序列號。
其次,要取回此ID並將其與每個插入到複選框表中的行相關聯,以便通過此ID鏈接這兩個表。
請問我該怎麼辦?

如何將數據從PHP表單插入到具有外鍵的MySQL數據庫中?

這裏的HTML代碼:

<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"/> 

這裏PHP的一部分:

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

回答

0

是的,這是可能的。

你需要像主錶行的最後插入的ID:

$lastInsertedID = $db->lastInsertId(); 

1)將在數據庫表中的問題(主要)

2)獲取最後插入的ID( $ lastInsertedID)

3.)在答案表中插入與問題相關的答案,並提供最後插入的ID。

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

4.)選擇您的問題的ID。

5)獲得相應的答案:

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

謝謝!我試着用(最大id),但lastInsertId()更可靠。但是,我需要將此值添加到函數中:.rtrim(str_repeat('(?),',count($ _ POST [「nature_contact」])),','),這對我來說很棘手。我嘗試了str_repeat('($ lastID,?)'),但是它重新調用了一個字符串,而不是$ lastID中的值。是否可以解決? – RemiC

+0

它工作!我忘了引號:str_repeat('('。$ lastID ',?),' – RemiC

0

爲了確保您的數據同步,可以在mysql.Sorry使用交易,我的英文不好,我只想做一些有用的東西。

相關問題