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

时间:2012-04-25 16:02:58

标签: php mysql html

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

只有一个列表框可以正常使用该功能,但是如果页面上的第二个列表框再次使用不同的参数(列名称和表名称)调用该函数,则它将显示为空,并且在第一个填充列表框源头下的页面源:

  

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

我在两个调用中使用相同的连接凭据,默认为localhost,root和无密码(纯粹用于测试目的)

为什么会这样?

修改* (源)*:

<?php
function popList($col, $tbl) {

    require_once "credentials.php";

    // Opens a connection to a MySQL server
    $connection=mysql_connect($host, $username, $password);
    if (!$connection) {
      die('Not connected : ' . mysql_error());
    }

    // Set the active MySQL database
    $db_selected = mysql_select_db($database, $connection);
    if (!$db_selected) {
      die ('Can\'t use db : ' . mysql_error());
    }

    $sql = "SELECT $field FROM $table";
    $query = mysql_query($sql);

    while ($row = mysql_fetch_array($query)) {
        echo '<option value="' . $row["$field"] . '">' . $row["$field"] . '</option>';
    }

    mysql_close($connection);
}
?>

:似乎使用require_onceinclude_once会导致此问题,但使用includerequire实际上可以解决问题。

require_once "credentials.php"中的实际代码替换credentials.php,如此

function popList(...) {

require "credentials.php"; // changed to require from require_once. same with include


...
}

3 个答案:

答案 0 :(得分:3)

引用你,

  

我在两个调用中使用相同的连接凭据,默认为localhost,root和无密码(纯粹用于测试目的)

由于您提到没有密码的root用户,并且在错误中,它显示为: Access denied for user 'ODBC'@'localhost' (using password: NO) ,这意味着您实际上是在尝试连接用户ODBC没有密码,我认为有密码。

答案 1 :(得分:2)

require_once按照说法执行:它需要一次。第一次调用popList时,credentials.php中的所有内容都会被转储到您的函数范围内。第二次调用popList时,没有任何事情发生,因为在此次运行期间已经需要credentials.php一次。

你应该在一个配置对象而不是文件中的一堆变量,你不应该在这样的函数中使用requireinclude,你应该E_STRICT打开,这样你就会看到关于$password等没有被定义的警告。

答案 2 :(得分:0)

嗨,你可以这样做

$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>";