使用php中的数据库创建多个动态下拉列表

时间:2014-02-08 18:28:14

标签: php mysql

嘿伙计们,我正在为我的大学开发一个小项目,这包括一张桌子,一张名为prizemaster的奖品,prizename以及可以由名为studentmaster的工作人员提名的候选人姓名。这是我的PHP代码:

    $result = mysqli_query($con,"SELECT * FROM prizemaster");
    $result1 = mysqli_query($con,"SELECT * FROM studentmaster");
    echo "<table border='1'>
    <tr>
    <th>Prize ID &nbsp &nbsp &nbsp &nbsp</th>
    <th>Prize Name &nbsp &nbsp &nbsp &nbsp </th>
    <th>Name &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp </th>
    </tr>";
    while($row = mysqli_fetch_array($result))
    {
    echo "<tr>";
    echo "<td>" . $row['prizeid'] . "</td>";
    echo "<td>" . $row['name'] . "</td>";
    echo "<td><select>";
    while($drop = mysqli_fetch_array($result1))
    {
    echo "<option>" . $drop['name'] . "</option>";
    }
    echo "</select></td>";
    echo "</tr>";
    }
    echo "</table>";

表已成功创建,但似乎有问题。在我的第一个记录中下拉是好的,但在所有其他记录中,下拉列表是空的。我该如何解决这个问题?任何人都可以清楚地解释代码,因为我是php的新手。

这是我的问题:

https://imagizer.imageshack.us/v2/820x321q90/838/yj63.png

2 个答案:

答案 0 :(得分:0)

代码缩进很重要!你的问题是嵌套的while循环。

while($drop = mysqli_fetch_array($result1))
{

第一次完成后,将无法获取更多结果。你可以做的是将结果保存到第一个while循环之外的数组

$ddOptions = array();
while($drop = mysqli_fetch_array($result1))
    $ddOptions[] = $drop;

然后在

中循环遍历另一个数组
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['prizeid'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "<td><select>";
    foreach($ddOptions as $drop)
    {
        echo "<option>" . $drop['name'] . "</option>";
    }
echo "</select></td>";
echo "</tr>";
}
echo "</table>";

答案 1 :(得分:0)

我想我理解这个问题

您正在顶部执行2个查询,循环执行第一个查询并在循环第二个查询内部执行。

问题是当你把第二个查询循环到第二个查询里面时,第二个查询被设置为结束,而下一个迭代第一个第二个将得不到任何东西

您可能需要使用mysqli_data_seek

while($row = mysqli_fetch_array($result)){
    echo "<tr>";
    echo "<td>" . $row['prizeid'] . "</td>";
    echo "<td>" . $row['name'] . "</td>";
    echo "<td><select>";
    while($drop = mysqli_fetch_array($result1)){
        echo "<option>" . $drop['name'] . "</option>";
    }
    mysqli_data_seek($result1, 0);
    echo "</select></td>";
    echo "</tr>";
}