我正在研究一个论坛软件,我正在做管理面板。我有一个部分与所有当前论坛的下拉框。它有效,但它没有显示表格中的第一个论坛。
这是我的代码
$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>
我还想知道如何检索从列表中选择的项目?
答案 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>
标记之间的值。