Php 从SQL数据库填充多个列表

Php 从SQL数据库填充多个列表,php,mysql,Php,Mysql,这里已经有类似的问题,但没有一个完全适合我的情况。基本上,我想用MYSQL数据库中的相同数据填充数量可变的选择菜单。原因是我希望用户能够添加行以同时提交多个选项 为了避免对select菜单的每个实例执行MYSQL的登录-->读取,我创建了一个数组,在必要时用于填充菜单。问题是,它只在第一个阶段起作用;换句话说,PHP会在第一次读取后删除数组中存储的值 如果这个问题很基本,我很抱歉,我对PHP很陌生 以下是我目前的代码: 要访问MYSQL并定义变量“result”: <?php $

这里已经有类似的问题,但没有一个完全适合我的情况。基本上,我想用MYSQL数据库中的相同数据填充数量可变的选择菜单。原因是我希望用户能够添加行以同时提交多个选项

为了避免对select菜单的每个实例执行MYSQL的登录-->读取,我创建了一个数组,在必要时用于填充菜单。问题是,它只在第一个阶段起作用;换句话说,PHP会在第一次读取后删除数组中存储的值

如果这个问题很基本,我很抱歉,我对PHP很陌生

以下是我目前的代码:

要访问MYSQL并定义变量“result”:

<?php 
    $servername = "localhost";
    $username = "sonch_PUBLIC";
    $password = "sonch_PUBLIC";
    $dbname = "sonch_MAIN";
    date_default_timezone_set('Europe/Zurich');
    $date = date('Y-m-d');

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
        } 

    //START SEARCH BY VENUE
    $sql = "SELECT Name, City FROM Venue ORDER BY City";
    $result = $conn->query($sql);

    $conn->close();
?>  

要填充的第一个实例,请执行以下操作:

<select style="width:138px; text-align:center">
    <option selected>CHOOSE VENUE</option>';
    <?php
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
                echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
            }
        } 
    ?>
</select>

选择地点;;
到目前为止还不错。。。。但当我想用相同的代码填充后续菜单时,即通过重复:

<select style="width:138px; text-align:center">
    <option selected>CHOOSE VENUE</option>';
    <?php
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
                echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
            }
        } 
    ?>
</select>

选择地点;;
……它们是空的


建议?

您的第一个
循环时:

        while($row = $result->fetch_assoc()) {
            echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
        }

data\u seek
将结果集读取指针移动到指定的行号。在本例中,我们将其移回第0行,或结果集的开头。完成后,您可以在第一次
循环时再次完整读取结果集:

        while($row = $result->fetch_assoc()) {
            echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
        }

data\u seek
将结果集读取指针移动到指定的行号。在本例中,我们将其移回第0行,或结果集的开头。完成此操作后,您可以再次完整读取结果集

您没有创建要多次使用的数组。您正在处理一个结果集。一旦您使用了结果集,它就完成了。按照您的建议进行操作,并将结果集处理到一个数组中,然后重用该数组

<?php 
    $servername = "localhost";
    $username = "sonch_PUBLIC";
    $password = "sonch_PUBLIC";
    $dbname = "sonch_MAIN";
    date_default_timezone_set('Europe/Zurich');
    $date = date('Y-m-d');

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
        } 

    //START SEARCH BY VENUE
    $sql = "SELECT Name, City FROM Venue ORDER BY City";
    $result = $conn->query($sql);

    // If you have the MySQL Native Driver installed
    //$allRows = $result->fetch_all();

    // if you dont have the MySQL Native Driver installed you will have to do this
    $allRows = array();
    while ($row = $result->fetch_assoc() ) {
        $allRows[] = $row;
    }

    $conn->close();
?>  

一审

<select style="width:138px; text-align:center">
<option selected>CHOOSE VENUE</option>';
<?php
    foreach ($allRows as $row) {
        echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
    } 
?>
</select>

选择地点;;

只要您愿意多次重用该阵列,您就不会创建要多次使用的阵列。您正在处理一个结果集。一旦您使用了结果集,它就完成了。按照您的建议进行操作,并将结果集处理到一个数组中,然后重用该数组

<?php 
    $servername = "localhost";
    $username = "sonch_PUBLIC";
    $password = "sonch_PUBLIC";
    $dbname = "sonch_MAIN";
    date_default_timezone_set('Europe/Zurich');
    $date = date('Y-m-d');

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
        } 

    //START SEARCH BY VENUE
    $sql = "SELECT Name, City FROM Venue ORDER BY City";
    $result = $conn->query($sql);

    // If you have the MySQL Native Driver installed
    //$allRows = $result->fetch_all();

    // if you dont have the MySQL Native Driver installed you will have to do this
    $allRows = array();
    while ($row = $result->fetch_assoc() ) {
        $allRows[] = $row;
    }

    $conn->close();
?>  

一审

<select style="width:138px; text-align:center">
<option selected>CHOOSE VENUE</option>';
<?php
    foreach ($allRows as $row) {
        echo "<option>" . $row["Name"] . " - " . $row["City"] . "</option>";
    } 
?>
</select>

选择地点;;


只要您愿意多次重复使用该数组

所讨论的页面是:。。。。您可以看到,在第一个实例中填充了“选择场地”选项,但当添加新行时,菜单为空。您没有创建要多次使用的阵列。您正在处理一个结果集。一旦您使用了结果集,它就完成了。按照你的建议去做,将结果集处理成一个数组,然后重新使用ArrayTanks来获得答案!我以为我已经将“result”设置为数组。。。。。你能告诉我怎么改吗?有问题的那一页是:。。。。您可以看到,在第一个实例中填充了“选择场地”选项,但当添加新行时,菜单为空。您没有创建要多次使用的阵列。您正在处理一个结果集。一旦您使用了结果集,它就完成了。按照你的建议去做,将结果集处理成一个数组,然后重新使用ArrayTanks来获得答案!我以为我已经将“result”设置为数组。。。。。你能告诉我怎么改变吗?太棒了!成功了。我不得不承认,我并不完全明白为什么。我知道数据正在读取,无法再次读取,但这一行是如何改变的?
data\u seek
将结果集读取指针移动到指定的行号。在本例中,我们将其移回第0行,或结果集的开头。完成后,您可以再次完整阅读结果集。太棒了!成功了。我不得不承认,我并不完全明白为什么。我知道数据正在读取,无法再次读取,但这一行是如何改变的?
data\u seek
将结果集读取指针移动到指定的行号。在本例中,我们将其移回第0行,或结果集的开头。完成后,您可以再次完整阅读结果集。对不起,我显然在做一些愚蠢的事情。。。。。当我添加代码时,页面不再显示(=控制台中的$0)…如果我从您提供给我的代码中删除“fetch_all()”,一切都会正常工作。。。。但我不喜欢盲目地侵入代码,直到它达到我想要的程度……这毫无意义。如果删除
fetch_all()
,则数组将为空,并且将没有要输出的数据。。。。嗯,情节越来越复杂啊,我打赌我知道是什么。。。。您的系统没有安装MySQL本机驱动程序。因此
fetch_all()
将无法工作。两秒钟后我会修改accordinglyOk尝试foreach循环卸载结果集并创建arrayI抱歉,我显然在做一些愚蠢的事情。。。。。当我添加代码时,页面不再显示(=控制台中的$0)…如果我从您提供给我的代码中删除“fetch_all()”,一切都会正常工作。。。。但我不喜欢盲目地侵入代码,直到它达到我想要的程度……这毫无意义。如果删除
fetch_all()
,则数组将为空,并且将没有要输出的数据。。。。嗯,情节越来越复杂啊,我打赌我知道是什么。。。。您的系统没有安装MySQL本机驱动程序。因此
fetch_all()
将无法工作。两秒钟后,我将修改accordinglyOk,尝试foreach循环卸载结果集并创建数组