Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zaproszenia / znajomi
slawo
post
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

Ostrzeżenie: (0%)
-----


id | zaprasza | ziomek

1 mycu sławo
2 charles sławo
3 jasiek sławo
4 sławo mycu

Witam, podpowie ktoś jak napisać dodawanie użytkowników do znajomych? Powiedzmy, że po kliknięciu + dodaj znajomego pobiera do bazy nick osoby zalogowanej i nick osoby, której chcemy dodać. Chciałbym tak to zrobić żeby wymagana była akceptacja zaproszeń.

Powyżej baza zaproszenia. Jak napisać coś takiego że gdy 2 osoby się zaproszą to pojawi się na stronie?

Nie chce żeby mi ktoś kod pisał tylko teoretycznie napisał na jakiej zasadzi mogłoby to działać. Z góry dzięki pzd.

Ten post edytował slawo 23.03.2010, 20:04:58


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Swego czasu robiłem to w następujący sposób: tabelka połączeń między dwoma użytkownikami z polami "user1_id" oraz "user2_id". Dodatkowo umieszczone było pole "type" określające typ zależności. Przyjąłem zasadę, że jeśli jest już wiersz (A,cool.gif z typem C, to nie dodajemy już wiersza (B,A) z tym samym typem. Wyświetlanie dla użytkownika X np. zaproszeń polega na tym, że musimy znać numer typu zaproszenia oraz powiedzieć w zapytaniu, że ID użytkownika może być w polu "user1_id" albo "user2_id". Szczegółowe dane użytkowników możemy pobrać tym samym zapytaniem, albo kolejnym przeznaczonym już tylko i wyłącznie do tego.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
zend
post
Post #3





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Na początku musimy zauwarzyć, że dane itak będą nam się dublować, więc proszę nie krzyczeć, że dane się dublują smile.gif
So, user_id1, user_id2 accepted_by_user2 <= pola
1) user 1 zaprasza 2, => 1,2 false
2 user 2 akceptuje, następuje aktualizacja zaproszenia, flaga true, oraz dodaje relacje 2,1,true
Implementacja całkiem przyjemna i przyjazna we wdrożeniu i utrzymaniu, nie ma też dużo zajmujących pol typów innych niż bool i int, co w tabelkach relacyjnych, przy dużej ilości danych może okazać się ważne

Drugą opcją może być trzymanie zaproszeń w osobnej tabelce, a wpisywanie do tabeli relacji tylko tych zaakceptowanych przez obie strony, co jest jeszcze lepszym rozwiązaniem

Ten post edytował zend 26.03.2010, 22:48:30
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Moim zdaniem najlepiej zrobić dwie tabele:
znajomi [id_uzytkownika, id_znajomego]
zaproszenia [id, id_zapraszajacego, id_zapraszanego, stan_dla_zapraszajacego, stan_dla_zapraszanego, stan_zaproszenia]
przy czym:
- zapraszający przechowuje zaproszenie w swojej skrzynce nadawczej: stan_dla_zapraszajacego='wysłane',
- zapraszający zaproszenie usunął: stan_dla_zapraszajacego='wykasowane',
- zapraszany zaproszenia jeszcze nie przeczytał: stan_dla_zapraszanego='nowe' oraz stan_zaproszenia='oczekuje',
- zapraszany zaproszenie usunął, chociaż nie zaakceptował, a może nawet nie przeczytał: stan_dla_zapraszanego='wykasowane' oraz stan_zaproszenia='odrzucone',
- zapraszany zaproszenie przeczytał, ale jeszcze nie zaakceptował: stan_dla_zapraszanego='przeczytane' oraz stan_zaproszenia='oczekuje',
itd...
Cytat(zend @ 26.03.2010, 22:45:57 ) *
Na początku musimy zauwarzyć, że dane itak będą nam się dublować
Dane wcale nie muszą się dublować. Wszystko można sprawdzić za pomocą prostego select-a:
  1. SELECT * FROM znajomi WHERE (id_uzytkownika=moje_id AND id_znajomego=czyjes_id) OR (id_uzytkownika=czyjes_id AND id_znajomego=moje_id)
Dane w tabeli zaproszenia możemy przechowywać, albo usuwać. Przechowywać musimy wtedy, gdy chcemy, aby użytkownik który zaproszenie od "ktosia" odrzucił, nie mógł tego "ktosia" zaprosić.

Ten post edytował mortus 27.03.2010, 00:19:12
Go to the top of the page
+Quote Post
zend
post
Post #5





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Zgadza się, że problem można zniwelować za pomocą prostego zapytania, ale zakładam że w tabeli będzie przechowywana bardzo duża liczba rekordów, więc używanie "OR" jest strzałem w własną piętę, bo wszystkie dane zostaną sprawdzone drugim warunkiem, co jest mało wydajne

@mortus - o tym właśnie pisałem w moim wcześniejszym poście
Go to the top of the page
+Quote Post
slawo
post
Post #6





Grupa: Zarejestrowani
Postów: 184
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

Ostrzeżenie: (0%)
-----


udało mi się ogarnąć zaproszenia. Teraz mam problem z wyświetlaniem znajomych. Chcę aby profile wyświetlały się tak jak na fotce, n-k itp. tzn. po 4 w rzędzie.

Napisałem take coś:

  1. $pokaz_ziomkow = mysql_query("SELECT * FROM ziomki WHERE ziomek='".urldecode($user)."' AND akceptacja='tak' OR zaprasza='".urldecode($user)."' AND akceptacja='tak' AND ziomek='".urldecode($user)."' ORDER BY id DESC")
  2. or die('');
  3.  
  4. echo "<table border=0 width=100%>
  5. <tr>
  6. <td bgcolor=#000000> <b><font color=white><b>Moje ziomki:</b></font></b></td>
  7. </tr>
  8. </table>";
  9.  
  10. while($z = mysql_fetch_assoc($pokaz_ziomkow)) {
  11.  
  12. $pokaz_dane = mysql_query("SELECT * FROM uzytkownicy WHERE login='".$z['zaprasza']."'")
  13. or die('');
  14.  
  15. while($d = mysql_fetch_assoc($pokaz_dane)) {
  16.  
  17. echo "<table border=1 width=200>
  18. <tr>
  19. <td>";
  20.  
  21. echo "<center><img src=".$z['avatar']." width=50 height=50 border=0><br><a href=pokaz_profil.php?user=".urlencode($z['zaprasza'])."><b>".$z['zaprasza']."</b></a> (".$d['miasto'].")</center>";
  22.  
  23. echo "</td>
  24. </tr>
  25. </table>";
  26.  
  27. }
  28. }


Ale wyświetla mi jeden pod drugim. Jak napisać żeby po 4 profile wyświetlało i potem enter, <br> ?




Zrobiłem to w tabelkach ale wątepie, że będzie mogła być tabelka koło tabelki.

Ten post edytował slawo 27.03.2010, 15:08:36


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Przykład
  1. <?php
  2. $liczba = 13;
  3. $liczb_w_wierszu = 3;
  4. echo '<table><tr>';
  5. for ($i = 0; $i < $liczba; $i++) {
  6. if ($i % $liczb_w_wierszu == 0 && $i != 0) {
  7. echo '</tr><tr>';
  8. }
  9. echo '<td>'.($i+1).'</td>';
  10. }
  11. for($i = 0; $i < $liczb_w_wierszu - $liczba%$liczb_w_wierszu; $i++) {
  12. echo '<td>-</td>';
  13. }
  14. echo '</tr></table>';
  15. ?>
Wystarczy przystosować (podpowiem, że $liczba to wynik funkcji mysql_num_rows()).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 04:57