2013-03-29 37 views
-2

如何插入到MySQL從一個HTML選擇多個如何插入從HTML MySQL的選擇多

這是我的代碼HTML:

<select name="domaine[]" id="domaine" class="validate[required]" multiple> 
      <option></option> 
      <option value="WEB">WEB</option> 
      <option value="Java2EE">Java2EE</option> 
      <option value="android">android</option> 
      <option value="VB.Net">VB.Net</option> 
      <option value="iOS">iOS</option> 
      <option value="C++">C++</option> 
</select> 

這是我的PHP代碼:

try{ 
     $cdb=new PDO('mysql:host=localhost;dbname=source', 'root',''); 

} catch (Exception $e){ 
    die("erreur".$e->getMessage()); 

} 
$cin=$_SESSION['cin']; 

$rep=$cdb->prepare("insert into dev (cin,comp)values('$cin','".$_POST["domaine"]."')"); 
$rep->execute(); 
+0

Aaaaaaaah準備讓我的眼睛流血。請,[使用準備正確,沒有字符串插值或根本沒有](http://php.net/pdo) – Amelia

回答

-2
foreach ($_POST["domaine"] as $aSelectedOption){ 
$rep=$cdb->prepare("insert into dev (cin,comp)values('$cin','".$aSelectedOption."') "); 
$rep->execute(); 
} 

這將插入每個選項的條目

你也可以使用json_encode和json_decode,雖然我不會建議它。

+0

你有點建議它。 – Amelia

+1

這不是gona的工作,因爲它不會創建每個項目的記錄。 – Toretto

2

您使用PDO非常好,但您的代碼仍然很脆弱。 VALUES需要多個參數。

if (isset($_POST['domaine']) && is_array($_POST['domaine'])) { 
    //(?,?),(?,?),(?,?) for 3 domaine 
    $values = implode(',', array_fill(0, count($_POST['domaine']), '(?,?)')); 
    $query = "INSERT INTO dev (cin, comp) VALUES $values"; 
    $params = array(); 
    foreach ($_POST['domaine'] as $d) { 
     array_push($params, $cin, $d); 
    } 
    $rep = $cdb->prepare($query); 
    $rep->execute($params); 
} 

你也可以prepareINSERT聲明和遍歷execute,但我相信這是更有效的。

+0

爲我省去了在OP中將準備好的報表頁面放在答案中的麻煩。 ++。 – Amelia

+0

它的工作感謝.....當我想爲每個CIN更新,我想保存在一個案例是這樣的:web,java2EE,android ...怎麼樣?並感謝 – mamoud

+0

@mamoud哦,我希望你早點告訴我。只需使用INSERT INTO dev(cin,comp)VALUES(?,?)'和'$ params = array_merge($ cin,implode(',',$ _POST ['domaine']));' –

0

$_POST["domaine"]數組,所以把它「原樣」將導致數據庫記錄中的「數組」。 您需要決定哪種類型的「array-> string」方法最適合您的應用,並在插入數據庫之前使用它。

最簡單的方法是使用join($sep, $_POST['domaine'])serialize($_POST['domaine'])