我有一个正在运行的编辑记录页面,但是我遇到了一个小问题,其字段显示为从数据库引用关联值列表的选择下拉列表。
我在数据库中有一些带有下拉列表的字段,但用户可以输入一个不在值列表中的值,这是预期的正常行为。但是我在网上显示这个问题。以下是其中一个字段的代码:
<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>
当字段中的值与valuelist中的某个选项匹配时,此方法很有效。但是,当字段为空或不匹配时,存在问题。如果该字段为空,我会自动显示第一个值列表选项 - 我可以通过添加一个空白选项来避开它。
如果字段中的值与值列表的选项不匹配,则它也不会出现 - 我还可以在所有值列表项之前显示顶部的值但是如果值与a值相同值列表项将出现两次:一次在顶部,然后在列表中的正常位置,这也是不理想的。我希望如果该值是值列表的成员,那么它将在列表中的正常位置被选中,这是上述代码所实现的。
之前有人提到这个场景并有任何指示吗?
谢谢, 史蒂夫
答案 0 :(得分:1)
你是什么意思“领域”,你的意思是$record->getField('category')
?如果您想要的是将该值包含在您的选择列表中,即使它不是$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>