2017-02-14 40 views
1

我更新,使用MySQL來PDO顯示Smarty的{html_options}的部分。這段代碼實際上適用於MySQL,但我不知道如何使用PDO得到相同的結果。如何使用PDO發送陣列使用它在智者的html_options 3.1.21

這是一個很好的實際工作代碼:

// Send states 
$q="SELECT id, state FROM states"; 
$data=$db->execute($q); 
$idStates=array(); 
$states =array(); 
for ($i=0; $i<sizeof($data);$i++) { 
    array_push($idStates,$data[$i]->id); 
    array_push($states,$data[$i]->state); 
} 
$smarty->assign('idStates',$idStates); 
$smarty->assign('states',$states); 

然後一切運作良好的.tpl文件

<select name="des_idState" class="form-control"> 
    <option>Select state</option> 
    {html_options output="$states" values="$idStates" selected=$data.idState} 
</select> 

我試圖與PDO做工程,並使用{foreach}很好,但我需要使用selected,我認爲使用Smarty的{html_options}最簡單,但我不知道如何從PDO發送數組。

$sql1="SELECT id, state FROM states"; 

$stmt = $dba->prepare($sql1); 
$stmt->execute(); 

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 

    $idStates = $row['id']; 
    $states = $row['state']; 

    $smarty->assign('idStates', $idStates); 
    $smarty->assign('states',$states); 
} 

我一直在試圖用這個代碼,顯示我使用echo $idStates . ' ' . $states . '<br>';數組,但它不會在{} html_options工作,沒有任何顯示,沒有錯誤,只是一個空白。

有人能幫助我嗎?

回答

0

我知道自從發佈這個問題已經有一段時間了,但是您是否曾經爲您的問題找到過解決方案?我相信你可以修改ID狀態變量是最小代碼修改的數組。

在下面的示例中,我在開頭添加了id和state數組聲明以確保數組爲空(作爲下一步的預防措施)。然後,我將$idStates=更改爲$idStates[]=$states=$states[]=,這會將當前值添加到每個循環中的這些數組。最後,我將smarty變量賦值移至while循環之後,以便數組完全填充。這裏是修改後的代碼:

$sql1="SELECT id, state FROM states"; 

$stmt = $dba->prepare($sql1); 
$stmt->execute(); 

$idStates = array(); 
$states = array(); 

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 

    $idStates[] = $row['id']; 
    $states[] = $row['state']; 
} 

$smarty->assign('idStates', $idStates); 
$smarty->assign('states',$states); 

我還在下面提供了一個替代解決方案,它應該返回相同的數據。在本例中,我使用$stmt->fetchAll而不是$stmt->fetch一次獲取所有行,然後將它們存儲在關聯數組中。然後在聲明smarty賦值時使用array_column,該賦值將id和state列與$rows關聯數組分開。這會導致代碼少一些而又不犧牲可讀性:

$sql1 = "SELECT id, state FROM states"; 

$stmt = $dba->prepare($sql1); 
$stmt->execute(); 

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

$smarty->assign('idStates', array_column($rows, 'id')); 
$smarty->assign('states', array_column($rows, 'states'));