0

関数popList()は、列の名前とテーブルの名前の2つのパラメーターを取ります。基本的に、popList()関数はmysqlサーバーに接続してからデータベースに接続し、SQLクエリを作成して、ページのリストボックスに入力するために使用する関数に渡した内容に基づいてデータを取得します。

関数で正常に機能するリストボックスは1つだけですが、異なるパラメーター(列名とテーブル名)を渡して関数を再度呼び出す2番目のリストボックスがある場合、空のように見え、ページのソースのすぐ下に次のように出力されます。最初に入力されたリストボックスのソース:

警告:mysql_connect()[function.mysql-connect]: 7行目のC:\ xampp \ htdocs \testでユーザー'ODBC'@'localhost'(パスワード:NOを使用)のアクセスが拒否されました接続されていません:ユーザー'のアクセスが拒否されましたODBC'@' localhost'(パスワードを使用:NO)

デフォルトの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);
}
?>

解決策

NEW:を使用して問題require_onceinclude_once引き起こしているようですが、使用するincluderequire実際に問題を修正します。

そのようなものrequire_once "credentials.php"から実際のコードに置き換えられましcredentials.phpた:

function popList(...) {

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


...
}
4

3 に答える 3

3

あなたを引用して、

デフォルトのローカルホスト、ルート、パスワードなしの両方の呼び出しで同じ接続資格情報を使用します(純粋にテスト目的のため)

パスワードのないルートユーザーについて言及しているため、エラーでは次のようになります。Access denied for user 'ODBC'@'localhost' (using password: NO)これは、実際にパスワードなしでユーザーに接続しようとしていることを意味します。これはODBCパスワードを持っていると思います。

于 2012-04-25T16:09:33.790 に答える
2

require_onceそれが言うことをします:それは一度必要とします。初めてpopList呼び出されると、すべてがcredentials.php関数のスコープにダンプされます。2 回目のpopList呼び出しは、この実行中に既に 1 回要求されているため、何も起こりません。credentials.php

ファイル内の変数の山ではなく、どこかに構成オブジェクトを配置する必要があります。そのような関数内でrequireまたはを使用しないでください。オンにする必要があるため、etc が定義されていないことに関する警告が表示されます。includeE_STRICT$password

于 2012-04-25T18:54:01.527 に答える
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>";
于 2012-12-18T11:21:30.830 に答える