在while循环中显示来自数组值的正确user_id链接的问题

时间:2011-02-02 12:10:48

标签: php mysql

我正在创建一个社交网站,我希望在PHP生成的表中显示用户的朋友。我想在这些缩略图下方显示朋友缩略图和其他信息,这样如果您点击缩略图,就会转到该用户的个人资料。

我的代码:

<?php
//code for displaying all your pals
$query_pal_array = "SELECT pal_array FROM users WHERE user_id='$user_id'";
$pal_array_result = mysql_query($query_pal_array, $connections) or die(mysql_error());
$row_pal_array = mysql_fetch_assoc($pal_array_result);

$pal_array = $row_pal_array['pal_array'];

$palList = "";
if($pal_array !="")
{
    $palArray = explode(",",$pal_array);
    $palCount = count($palArray);   
}
else
{
    $palCount = "0";
}
//get pal avatars
$query_pal_info = "SELECT users.user_id, user_first_name, user_last_name, username, picture_thumb_url, avatar FROM users LEFT JOIN picture ON
users.user_id =  picture.user_id
AND picture.avatar=1 WHERE users.user_id IN ($pal_array)";
$pal_info = mysql_query($query_pal_info , $connections) or die(mysql_error());
$totalRows_pal_info = mysql_num_rows($pal_info );
echo $pal_array;

echo "\n<table>";
$j = 5;
while ($row_pal_info = mysql_fetch_assoc($pal_info))
{
    if($j==5) echo "\n\t<tr>";
    $thumbnail_user = $row_pal_info['picture_thumb_url'] != '' ? $row_pal_info['picture_thumb_url'] : '../Style/Images/default_avatar.png';
    echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2=$pal_array'>
    <img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n";
    $j--;
    if($j==0) {
        echo "\n\t</tr>\n\t<tr>";
        $j = 5;
    } 
}
if($j!=5) echo "\n\t\t<td colspan=\"$j\"></td>\n\t</tr>";
echo "\n</table>";
?>
<table width="500" border="0">
    <tr>
        <td height="20"><div class="heading_text_18"><?php echo $row_user_info ['username']; ?>'s&nbsp;pals <?php echo $palCount ?></div>  </td>
    </tr>
    <tr>
        <td class="interactionLinksDiv" align="right" style="border:none;"><a href="#" onclick="return false" 
      onmousedown="javascript: toggleInteractContainers('pal_requests');">Pal Requests</a></td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
</table>

我将user_id值存储在数组$ pal_array中。这些是pal user_id号码。缩略图显示时,它们都链接到数组中的最后一个user_id。我究竟做错了什么。我只是在学习PHP。

2 个答案:

答案 0 :(得分:1)

如果我不得不猜测,您希望缩略图链接的URL读取如下内容:

"user_view.php?user_id2=92"
"user_view.php?user_id2=93"
"user_view.php?user_id2=94"
"user_view.php?user_id2=95"

但是据我所知,他们都在使用变量$ pal_array的值,据我所知,这就是这个

"92,93,94,95"

这会使你的每个网址看起来像这样:

"user_view.php?user_id2=92,93,94,95"

修复: 因此,要解决当前问题,您应该爆炸()该ID列表并一次性使用它们而不是整个列表。但更重要的是正确设置数据库。

解决方案: 将好友列表存储在单独的表中,而不是存储在用户的字段中。每个用户都有很多好朋友。每个朋友都是另一个拥有自己用户ID的用户。你需要的是一个单独的表,其唯一的工作是将一个用户的ID与另一个用户的ID相关联。您的两个表可能如下所示:

Table: User
    user_id int;
    username varchar;
    email varchar;
    thumbnail_url varchar;

Table: User_pals
    pal_1 int; //user_id of the first user
    pal_2 int; //user_id of pal of first user
    pals_confirmed bool; //False or 0 until both friends are in agreement

在此设置中,表User_pals只是一个大的2列列表,将2个用户绑定在一起(附加一列表示友情是否已被确认)。要获取给定用户的朋友列表,您只需执行以下几个查询:

"SELECT pal_2 FROM User_pals WHERE pal_1 = $user_id";
"SELECT pal_1 FROM User_pals WHERE pal_2 = $user_id";

这会为您提供一个很好的user_id列表,这些列表是您的用户的好友。 (有比这更精心设计的表结构,只需要一个查询,但你明白了。)

所以希望这有助于您走上正轨。可以找到更多信息at w3schools.。除此之外,只需搜索关系数据库结构和设计将非常有用。

答案 1 :(得分:0)

Col. Shrapnel所述,第一个错误是将数组存储为内嵌字符串,而不是使用关系模型,并将Pal实体存储在另一个user_user表中。

第二个错误是在WHERE users.user_id IN ($pal_array)中使用String中的数组。你必须先用逗号破坏它。

第三个错误是你不能使用它:

echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2=$pal_array'>
<img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n";

但是这个:

echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2={$row_pal_info['user_id']}'>
<img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n";

这样,每个while循环中的ID都会不同。