Php 函数从数据库表填充第一个列表框,但不填充第二个列表框

Php 函数从数据库表填充第一个列表框,但不填充第二个列表框,php,mysql,html,Php,Mysql,Html,函数popList()接受两个参数—列名和表名。 基本上,popList()函数连接到一个mysql服务器,然后连接到一个数据库,并构建一个sql查询,根据传递给函数的内容检索数据,以用于填充页面上的列表框 只有一个listbox可以与函数配合使用,但如果页面上有第二个listbox使用传递的不同参数(列名和表名)再次调用函数,则该listbox将显示为空,并在页面源中第一个填充的listbox的源下打印以下内容: 警告:mysql_connect()[function.mysql connec

函数
popList()
接受两个参数—列名和表名。 基本上,
popList(
)函数连接到一个
mysql
服务器,然后连接到一个数据库,并构建一个sql查询,根据传递给函数的内容检索数据,以用于填充页面上的列表框

只有一个listbox可以与函数配合使用,但如果页面上有第二个listbox使用传递的不同参数(列名和表名)再次调用函数,则该listbox将显示为空,并在页面源中第一个填充的listbox的源下打印以下内容:

警告:mysql_connect()[function.mysql connect]:访问 中的用户“ODBC”@“localhost”(使用密码:否)被拒绝 第7行的C:\xampp\htdocs\test未连接: 拒绝访问用户“ODBC”@“localhost”(使用密码:否)

我在两个调用中使用相同的连接凭据,它们是默认的localhost、root和no password(纯粹用于测试目的)

为什么会这样

编辑*(来源)*:

引用你的话,

我在两个调用中使用相同的连接凭据,它们是默认的localhost、root和no password(纯粹用于测试目的)

由于您提到的根用户没有密码,在错误中,它是:
拒绝访问用户“ODBC”@“localhost”(使用密码:否)
,这意味着您实际上是在尝试连接没有密码的用户
ODBC
,我认为这是有密码的。

引用您的话

我在两个调用中使用相同的连接凭据,它们是默认的localhost、root和no password(纯粹用于测试目的)


由于您提到的根用户没有密码,在错误中,它是:
拒绝用户“ODBC”@“localhost”(使用密码:否)
,这意味着您实际上是在尝试连接没有密码的用户
ODBC
,我认为这是一个密码。

require\u once按照它所说的做:它需要一次。第一次调用
popList
时,
credentials.php
中的所有内容都会转储到函数的作用域中。第二次调用
popList
时,不会发生任何事情,因为在此运行期间已需要一次
credentials.php


您应该在某个地方有一个配置对象,而不是在一个文件中有一堆变量,您不应该在这样的函数中使用
require
include
,您应该启用
E\u STRICT
,这样您将看到关于未定义
$password
等的警告。

要求一次
按其说明执行:要求一次
。第一次调用
popList
时,
credentials.php
中的所有内容都会转储到函数的作用域中。第二次调用
popList
时,不会发生任何事情,因为在此运行期间已需要一次
credentials.php


您应该在某个地方有一个配置对象,而不是在一个文件中有一堆变量,您不应该在这样的函数中使用
require
include
,您应该启用
E\u STRICT
,这样您将看到关于未定义
$password
等的警告。

您好,您可以这样做

$query="SELECT * FROM bus_type order by bus_type_id Asc";
$result = mysqli_query($conn, $query);
echo "<select name=bustype size=sizes class=bus_txtbox value=''>Type of the Bus</option>";
    while($line=mysqli_fetch_array($result, MYSQLI_ASSOC)){
    echo "<option value=$line[bus_type_id]>$line[bus_type]</option>";
}
echo "</select>";
$query=“按总线类型id Asc从总线类型订单中选择*”;
$result=mysqli\u查询($conn,$query);
回显“总线类型”;
而($line=mysqli\u fetch\u数组($result,mysqli\u ASSOC)){
回显“$line[总线类型]”;
}
回声“;

您好,您可以这样做

$query="SELECT * FROM bus_type order by bus_type_id Asc";
$result = mysqli_query($conn, $query);
echo "<select name=bustype size=sizes class=bus_txtbox value=''>Type of the Bus</option>";
    while($line=mysqli_fetch_array($result, MYSQLI_ASSOC)){
    echo "<option value=$line[bus_type_id]>$line[bus_type]</option>";
}
echo "</select>";
$query=“按总线类型id Asc从总线类型订单中选择*”;
$result=mysqli\u查询($conn,$query);
回显“总线类型”;
而($line=mysqli\u fetch\u数组($result,mysqli\u ASSOC)){
回显“$line[总线类型]”;
}
回声“;

我们可能需要查看代码…它看起来很像是在函数调用之间更改了
$username
;也许在代码的其余部分搜索该变量的引用?没有办法。credentials.php只有用户名的根,该函数在这两种情况下都使用它。为什么在第一次调用后它会将root更改为ODBC?也许我在第二次调用函数时已经连接好了?不过,我会在PHP脚本和所有包含的文件中搜索对
$username
的所有引用,以查看哪些行能够更改其值。然后回溯,看看这些行是否正在执行。另一方面,您可以始终强制
$username=“root”就在您第二次调用
popList()
函数之前-但是如果不深入了解它是如何被更改的,您可能会在这个过程中破坏其他东西。嗯,奇怪。我想这与函数定义的
require\u once
部分有关。我刚刚将
credentials.php
中的连接凭据粘贴到函数的顶部,现在就可以使用了。两个列表框都会被填充。可能是
require once“credentials.php”
导致了这种行为。我不知道为什么。我们可能需要查看代码…它看起来很像是在函数调用之间更改了
$username
;也许在代码的其余部分搜索该变量的引用?没有办法。credentials.php只有用户名的根,该函数在这两种情况下都使用它。为什么在第一次调用后它会将root更改为ODBC?也许我在第二次调用函数时已经连接好了?不过,我会在PHP脚本和所有包含的文件中搜索对
$username
的所有引用,以查看哪些行能够更改其值。然后回溯,看看这些行是否正在执行。另一方面,你可以
$query="SELECT * FROM bus_type order by bus_type_id Asc";
$result = mysqli_query($conn, $query);
echo "<select name=bustype size=sizes class=bus_txtbox value=''>Type of the Bus</option>";
    while($line=mysqli_fetch_array($result, MYSQLI_ASSOC)){
    echo "<option value=$line[bus_type_id]>$line[bus_type]</option>";
}
echo "</select>";