2012-04-25 173 views
0

函数popList()需要两个参数 - 列的名称和表的名称。 基本上popList()函数连接到一个mysql服务器,然后连接到一个数据库,并根据传递给用来填充页面上的列表框的函数来建立一个sql查询来检索数据。函数会填充第一个列表框,但不会从数据库表中填充第二个列表框

只有一个列表框可以正常工作,但如果页面上有第二个列表框再次调用该函数时使用了不同的参数(列名和表名),它将显示为空,并在源代码中显示以下内容的页面右侧下第一填充列表框的源:

警告:mysql_connect()函数[function.mysql-连接]:拒绝用户 'ODBC' @ '本地主机'(使用密码访问 :否)in C:\ xampp \ htdocs \ test on line
未连接:(使用密码:NO) 访问被拒绝的用户“ODBC” @“localhost”的

我用两个呼叫这是默认的本地主机,树根和测试没有密码(纯粹相同的连接凭据目的)

为什么它表现得像这样?

编辑*(源)*:

<?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); 
} 
?> 

SOLUTION

:好像用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

我们可能需要看到代码... – eggyal 2012-04-25 16:06:46

+0

好。添加了源代码。 – Bob 2012-04-25 16:11:51

+1

它将非常显得好像'$ username'在函数调用之间被改变;也许搜索其余的代码来引用该变量? – eggyal 2012-04-25 16:13:24

回答

2

require_once做它说:它要求一次。第一次调用popList时,credentials.php中的所有内容都会被转储到函数的作用域中。第二次popList被调用,没有任何反应,因为credentials.php在此次运行中已经需要一次。

你应该有一个配置对象,而不是某个地方的变量在文件中的一堆,你不应该使用requireinclude像这样的函数中,你应该有E_STRICT开启,所以你看到$password的警告等等没有被定义。

3

引用您,

我用两个呼叫这是默认的本地主机,根和相同的连接凭据没有密码(纯粹用于测试目的)

Si你提到没有密码的root用户,并在错误,它来:Access denied for user 'ODBC'@'localhost' (using password: NO)这意味着你实际上试图连接用户ODBC没有密码,我认为这是一个密码。

+0

但我以root身份连接。 – Bob 2012-04-25 16:11:32

+0

@Bob第二次尝试连接尝试连接为“ODBC”。 – Jim 2012-04-25 16:18:09

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>"; 
相关问题