2016-12-17 9 views
0

フレンドの追加とフレンドの削除ボタンを作成する際にいくつかの問題があります。 たとえば、friends_requestテーブルのmysqlの 'accepted'行が1の場合、 'Remove Friend'ボタンが表示されます。そうでない場合は、 'Add Friend'ボタンが表示されます。フレンドボタンの追加と削除

これは私がやったボタンのコードですが、間違っています。私はfriends.phpページからピックアップし、それをここに実装

<?php 

      $selfriendsBtn = "SELECT fr.username 
       FROM (select from_username AS username 
        FROM friends_request 
        WHERE to_username = '".$_GET['u']."' AND accepted = 1 
        UNION ALL 
        SELECT to_username AS username 
        FROM friends_request 
        WHERE from_username = '".$_GET['u']."' AND accepted = 1) AS fr 
       JOIN users AS u ON u.username = fr.username LIMIT 5"; 
      $resultfriend_add_rmv = $sql->query($selfriendsBtn); 
      $rowAdd_RmvFriend = mysqli_fetch_assoc($resultfriend_add_rmv); 

      $accepted = $rowAdd_RmvFriend['accepted']; 

      if($user != $_GET['u']) { 
       if($accepted == 1) {    
      ?> 
       <table> 
        <tr> 
         <td> 
          <form action="profile.php?u=<?php echo $_GET['u']; ?>&deleted=<?php echo $user; ?>" method="POST"> 
           <input type="submit" name="rmvfriend" value="Remove Friend" /> 
          </form> 
         </td> 
         <td> 
          <form action="profile.php?u=<?php echo $_GET['u']; ?>&a=compose" method="POST"> 
           <input type="submit" name="msg" value="Message" /> 
          </form> 
         </td> 
        </tr> 
       </table> 
      <?php 
       } else { 
      ?> 
       <table> 
        <tr> 
         <td> 
          <form action="profile.php?u=<?php echo $_GET['u']; ?>&requested=<?php echo $user; ?>" method="POST"> 
           <input type="submit" name="addfriend" value="Add Friend" /> 
          </form> 
         </td> 
         <td> 
          <form action="profile.php?u=<?php echo $_GET['u']; ?>&a=compose" method="POST"> 
           <input type="submit" name="msg" value="Message" /> 
          </form> 
         </td> 
        </tr> 
       </table> 
      <?php 
       } 
      } 

      ?> 

SELECTテーブル。 なぜ動作しないのかわかりません。ループを使うべきかどうか?まあ、私の意見では、これは非常にうまくいくと思います。あなたが結果セットに存在しない値を探している

+0

'"これは非常にうまくいくと思います。 " - それを試したことはありますか?それが解決策になると思いますか?これをデバッグすると、具体的にどのように失敗するのですか?私が気付く最初のことは、クエリで選択されていないデータベース結果から値を取得しようとしているように見えることです。 – David

+0

あなたはSQLインジェクションを利用できます。パラメータ化されたクエリを使用します。 – chris85

+0

@David私が取得している値はクエリであり、 "受け入れられた= 1"であり、ループを試しませんでした。 –

答えて

0

$accepted = $rowAdd_RmvFriend['accepted']; 

あなたは、データベースから選択する唯一の値は、ユーザー名です:

SELECT fr.username 
FROM ... 

ので$accepted意志決して1と等しくない。したがって、これは常にfalseになります。

if ($accepted == 1) 

のでelseブロック(「友達を追加」ボタン)が常に表示されます。

ロジックから使用できるように、クエリからacceptedの値を選択する必要があります。これは主に、これまであなたのクエリに基づいて推測ですが、あなたは、次の3つの場所にそれを追加する必要があるだろうように見えます:あなたがする必要がある場合がありますので、

SELECT fr.username, fr.accepted -- here 
FROM (select from_username AS username, accepted -- here 
     FROM friends_request 
     WHERE to_username = ? AND accepted = 1 
     UNION ALL 
     SELECT to_username AS username, accepted -- here 
     FROM friends_request 
... 

は、ここでは誰もが本当にあなたのデータを知っていないことに注意してくださいあなたのデータベース管理ツールでクエリをちょっと調べて、ちょうど良いものにしてください。

+0

警告:mysqli_fetch_assoc()は、パラメータ1がmysqli_result、C:\ xamppnew \ htdocs \ codinglife \ SocialNetwork_Tutorials \ profileに指定されたブール値であることを想定しています。php on line 47 行47は "' $ rowAdd_RmvFriend = mysqli_fetch_assoc($ resultfriend_add_rmv); '" –

+0

です.NunixMonteiro:それはかなり重要な詳細です。 Googleにそのエラーメッセージが表示された場合は、Stack Overflowに関する一般的な質問があります。 – David

+0

私はそれを行う方法を見つけました。私はこれをすべて削除して、次のように書きます: '$ selfriendsBtn =" SELECT id FROM friends_request \t \t \t WHERE(from_username = '"。$ _ GET [' u ']。' 'AND to_username =' $ user ')OR\t \t \t(from_username = '$ user' AND to_username = '"。$ _ GET [' u ']。"')AND accepted = 1 "; \t \t \t $ resultFriendAR = $ sql-> query($ selfriendsBtn); ' ------------------------------- ----------------- それはそれの後にnum_rowsで動作しました。 –