2012-02-16 51 views
0

我有一个工作的编辑记录的页面,但我有一个小问题与被显示为选择下拉从数据库中引用的相关值列表列出领域。PHP和HTML表单选择列表

我在下拉列表中,但用户数据库中的某些字段可以输入一个值不在值列表,预计正常行为上。不过,我在网上显示此问题时遇到问题。下面是其中的一个字段代码:

<select name="category"> 
<?php 
foreach($categories as $category) { 
    $selected = ""; 
    if($category == $record->getField('category')){ 
      $selected = " selected"; 
    } 
    $category = htmlspecialchars($category); 
    ?> 
    <option value="<?php echo $category; ?>"<?php echo $selected; ?>><?php echo   $category; ?></option> 
<?php 
} 
?> 
</select> 

这种运作良好,当字段中的值相匹配的来自值列表的选项之一。但是,如果该字段为空或不匹配,则会出现问题。如果该字段为空,我会自动显示第一个值列表选项 - 我可以通过添加一个空白选项来绕过该选项,这很好。

如果字段中的值不匹配的值列表中的选项没有出现任何 - 我也可以将所有的值列表项之前显示在顶部的值,但如果该值是一样的一个值列表项会出现两次:一次在顶部,然后在列表中的正常位置,这也是不理想的。我想它,如果值是值列表的成员则选择了它在这上面的代码实现了什么列表正常位置。

任何上涨之前,这一幕并有任何指针?

谢谢你,史蒂夫

回答

1

你是怎么通过 “场” 的意思是,你的意思是$record->getField('category')?如果你想要的是已经包含在SELECT列表中值,即使它不是$category数组中的一个条目,那么这样做:

<select name="category"> 

    <?php 

     $output = ""; 
     $selected = false; 

     foreach ($categories as $category) { 

      $output .= "<option value=\"$category\""; 

      if ($category == $record->getField('category')) { 
       $selected = true; 
       $output .= " selected"; 
      } 

      $output += ">$category</option>"; 
     } 

     if (!$selected) { 
      $chosen = $record->getField("category"); 
      $output = "<option value=\"$chosen\" selected>$chosen</option>" . $output; 
     } 

     echo $output; 

    ?> 

</select> 
+0

感谢您的答复 - 是在$值record-> getField('category')变量可能/可能不存在于$ categories数组中。我试过你的代码,它没有错误,但我只得到这个输出:你能看到PHP代码中的任何语法错误或其他我可能错过的东西? – user982124 2012-02-16 15:11:39

+0

我“米不知道是否使用了‘+ =’操作符是在这里正确的? – user982124 2012-02-16 15:45:43

+0

是的,你是对的,应该是'='。使用Javascript,道歉混合起来。 – caleb 2012-02-16 18:43:11