2016-01-13 117 views
0

我正在使用多選下拉列表在我的項目中。現在我想更新我的mysql數據庫中的多選下拉數組值。我成功地在數據庫中添加了多選參數值,但是當我嘗試更新時,我得到了錯誤的結果。例如,如果數組中的值是這樣的數組([0] => A [1] => B)並且我運行一個循環來更新數據庫中的值,然後更新值始終爲數組的第二個值(例如[ 1] => B)。我不知道問題出在哪裏請幫助..下面是我的代碼..如何在MySQL中更新多選下拉列表php

HTML

<select name="countries[]" id="countries" multiple="multiple" placeholder="Which countries did you sell your products in *" required> 
<option value="" disabled="disabled" selected>Which countries did you sell your products in *</option> 
<option value="Afghanistan">Afghanistan</option> 
<option value="Albania">Albania</option> 
<option value="Algeria">Algeria</option> 
<option value="American Samoa">American Samoa</option> 
<option value="Andorra">Andorra</option> 
<option value="Angola">Angola</option> 
<option value="Anguilla">Anguilla</option> 

PHP

$countries = $_POST['countries']; 
$user_id = $_SESSION['user_session']; 
$size=sizeof($countries); 
for($i=0;$i<$size;){ 
    $count = $trade_info->update_supplier_last_financial_count($user_id, $countries[$i]); 
    $i++; 
} 

功能(update_supplier_last_financial)

public function update_supplier_last_financial_count($user_id,$last_count){ 

    $db = db::getInstance();  
    $pdo = $db->getConnection(); 

    try { 
     $stmt = $pdo->prepare("UPDATE supplier_last_financial_countries SET countries = :last_count WHERE user_id = :user_id "); 

     $stmt->bindparam(":user_id", $user_id); 
     $stmt->bindparam(":last_count", $last_count); 

     $stmt->execute(); 

     return $stmt; 
    } 

    catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 

} 

在此先感謝...

+0

你for循環將是'for($ i = 0; $ i <$ size; $ i ++){'並且移除內部循環 – Saty

+0

@Saty ..'謝謝你的回覆,但它不起作用。相同的結果.. –

+0

你有什麼錯誤? – Saty

回答

1

您的查詢是一遍又一遍地更新同一行。它受WHERE限制,但WHERE$user_id)的條件從未改變。

像這樣的東西可能會奏效:

$countries = $_POST['countries']; 
$user_id = $_SESSION['user_session']; 
foreach ($countries as $country) { 
    $count = $trade_info->update_supplier_last_financial_count($user_id, $country); 
} 

public function update_supplier_last_financial_count($user_id,$last_count) { 
    $db = db::getInstance();  
    $pdo = $db->getConnection(); 

    try { 
     $stmt = $pdo->prepare("DELETE FROM supplier_last_financial_countries WHERE user_id = :user_id "); 
     $stmt->bindparam(":user_id", $user_id); 
     $stmt->execute(); 

     $stmt = $pdo->prepare("INSERT INTO supplier_last_financial_countries SET countries = :last_count, user_id = :user_id "); 
     $stmt->bindparam(":user_id", $user_id); 
     $stmt->bindparam(":last_count", $last_count); 
     $stmt->execute(); 

     return $stmt; 
    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 
+0

我認爲你是正確的,它總是一次更新同一行! – Saty

+0

@ miken32感謝您的回覆。然後,我如何更新數據庫中的多個數組值相同$ user_id?謝謝。 –

+0

@Saty然後,我應該如何使用兩個數組值更新相同的$ user_id?謝謝。 –

0

如果需要多個國家存儲在列,你應該將它們存儲爲一組(即逗號的字符串分隔值)。嘗試這個。

$countries = $_POST['countries']; 
    $user_id = $_SESSION['user_session']; 
    $countriesValues = implode(',', $countries);//store country values as a set 
    $count = $trade_info->update_supplier_last_financial_count($user_id, $countriesValues); 

對於這一點,你需要從intvarchar 更改數據類型您還可以更新以同樣的方式對國家的價值。