我有一组用户。如果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; ?>
答案 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)
您的函数返回的数组包含两个变量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
。
最后,这里的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()
的不同实现提供)。