Php 在while循环中显示来自数组值的正确用户id链接时出现问题

Php 在while循环中显示来自数组值的正确用户id链接时出现问题,php,mysql,Php,Mysql,我正在制作一个社交网站,我想在其中有一个PHP生成的表格显示用户的好友。我想在这些缩略图下面显示pal缩略图和其他信息,这样,如果您单击缩略图,它会将您带到该用户的配置文件 我的代码: <?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($quer

我正在制作一个社交网站,我想在其中有一个PHP生成的表格显示用户的好友。我想在这些缩略图下面显示pal缩略图和其他信息,这样,如果您单击缩略图,它会将您带到该用户的配置文件

我的代码:

<?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>
的朋友们
我将用户id值存储在数组$pal\U数组中。这些是pal用户id号。当缩略图显示时,它们都链接到数组中的最后一个用户id。我做错了什么。我只是在学习PHP。

如上所述,第一个错误是将数组存储为内爆字符串,而不是使用关系模型,并将Pal实体存储在另一个用户表中

第二个错误是在字符串中使用数组,如($pal\u Array)中的WHERE users.user\u id。必须先用逗号将其内爆

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

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“\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";
echo“\n”;

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

如果我不得不猜测,您希望缩略图链接的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"
"user_view.php?user_id2=92,93,94,95"
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
"SELECT pal_2 FROM User_pals WHERE pal_1 = $user_id";
"SELECT pal_1 FROM User_pals WHERE pal_2 = $user_id";
但据我所知,它们都在使用变量$pal_数组的值,据我所知,它是这样的

"92,93,94,95"
这将使您的每个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"
"user_view.php?user_id2=92,93,94,95"
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
"SELECT pal_2 FROM User_pals WHERE pal_1 = $user_id";
"SELECT pal_1 FROM User_pals WHERE pal_2 = $user_id";
修复方法: 因此,为了解决眼前的问题,您应该分解ID列表并单独使用这些ID,而不是一次使用整个列表。但是,更重要的是正确设置数据库

解决方案: 将您的好友列表存储在单独的表中,而不是用户的字段中。每个用户都有许多好友。每个pal都是具有自己用户Id的另一个用户。您需要的是一个单独的表,其唯一任务是将一个用户的Id与另一个用户的Id关联起来。您的两个表可能如下所示:

"user_view.php?user_id2=92"
"user_view.php?user_id2=93"
"user_view.php?user_id2=94"
"user_view.php?user_id2=95"
"user_view.php?user_id2=92,93,94,95"
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
"SELECT pal_2 FROM User_pals WHERE pal_1 = $user_id";
"SELECT pal_1 FROM User_pals WHERE pal_2 = $user_id";
在这个设置中,表User_pals只是一个大的2列列表,它将2个用户绑定在一起(还有一个额外的列来指示友谊是否得到了确认)。要获取给定用户的好友列表,您只需执行以下两个查询:

"user_view.php?user_id2=92"
"user_view.php?user_id2=93"
"user_view.php?user_id2=94"
"user_view.php?user_id2=95"
"user_view.php?user_id2=92,93,94,95"
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
"SELECT pal_2 FROM User_pals WHERE pal_1 = $user_id";
"SELECT pal_1 FROM User_pals WHERE pal_2 = $user_id";
这将为您提供一个很好的用户ID列表,这些ID是您用户的好友。 (还有比这更好的设计表结构,它只需要一个查询,但你知道了)


希望这能帮助你走上正轨。可以找到更多信息。除此之外,在谷歌上搜索关系数据库结构和设计将非常有用。

我将用户id值存储在数组$pal\u数组中好的,怎么解决?当我回显$pal_数组时,我得到94,92 ie,用户id 94和92。这两个缩略图都链接到用户94的个人资料。将其存储在表格中,而不是字段中。干杯,斯帕雷尔上校,做了更多的研究。我有很多事情要解决。谢谢你的回复,科克瓦斯。对于第一个错误,我有一个带有user_id、username等的表users和另一个名为pal_array的字段,该字段存储MySQl数据库中由逗号分隔的pal的user_id。检索此信息的正确方法是什么?我想我没有真正理解。我理解第二个错误。我试试你的第三种解决办法,告诉你它是怎么回事。我真的很感激你能从这个答案中获得更多关于错误1的信息:非常感谢。从你和其他人的回复中,我明白了为什么我必须重组我的数据库。