2016-01-13 120 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 更改数据类型您还可以更新以同样的方式对国家的价值。