HTML下拉列表没有显示表中的第一项


HTML dropdown list not showing 1st item in table

我现在正在开发一个论坛软件,我正在做管理面板。我有一个部分与所有当前论坛的下拉框。它工作,但它不显示表中的第一个论坛。

这是我的代码

$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>

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

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

$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]可能是一个不需要转义的整数,但这是一个好习惯。

第一个$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>标记之间的值