2009-02-22 49 views
0

我知道这是一个类似的问题,已经问过,但我希望对问题有不同的答案。我有一个表单,您可以将新文章上传到数据库,所有的作品都是精美的,精彩的,光鲜的。表单使用文章类型的下拉菜单,我的下拉框中有新闻,八卦,旅行,表演和其他内容。当你上传到数据库时,它只会添加所选项目,比如说,在这种情况下,新闻。从数据库编辑时如何填充单选按钮或下拉框?

我需要用户能够编辑他们的文章,所以我需要用选定的项目填充下拉框。我认为在BUM中设置一个包含每个drop项目和一个ID的数据库表是一种痛苦。是否有将选定的项目设置为数据库中的值,然后仅使用if语句或其他内容来填充下拉框的其余部分?

希望是有道理的。我也认为使用单选按钮可能是一个解决方案,但我不能得到那个设置选定的按钮与数据库中的值。

回答

2

你可以做这样的事情:

// array of available options 
$available = array('news'=>'News', 'gosip'=>'Gosip', 'travel'=>'Travel', 'performances'=>'Performance'); 
// selected option value 
$selected = 'news'; 
echo '<select name="article-type">'; 
foreach ($available as $val => $label) { 
    echo '<option value="'.htmlspecialchars($val).'"'; 
    if ($val == $selected) { 
     echo ' selected="selected"'; 
    } 
    echo '>'.htmlspecialchars($label).'</option>'; 
} 
echo '</select>'; 
1

听起来像你想把文章类型放在表格中或沿着这些线条。

然后,您可以从表格中加载下拉列表,并在文章表格中存储对文章类型ID的引用。

在加号时,它应该使得检索给定类型的所有文章的速度比查找ID时快得多。

+0

是的,听起来合乎逻 – Cerebrus 2009-02-22 16:20:43

0
$options = array(,); 
$selection = filter_input(INPUT_POST, 'what'); 
$blah = true; //i don't know what to name this. 
foreach($options as $option) { 
    echo '....'; 
    if(isset($blah) && $option === $selection) { 
     echo 'selected="selected"'; 
     unset($blah); 
    } 
} 

这可能是最快的方法。另外,如果你正在追求速度,请确保充分利用echo's multiple parameters.

1

这听起来对我来说这更像是一个数据库设计问题。你的基本设计看起来有缺陷。我试图从你的问题中推断出这个问题,所以如果我的方式偏离轨道,请耐心等待。

这里是设计的相关部分,因为它应该是,IMO:

表:文章


ArticleID 
ArticleContent 
ArticleSubject (FK from Subjects) 
.. 
.. 
.. Other columns. 

表:受试者


SubjectID 
SubjectDescription 
.. 
.. 
.. Other columns. 

请注意,我打电话给第二个表的主题,以更好地说明我的意思。这样,每篇文章都会引用一篇文章类型(主题)。现在,当您检索“文章类型”下拉列表的数据时,您只需检索第二个表格中的所有行,然后根据当前选择(从第一个表格)设置选定项目。

相关问题