0

ユーザーの配列があります。user_login がテーブルの行と一致する場合、そこから ID や名前などを選択します。以下のクエリでは、「プロファイル」への 2 つのリンクが返され、1 つは正しく、もう 1 つは間違っています。どうすれば間違ったものを取り除くことができますか?

   function fetch_new_users()
        {
            $result = mysql_query("SELECT `id`, `username` FROM `users` WHERE username='{$_SESSION['user_login']}'");
            $mysql = mysql_fetch_assoc($result);

            return $mysql;
        }

        $users = fetch_new_users();
        ?>
        <?
        if (isset($_SESSION["user_login"])) {

        ?>
        <div class="fnav">


                 <?php foreach($users as $user): ?>
                            <p>
                                <a href="profile.php?id=<?php echo $user['id']; ?>" >Profile</a>
                            </p>
                        <?php endforeach; ?>
4

2 に答える 2

2

mysql_fetch_assoc()最初に返された行の選択されたフィールドを持つ配列を返します。つまり、$users「id」と「username」の 2 つのキーを持つ配列になります。したがって、ここで foreach ループを使用しても意味がありません。

<div class="fnav">
    <p>
        <a href="profile.php?id=<?php echo $users['id']; ?>">Profile</a>
    </p>
    ...
于 2012-11-14T08:31:17.397 に答える
1

関数は、2つの変数とを含む配列を返しidますusername

あなたがそれをどのように呼ぶかによって、あなたは配列の配列を期待しているので、:

function fetch_new_users()
{
    $result = mysql_query("SELECT `id`, `username` FROM `users` WHERE username='{$_SESSION['user_login']}'");
    $user = mysql_fetch_assoc($result);
    mysql_free_result($result);
    return array ( $user );
}

<?php php foreach($users as $user): ?>

データが実際にそこにあることを確認していないことにも注意してください。fetch_new_usersを返す可能性がありFalseます。

最後に、関数は1つのアイテムを返す可能性が高いため、ここではforeachループはあまり使用されません。ただし、そのコードを別の場所で再利用していると思います。

まとめると、次のようになります。

<?php

// If user_login is unset, fetch_new_users will fail, so it makes sense
// to check it *before* calling.

if (isset($_SESSION["user_login"])
{
    $users = fetch_new_users();
    if (false === $users)
    {
         // The query failed. Output something to explain why we won't display profiles
    }
    else
    {    // This section will have to be closed later on

?>

    <div class="fnav">
    <?php foreach($users as $user): ?>
        <p>
            <a href="profile.php?id=<?php echo $user['id']; ?>" >Profile of <?php echo $user['username']; ?></a>
        </p>
    <?php endforeach; ?>

または、が1かどうかを確認できますcount($users)。上記のコードを使用すると、1人のユーザーの情報、または複数のユーザーからの情報(別の関数または別の実装で提供する必要がありますfetch_new_users())を表示できます。

于 2012-11-14T08:32:28.103 に答える