Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]System friends - sprawdzanie czy dodał.
Forum PHP.pl > Forum > Przedszkole
Marcinekk
Witam.

Tworzę skrypt znajomych na swojej stronie. Moim problemem jest sprawdzanie czy użytkownik A już dodał użytkownika B.

Tak jaśniej: użytkownik A - np. ja | B - użytkownik, którego przeglądamy profil.

Nie wiem czy wytłumaczyłem to wystarczająco jasno.


W skrócie, chodzi o to, żeby nie mógł dodać tego samego usera jeszcze raz.

Próbowałem coś takiego:

  1. if($ch_fr['us_id2'] == $u_data['user_id'] && $ch_fr['us_id'] == $user_data['user_id'])



Aczkolwiek to blokuje dodawanie tego znajomego, który został dodany jako pierwszy, jeżeli dodam drugiego to będę mógł go dodawać ile chce. (w tym jest problem)

W bazie danych stworzyłem 2 tabele.

  1. CREATE TABLE `strona_checkfrnd` (
  2. `uid` int(11) NOT NULL,
  3. `us_id` int(11) NOT NULL,
  4. `us_id2` int(11) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Tutaj lądują jedynie uid userów, którzy są znajomymi.

us_id - przechowuje id usera, który został dodany przez us_id2 (ten kto dodał)

Natomiast druga tabela

  1. CREATE TABLE `strona_friends` (
  2. `uid` int(11) NOT NULL,
  3. `user_id` int(11) NOT NULL,
  4. `friend_name` text NOT NULL,
  5. `friend_avatar` text NOT NULL,
  6. `friend_id` text NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


uid - to id zapytania, nie jest ważne.

user_id - czyli id użytkownika, który posiada danego znajomego.
friend_name - wiadomo, nick znajomego.
friend_avatar - podobnie jak wyżej.
friend_id - przechowuje id konta znajomego.


Do strona_friends są wykonywane 2 zapytania.

  1. mysql_query("INSERT INTO `strona_friends` (`user_id`, `friend_name`, `friend_avatar`, `friend_id` ) VALUES ('{$user_data['user_id']}', '{$u_data['user_name']}', '{$u_data['user_avatar']}', '{$u_data['user_id']}')");
  2.  
  3. mysql_query("INSERT INTO `strona_friends` (`user_id`, `friend_name`, `friend_avatar`, `friend_id` ) VALUES ('{$u_data['user_id']}', '{$user_data['user_name']}', '{$user_data['user_avatar']}', '{$user_data['user_id']}')");


Pierwsze zapytanie jest wykonywane dla użytkownika, który dodał kogoś jako znajomego.
Drugie zapytanie jest wykonywane dla użytkownika, który został dodany przez osobę dla której wykonuje się pierwsze zapytanie.

(Tak wiem, pdo jest bezpieczniejsze, aczkolwiek wygodniej pisze mi się na tym i to jest do celów prywatnych.)

Funkcje:

  1. $_GET['id'] = (int)clear($_GET['id']);
  2. $u_data = get_user_data($_GET['id']);
  3. $ch_fr = check_friend();


Kod funkcji:

  1. function get_user_data($user_id = -1) {
  2. if($user_id == -1) {
  3. $user_id = $_SESSION['user_id'];
  4. }
  5. $result = mysql_query("SELECT * FROM `strona_users` WHERE `user_id` = '{$user_id}' LIMIT 1");
  6. if(mysql_num_rows($result) == 0) {
  7. return false;
  8. }
  9. return mysql_fetch_assoc($result);
  10. }
  11.  
  12. function get_friends_data($user_id = -1) {
  13. if($user_id == -1) {
  14. $user_id = $_SESSION['user_id'];
  15. }
  16. $result = mysql_query("SELECT * FROM `strona_friends` WHERE `user_id` = '{$user_id}' LIMIT 1");
  17. if(mysql_num_rows($result) == 0) {
  18. return false;
  19. }
  20. return mysql_fetch_assoc($result);
  21. }
  22.  
  23. function check_friend($user_id = -1)
  24. {
  25. if($user_id == -1) {
  26. $user_id = $_SESSION['user_id'];
  27. }
  28. $result = mysql_query("SELECT * FROM `strona_checkfrnd` WHERE `us_id2` = '{$user_id}' LIMIT 1");
  29. if(mysql_num_rows($result) == 0) {
  30. return false;
  31. }
  32. return mysql_fetch_assoc($result);
  33. }




Bardzo proszę o pomoc, nie wiem już jak to zrobić. Jeżeli potrzeba więcej kodu proszę pisać, podam co trzeba.
viking
A gdzie masz klucze główne i obce? Baza sama zadba o unikalność rekordów.
Czy mysql jest wygodniejsze to zobaczymy na koniec roku kiedy kończy się aktywne wsparcie PHP linii 5. Wtedy sporo firm będzie musiało pomyśleć o zmianie i dopiero zacznie się płacz na forum.
Marcinekk
@edit Źle zrobiłem zapytanie, właśnie to zauważyłem. Temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.