2012-06-10 74 views
0

我目前正在嘗試以下代碼:通行證SQL陣列通過Zend_Form_Element_Select

$sql = $db->query("select id,username,fullname from userss ORDER BY fullname ASC"); 
     while($row = $sql->fetch()) { 
      $username[] = $row['username']; 
     } 
     $form = new Zend_Form(); 
     $form->setAction('/index/change') 
      ->setMethod('post'); 

     $element = new Zend_Form_Element_Select('foo', array(
      'multiOptions' => array(
       $username, 
       ))); 
     $form->addElement($element); 
     echo $form; 

期望的結果是示出了元件的<option value='username'>Full Name</option>形式<select>其中username是從SQL username和全名是從SQL fullname

眼下,它顯示<option value='0'>Full Name</option>

我不太清楚如何指定數組的第一個部分,所以它基本上將用戶名=>全名

有什麼建議?謝謝!

回答

3

要設置Zend_Form_Element_Select中選項的值,數組鍵定義值,數組值定義用戶看到的select中的文本。

試試這個:

$element = new Zend_Form_Element_Select('foo', array(
    'multiOptions' => array(
     $username => $fullname, 
     $username2 => $fullname2, 
))); 

你正在看到0,因爲數組沒有字符串鍵,它默認爲使用數字索引數組鍵的值。

鑑於你的代碼,你可以這樣做:

$username = array(); 

while($row = $sql->fetch()) { 
    $username[$row['username']] = $row['fullname']; 
} 
+0

感謝您的迴應!我給了這個鏡頭,但是在第一個代碼中你的意思有點困惑。變量$ fullname和$ username2和$ fullname2來自哪裏?我所擁有的唯一變量是在while循環中定義的$ username。 –

+0

這只是一個例子,如果您有多個項目(爲選擇框設置鍵=>值對),該數組可能看起來像什麼樣子。你可以用你發佈的那個循環替換你的循環,並保持'multiOptions'=> array($ username)'原樣;或者使用初學者的答案,因爲如果你不需要任何用戶id,fetchPairs也是一個很好的解決方案。 – drew010

+0

啊,謝謝。這個問題實際上是我在這篇文章中簡化了我的查詢(fullname不是一個實際的列......我需要連接兩個表......因此$ username變量仍然變爲0) –

2

爲了填充選擇元素更容易ZF提供fetchPairs

 $sql = "select username,fullname from userss ORDER BY fullname ASC"; 
     $db = Zend_Db_Table::getDefaultAdapter(); 
    $select = new Zend_Form_Element_Select('foo'); 
    $select->setMultiOptions($db->fetchPairs($sql)); 

這種方式把你從迭代的數據(,while循環)自己。