2016-12-16 9 views
0

フレンドリストをやっていて、うまくいきません。 私はすべてのユーザーの友だちを表示しようとしましたが、機能していません。フレンドリストすべてのユーザーフレンドを表示していません

<table border="1"> 
    <tr> 
     <td>id</td> 
     <td>from_username</td> 
     <td>to_username</td> 
     <td>requested</td> 
     <td>accepted</td> 
    </tr> 
    <tr> 
     <td>1</td> 
     <td>username1</td> 
     <td>username2</td> 
     <td>0</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>username1</td> 
     <td>username3</td> 
     <td>0</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>3</td> 
     <td>username2</td> 
     <td>username3</td> 
     <td>0</td> 
     <td>1</td> 
    </tr> 
</table> 
私はテーブルのHTMLを置くので、ここでドロー可能なテーブルを配置する方法がわからない):MySQLのfriends_requestテーブルで

私はこのような何かを持っています

これは、ユーザー名がログインしているユーザー名の代わりに、1つのユーザー名だけであることを示しています。たとえば、 'username1'では 'username2'の友人として表示され、 'username3'は表示されません。 。

<?php 
$selfriends = "SELECT * FROM friends_request WHERE from_username = '$user' OR to_username='$user' AND accepted = '1'"; 
$resultfriend = $sql->query($selfriends); // select the table of friends_request from database 
$rowfriend = mysqli_fetch_assoc($resultfriend); // calls the string, char or number from friends_request table 

$t1 = $rowfriend['from_username']; // calls user from_username from friends_request table 
$t2 = $rowfriend['to_username']; // calls user to_username from friends_request table 
$accepted = $rowfriend['accepted']; // calls accepted from friends_request table 
$fid = $rowfriend['id']; 

/* CHECK IF FRIEND GOT SOME PICTURE */ 
$selPicturePro = "SELECT * FROM users WHERE username = '$t1'"; 
$resultsPicPro = $sql->query($selPicturePro); // select the users table and find out the content of pic 
$rowProfiles = mysqli_fetch_assoc($resultsPicPro); // calls the row of profile picture. 

if($rowProfiles > 1) { 
    $profileView = "<img src='".$rowProfiles['profile']."' width='auto' height='155px' />"; 
} else { 
    $profileView = "<img src='images/no-picture.png' width='auto' height='100px' />"; 
} 

$selPicturePro2 = "SELECT * FROM users WHERE username = '$t2'"; 
$resultsPicPro2 = $sql->query($selPicturePro2); // select the users table and find out the content of pic 
$rowProfiles2 = mysqli_fetch_assoc($resultsPicPro2); // calls the row of profile picture. 

if($rowProfiles2 > 1) { 
    $profileView2 = "<img src='".$rowProfiles2['profile']."' width='auto' height='155px' />"; 
} else { 
    $profileView2 = "<img src='images/no-picture.png' width='auto' height='100px' />"; 
} 

if($user != $t1) { // if the user is not the sender and accepted = 1, then the 
    // receiver sees the other user. 
    echo '<h3>Friends</h3>'; 
    echo '<a href="profile.php?u='.$t1.'" class="no-style">'; 
    echo $profileView;.'<br />'.$t1; 
    echo '</a>'; 
} 
else if($user != $t2) { // if the user is not the receiver and accepted = 1, then the  
    // sender see the other user. 
    echo '<h3>Friends</h3>'; 
    echo '<a href="profile.php?u='.$t2.'" class="no-style">'; 
    echo $profileView2.'<br />'.$t2; 
    echo '</a>'; 
} 

if($user != $t1 && $accepted == 0) { 
    echo "<br clear='all' />"; 
    echo "<h3>Friends</h3>"; 
    echo "You don't have friends yet."; 
} 

if($user != $t2 && $accepted == 0) { 
    echo "<br clear='all' />"; 
    echo "<h3>Friends</h3>"; 
    echo "You don't have friends yet."; 
}   
?> 
+0

「mysqli_fetch_assoc」をループします。また、パラメータ化されたクエリを使用します。また、あなたはこれをすべて1つのクエリでcouldntしましたか? – chris85

+0

多分、私はまだこのリストを作る方法を学んでいるので、私は多くの可能性を試していますが、いつかはそれを動作させることはできません。 –

+0

私はループを試みましたが動作しませんでした。それは1回だけ数百回または数千回表示されます –

答えて

0

すべての友人を処理するにはループが必要です。また、すべてのクエリを結合と組み合わせることもできます。

代わりfrom_usernameto_usernameのためにすべてのコードを複製する、あなたは両方のUNIONと単一の列にそれらを取得するためにクエリを変更することができます。

友人がいないときに選択された行がないため、ユーザーが友だちを持っているかどうかのテストは行の処理中に実行できません。ループの前に、返される行の数をチェックします。

<?php 

$selfriends = "SELECT fr.username, u.profile 
       FROM (SELECT from_username AS username 
        FROM friends_request 
        WHERE to_username = '$user' AND accepted = 1 
        UNION ALL 
        SELECT to_username AS username 
        FROM friends_request 
        WHERE from_username = '$user' AND accepted = 1) AS fr 
       JOIN users AS u ON u.username = fr.username"; 
$resultfriend = $sql->query($selfriends);          // select the table of friends_request from database 
if ($resultfriend->num_rows == 0) { 
    echo "<br clear='all' />"; 
    echo "<h3>Friends</h3>"; 
    echo "You don't have friends yet."; 
} else { 
    echo '<h3>Friends</h3>'; 
    while ($rowfriend = mysqli_fetch_assoc($resultfriend)) {      // calls the string, char or number from friends_request table 
     $t1 = $rowfriend['username']; 
     $profile = $rowfriend['profile']; 

     if(!empty($profile)) { 
      $profileView = "<img src='".$profile."' width='auto' height='155px' />"; 
     } else { 
      $profileView = "<img src='images/no-picture.png' width='auto' height='100px' />"; 
     } 

     <a href="profile.php?u=<?php echo $t1; ?>" class="no-style"> 
     <?php echo $profileView; ?><br /> 
     <?php echo $t1; ?> 
     </a> 
     <?php 
    } 
} 
+0

'fr.username'と 'u.profile'は 'from_username'と 'users.profile'と同じか、「friends_request.username」と「users.profile」を意味しますか?私はそれを確信できるように頼んでいます。 –

+0

'fr.username'は行が' to_username = $ user'と一致するとき 'from_username'です、行が' from_username = $ user'と一致するとき 'to_username'です。そして、 'u.profile'は、一致するユーザのための' users.profile'です。 – Barmar

関連する問題