0

我有一组用户。如果 user_login 与表中的行匹配,它将从中选择 id 和 name 等。通过我的以下查询,它返回两个指向“个人资料”的链接,一个正确,一个错误。我如何摆脱错误的?

   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”的数组。因此,在这里使用 foreach 循环是没有意义的:

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

您的函数返回一个包含两个变量的数组,id并且username.

通过你如何称呼它,你期待一个数组 arrays,所以:

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

最后,这里的 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; ?>

或者您可以检查是否count($users)为 1。然后,上面的代码将允许用于显示单个用户的信息,或来自多个用户的信息(必须由不同的函数或不同的实现提供fetch_new_users())。

于 2012-11-14T08:32:28.103 回答