2014-03-25 24 views
0

我正在學習如何使用PDO,到目前爲止它一直很好。 有一個小問題,我似乎無法修復。使用PDO將多維POST保存到數據庫

我有一個帶2個字段的html表單,但點擊一個+添加了另外兩個字段。

Array ([domainname] => Array ([0] => google [1] => facebook [2] => stackoverflow) [domainextension] => Array ([0] => nl [1] => eu [2] => com)) 

我需要的是這個被插入到我的數據庫。顯然,「谷歌」屬於「NL」等等等等

$post = $_POST; 
try { 
    // Create a new PDO object (start database connection) 
    $dbh = new PDO('mysql:host=localhost;dbname=domains', $user, $pass); 

    // Build the query 
    $sql = "INSERT INTO domain_list (name, ext, status) 
      VALUES (:name,:ext,:status)"; 

    // Prepare the query 
    $q = $dbh->prepare($sql); 

    // Execute the query 
    $q->execute(array(':name' => $name, 
         ':ext' => $ext, 
         ':status' => $status)); 

    // End the database connection connection 
    $dbh = null; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

狀態:這只是將是單詞「激活」,這樣我就可以用它來選擇。

我知道我只需要創建一個foreach,以便所有行都更新到數據庫,但我不知道這樣做的最佳方式。

在此先感謝。

+0

這是什麼狀態的事情嗎? –

+0

@YourCommonSense我要用它來選擇狀態=非活動狀態的那個,所以我可以稍後設置一個不需要從數據庫中刪除它就不會被調用。 PS:爲什麼要刪除PDO標籤? – user1433479

+0

是的,你要麼做一個foreach,要麼你做一個超長的查詢。我不認爲有更優雅的方式.. –

回答

5

你應該嘗試像:

for ($i=0;$i<count($_POST['domainname']);$i++) { 
    $name = $_POST['domainname'][$i]; 
    $ext = $_POST['domainextension'][$i]; 
    $status = $_POST['status'][$i]; //Since you have not provided what $status is, this is my guess 
    $q->execute(array(':name' => $name, 
         ':ext' => $ext, 
         ':status' => $status)); 
} 
0

而不是重組對PHP數組我只是想更新的創建方式輸入,從而使該名和擴展名保存起來:

<input name="domain[0][name]"> 
<input name="domaon[0][ext]"> 
<input name="domain[1][name]"> 
<input name="domaon[1][ext]"> 

然後,您可以循環訪問$_POST["domain"]陣列,並自己使用屬性name/。

你也可以使用PHP的內置內建多個陣列迭代:

$mit = new MultipleIterator; 
$mit->attachIterator (new ArrayIterator ($_POST["domainname"]), "name"); 
$mit->attachIterator (new ArrayIterator ($_POST["domainext"]), "ext"); 
foreach ($mit as $domain) { 
    // $domain["name"]/$domain["ext"] 
} 
相關問題