HTML下拉列表未显示表格中的第1项

时间:2011-12-03 16:24:28

标签: php html sql

我正在研究一个论坛软件,我正在做管理面板。我有一个部分与所有当前论坛的下拉框。它有效,但它没有显示表格中的第一个论坛。

这是我的代码

$select_forums = "SELECT id,name FROM forums";
$run_select_forums = mysql_query("$select_forums");
$row = mysql_fetch_array($run_select_forums, MYSQL_ASSOC);

<form action='index.php' method='post'>
<select>
<?php while ($row = mysql_fetch_array($run_select_forums, MYSQL_ASSOC)) { ?>
<option value="<?php echo $row["id"] ?>" name="selected"><?php echo $row["name"] ?>      
</option>
<?php } ?>
</select><br/>
<input type='submit' name='submitdelete' value='Delete' />
</form>

我还想知道如何检索从列表中选择的项目?

2 个答案:

答案 0 :(得分:5)

它没有显示第一个,因为您在mysql_fetch_array()循环开始之前调用while一次:

$select_forums = "SELECT id,name FROM forums";
$run_select_forums = mysql_query("$select_forums");
// Don't call mysql_fetch_array() here...
$row = mysql_fetch_array($run_select_forums, MYSQL_ASSOC);

此外,您应该将这些值包含在属性中的htmlentities()和属性外的htmlspecialchars()中,以便将它们作为HTML属性(以及针对XSS攻击)正确地转义它们

<option value="<?php echo htmlentities($row["id"], ENT_QUOTES) ?>" name="selected"><?php echo htmlspecialchars($row["name"]) ?>      
</option>

我理解你的$row['id]可能是一个不需要转义的整数,但这是一个很好的习惯。

答案 1 :(得分:2)

您的第一个$row = mysql_fetch_array($run_select_forums, MYSQL_ASSOC);从表格中拉出第一行。当您开始while循环时,mysql_fetch_array会选择下一行。解决这个问题的最简单方法就是不要进行第一次调用。

要检索所选元素,请为select标记赋予name属性,它将出现在服务器脚本中的$ _POST数组中,该数组接受来自客户端的提交 - 在本例中为index.php,因此:

与html一样

<select name="forum">
<option>...</option>
...
</select>

在php中,$_POST['forum']将包含所选项目的<option></option>标记之间的值。