作为我正在创建的HTML表单的一部分,我希望有一个下拉列表,它将列出我数据库中的所有用户名。
我认为下面的代码可以解决这个问题,但是下拉列表是空的 - 有人可以帮我解决我做错的事吗?感谢。
<tr>
<td>Owner</td>
<td>
<select name="owner">
<?php
$sql = mysqli_query($connection, "SELECT username FROM users");
while ($row = $sql->fetch_assoc()){
?>
<option value="owner1"><?php echo $row['username']; ?></option>
<?php
// close while loop
}
?>
</td>
</tr>
答案 0 :(得分:31)
我的猜测是你遇到问题,因为你没有在循环后关闭你的select-tag。这可以吗?
<select name="owner">
<?php
$sql = mysqli_query($connection, "SELECT username FROM users");
while ($row = $sql->fetch_assoc()){
echo "<option value=\"owner1\">" . $row['username'] . "</option>";
}
?>
</select>
答案 1 :(得分:15)
下面的代码很好..它是由其他人命名的 aaronbd in this forum
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database')
or die ('Cannot connect to db');
$result = $conn->query("select id, name from table");
echo "<html>";
echo "<body>";
echo "<select name='id'>";
while ($row = $result->fetch_assoc()) {
unset($id, $name);
$id = $row['id'];
$name = $row['name'];
echo '<option value="'.$id.'">'.$name.'</option>';
}
echo "</select>";
echo "</body>";
echo "</html>";
?>
答案 2 :(得分:6)
我建议按照一些调试步骤进行操作。
首先直接针对数据库运行查询。确认它会带来结果。即使有这样简单的事情,你也会发现你犯了一个错误,或者桌子是空的,或者有些奇怪。
如果上面没问题,那么尝试循环并直接将$ row的内容回显到HTML中,看看你在mysql_query中找到了什么 - 看看它是否与你在DB中直接得到的相匹配。
如果您的数据输出到页面上,请查看HTML格式中出现的问题。
但是,如果$row
没有输出任何内容,那么找出mysql_query无法正常工作的原因,例如用户是否有权查询该数据库,您是否拥有开放的数据库连接,网络服务器是否可以连接到数据库等[这些行上的内容通常可能是一个问题]
稍微更改您的查询
$sql = mysql_query("SELECT username FROM users") or die(mysql_error());
可能有助于突出显示任何错误:php manual
答案 3 :(得分:3)
<select name="owner">
<?php
$sql = mysql_query("SELECT username FROM users");
while ($row = mysql_fetch_array($sql)){
echo "<option value=\"owner1\">" . $row['username'] . "</option>";
}
?>
</select>
答案 4 :(得分:2)
<?php
$query = "select username from users";
$res = mysqli_query($connection, $query);
?>
<form>
<select>
<?php
while ($row = $res->fetch_assoc())
{
echo '<option value=" '.$row['id'].' "> '.$row['name'].' </option>';
}
?>
</select>
</form>
答案 5 :(得分:0)
请改用OOP概念。用函数创建一个类
CREATE DEFINER=`root`@`localhost` PROCEDURE `findPaths`()
BEGIN
WITH RECURSIVE descendants AS
(
SELECT e.activity, CAST(e.activity AS CHAR(500)) AS path, n.cost as total_cost
FROM edges e JOIN nodes n
ON e.activity=n.code
WHERE e.activity='A'
UNION ALL
SELECT e.activity, CONCAT(d.path, ',', e.activity), d.total_cost+(SELECT cost FROM nodes WHERE code=e.activity)
FROM descendants d, edges e
WHERE e.parent=d.activity
)
SELECT * FROM descendants WHERE activity='M' OR activity='N' ORDER BY total_cost;
END
然后使用类对象在代码中调用函数
class MyClass {
...
function getData($query) {
$result = mysqli_query($this->conn, $query);
while($row=mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if(!empty($resultset))
return $resultset;
} }