0

mysqlconnecter というデータベースに接続するスクリプトを作成しました。

    <?php

define("DB_USERNAME", "root");
define("DB_PASSWORD", "pass");
define("DB_DATABASE", "adventure_of_dragons");
define("DB_SERVER", "127.0.0.1");

$db_handle = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);

$db_found = mysql_select_db(DB_DATABASE, $db_handle);

if ($db_found || true) {

    $SQL = "SELECT * FROM members";
    $result = mysql_query($SQL) or die(mysql_error());

    while ( $row = mysql_fetch_assoc($result) ) {

    $id = $row['member_id'];
    $username = $row['username'];
    $password = $row['password'];
    $rank = $row['rank'];


}

mysql_close($db_handle);

} else {
echo "Database NOT Found " . $db_handle;
}

?>

次に、mysqlconnecter.php を含む別のスクリプトを作成し、データベース内にデータをポストします。

<?php

include  "mysqlconnecter.php";
    echo 'ID = ' . $id . '<br>';
    echo 'RANK = ' . $rank . '<br>';
    echo 'USERNAME = ' . $username . '<br>';
    echo 'PASSWORD = ' . $password . '<br><br>';
    // two <br>'s, so we get an empty line between users

    ?>

ただし、出力にはデータベース内のデータが 2 回表示されます。

ID = 4
RANK = 100
USERNAME = user
PASSWORD = password

ID = 4
RANK = 100
USERNAME = user
PASSWORD = password

テキストを 1 回だけ表示したいのですが、どうすればよいですか?

4

3 に答える 3

2

あなたの論理は少し間違っています。

これは、ループが終了したためthenです。データをエコーし​​ているため、常に最後の行になります。

ループ中にエコーするか、配列を作成してから後で配列をループする必要があります。

    while ( $row = mysql_fetch_assoc($result) ) {

    $id = $row['member_id'];
    $username = $row['username'];
    $password = $row['password'];
    $rank = $row['rank'];
 //this will echo for EVERY row the loop iterates.
    echo 'ID = ' . $id . '<br>';
    echo 'RANK = ' . $rank . '<br>';
    echo 'USERNAME = ' . $username . '<br>';
    echo 'PASSWORD = ' . $password . '<br><br>';

  }

二重出力の場合、ファイルを2回含めたと思われます。しかし、私はあなたのコードのすべてを見ていないので、それは推測です.

于 2013-08-02T23:18:04.597 に答える
0

mysqlconnecter.php ファイルの外に表示コードを保持したい場合は、ループ内でこれを行うことができます。

$data = array();
while ($row = mysql_fetch_assoc($result))
{
    $data[] = array(
        'id' => $row['member_id'];
        'username' => $row['username'];
        'password' => $row['password'];
        'rank' => $row['rank'];
}

そして、あなたのスクリプトで:

include  "mysqlconnecter.php";
foreach ($data as $key => $value)
{
    echo 'ID = ' . $value['id'] . '<br>';
    // etc
}

「二重印刷」の問題については 、mysqlconnecter.php のvar_dump($data);後に右を追加して、正確に何が起こるかを確認します。while()

var_dump 表示がクエリの予想される結果を正しく反映している場合、問題は別の場所にあり、Dave が提案したように mysqlconnecter.php を 2 回インクルードしている可能性があります。コード全体で 1 回だけ含めるようにするには、単純include()include_once().

于 2013-08-02T23:28:20.693 に答える