0
<?php

class Friends {
  public function __construct() { 
    global $DB, $name, $f_name;
    $name = $_SESSION['name'];
    if (isset($_POST['submitted'])) {
      $f_name = mysql_real_escape_string($_POST['f_name']);
    }
  }

  public function AddList() {
    global $DB,$name;
    echo "<center>";
    $result = $DB->query(
        "SELECT * FROM friends WHERE user_name!='{$name}' AND friend_name!='{$name}' "
    );

    while($row = mysql_fetch_array($result)) {
      echo "<form method='post'>";
      echo '<input type="hidden" value=' . $row['user_name'] . ' name="f_name"</th> ';
      echo '<tr>';

      echo '<th><b><font color="#663300">' . $row['user_name'] . '</font></b></th>';

      $this->auth();
      echo "</form>";
      echo "</tr>";
      echo "</tr>";
    }

    echo "</table>";
    echo "</center>";
  }


  public function auth() {
    global $name,$f_name,$DB;
    $authprove = $DB->query("SELECT * FROM approval WHERE sender_id='{$name}'");

    if (mysql_num_rows($authprove) > 0) {
      echo '<th><b>Approving...</th>';
    } else {
      echo '<th><b><input type="submit" name="submitted" value="Add"></th>';
    }
  }
}

$F= new Friends();

?>

少し説明:

特定のIDだけを出力してApprovingにし、別のIDを出力してAddすることは可能ですか?

このような

時表(承認) :

---- 送信者 ID || receive_id

---- 管理者 || ゲスト

出力 Friends.php :

- - 友達に追加する :

---- ゲスト -> 承認待ち

---- Guest2 -> 友達として追加

---- Guest3 -> 友達として追加

4

1 に答える 1

0

タスクを非常に非効率的に実行しています。N 人のユーザーがいる場合、N+1 クエリを実行することになります。JOIN を使用して単一のクエリで実行できます。その場合、単一のループがあり、必要なことを問題なく実行できます。

何かのようなもの:

$query = "
    SELECT 
      f.id, 
      f.user_name, 
      f.fullname, 
      a.status 
    FROM 
      friends f
      LEFT OUTER JOIN approval a ON (f.id=a.sender_id) 
    WHERE 
      user_name!='{$name}' 
      AND friend_name!='{$name}'
";


$result = $DB->query( $query );
while( $row = mysql_fetch_array( $result ) ) {
  echo $row['f.fullname'];
  if ( $row['a.status'] == 'approved' ) echo "Add as Friend";
  else echo "Add as Friend";
}
于 2013-01-24T08:21:00.583 に答える