我现在正在开发一个论坛软件,我正在做管理面板。我有一个部分与所有当前论坛的下拉框。它工作,但它不显示表中的第一个论坛。
这是我的代码
$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>
标记之间的值