我从这个foreach声明中得到了两个结果。

时间:2012-11-14 08:15:37

标签: php

我有一组用户。如果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; ?>

2 个答案:

答案 0 :(得分:2)

mysql_fetch_assoc()返回一个数组,其中包含第一个返回行的选定字段,即$users将是一个包含两个键“id”和“username”的数组。因此,在这里使用foreach循环是没有意义的:

<div class="fnav">
    <p>
        <a href="profile.php?id=<?php echo $users['id']; ?>">Profile</a>
    </p>
    ...

答案 1 :(得分:1)

您的函数返回的数组包含两个变量idusername

根据你如何调用它,你期待一个数组,所以:

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()的不同实现提供)。