我正在创建一个社交网站,我希望在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 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。
答案 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都会不同。