2012-10-18 82 views
0

我有一個選擇框的形式,並從數據庫女巫的價值已被選中之前。是的,我需要這個價值女巫選擇蜜蜂顯示爲最後選擇內部形式。我嘗試使用PHP DOM,但我沒有得到任何地方。PHP - 用價值表格數據庫填充選擇框

因此,這裏的HTML:

<select name="conf_1"> 
    <option value="Y">Yes</option> 
    <option value="N">No</option> 
</select> 
<select name="conf_2"> 
    <option value="text">text</option> 
    <option value="alsotext">alsotext</option> 
</select> 

現在我想顯示所選擇的選項女巫存儲在陣列像這樣:

$confs = array([1] => N, [2] => text); 

做一些代碼:

loop{ 
    <option value="$confs[$i]">$confs[$i]</option> has to be appended to <select name="conf_$i"> 
} 

現在我找不到辦法做到這一點。我試過使用PHP DOM,但我不知道如何通過名稱屬性選擇元素,然後循環低谷,所以我不能做一個真正的PHP示例。我只是不知道從哪裏開始。

如果有人只是有辦法做到這一點,請賜教!?

與此代碼由@Markus啓發做了我。:

$dom = new DOMDocument(); 
    $dom->loadHTML($form); 
    $xPath = new DOMXPath($dom); 

    foreach ($dom->getElementsByTagName('select') as $select) { 
     $name = $select->getAttribute('name'); 
     $name = str_replace('conf_', '', $name); 

     foreach($xPath->query('./option', $select) as $option) { 
      if ($option->getAttribute('value') == $confs[$name]) { 
       $option->setAttribute('selected', 'selected'); 
      } 
     } 
    } 

    $form = $dom->saveHTML($dom); 

    echo $form; 
+0

或者你也可以做到這一點通過JavaScript – ianace

+0

如果你已經擁有的價值觀,一個簡單的循環會工作。 –

回答

1

我喜歡孔模板加載到一個DOM並對其進行修改:(!代碼未測試)

$dom = new DOMDocument(); 
$dom->loadXML('<yourTemplateXML />'); 
$xPath = new DOMXPath($dom); 
$data = array('conf1' => 'N', 'conf2' => 'text'); 


foreach ($xPath->query('//select') as $select) { 
    foreach($xPath->query('./option', $select) as $option) { 
     if ($option->getAttribute('value') == $data[$select->getAttribute('name')]) { 
      $option->setAttribute('selected', 'selected'); 
     } 
    } 
} 

echo $dom->saveXML(); 

我寫了一個類,它可以處理所有字段類型。請注意,這只是樣本代碼。在生產中,如果數據數組中的鍵存在,則應該小心。

這有一個很好的副作用:因爲你設置了通過DOM的價值,它可以保護您的形式從XSS

+0

humm看起來像它,但是我得到這個錯誤 - 致命錯誤:調用未定義方法DOMDocument :: query()在C:\ usb webserver \ root \ tcm \ engine中。在線372的PHP,好吧我修好了它我使用getElementsByTagName循環槽所有選擇元素,然後我用你的xPath方法來處理選擇 – botenvouwer

+0

對不起,不測試代碼... :) 要getElementsByTagName是反正在這種情況下更好,因爲速度更快; xPath是過度殺傷... –

+0

不要擔心你播下了正確的方向,我可以在這裏按下表格。謝謝您的回答。 – botenvouwer

2

像這樣?

$confs_arr = array("1" => N, "2" => text,"3" => N4, "4" => text3,"5" => N5,"6" => text7); 
echo "<select name='option' id='option'>"; 
foreach($confs_arr as $keys=>$confs){ 

echo "<option value='".$confs."'>".$confs."</option>"; 

} 
echo "</select>"; 
+0

不,你看到表單不是手動創建的,所以我有$ form,然後我必須操作它,所以選擇值女巫存儲在數組中將被歸檔。這是因爲表單是動態的,並且存在形式發生器女巫可以創造新的價值形式。 – botenvouwer

+0

@sirwilliam所以如果你得到數組中的所有值,上面的代碼將起作用。你只需要傳遞值 – Sibu

+0

這是他們必須插入現有的女巫存儲在數據庫加載到字符串中的問題。每次表格都很不自然,並且有不同的價值觀念。但我已經用@Markus I的幫助修復了它。 – botenvouwer

0

下面是類似於你問的一個示例代碼:

<?php 

$categories = $rows; //array from database 
foreach($rows as $row){ 
    if($row['name'] == $_POST['category']){ 
      $isSelected = ' selected="selected"'; // if the option submited in form is as same as this row we add the selected tag 
    } else { 
      $isSelected = ''; // else we remove any tag 
    } 
    echo "<option value='".$row['id']."'".$isSelected.">".$row['name']."</option>"; 
} 
?> 

$_POST['category']是先前選定的用戶,它可以是任何東西,而不僅僅是$_POST

基於這個例子,你可以修改你的代碼。

如果用戶以前選擇"text",然後將HTML代碼應該是:

<select name="conf_2"> 
    <option value="text" selected="selected">text</option> 
    <option value="alsotext">alsotext</option> 
</select> 

selected="selected"<option>標籤,而且此項目將被選擇作爲默認值。

希望這有助於

相關問題