Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Głosowanie zalogowanego usera
-LUCU-
post
Post #1





Goście







Witam!

PHP/mySQL działa tylko i wyłącznie lokalnie więc nie ma mowy o cookies i ip.
Mam problem ze skryptem, który będzie pozwalał tylko raz głosować zalogowanemu użytkownikowi.
Do rzeczy - 3 tabele :
Users, Utwory, Głosy

W tabeli Głosy mamy pola:
id_oceny
id_utworu
id_usera
ocena

W jaki sposób sprawdzić czy user głosował już wcześniej na utwór? Teoretycznie to proste bo wystarczy wysłać zapytanie czy id_usera oraz id_utworu znajduje się w tabeli Głosy ale słaby jestem i nie wiem w jaki sposób napisać kod, z góry dzięki za pomoc!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-LUCU-
post
Post #2





Goście







Dzięki za pomoc (IMG:style_emoticons/default/smile.gif) Jest jeden motyw , który mi spokoju nie daje - mimo tego , że tabela 'głosy' jest pusta zawsze jest echo 'juz glosowales'

  1.  
  2. $id_usera = $_SESSION['id_usera'];
  3. $id_utworu = $_POST['id_utworu'];
  4.  
  5. $glosowal = mysql_query("SELECT COUNT(id_oceny) FROM glosy WHERE id_utworu='$id_utworu' AND id_usera='$id_usera'");
  6.  
  7. if ($glosowal>0)
  8. {
  9. echo 'już głosowałeś';
  10. }
  11. else
  12. {
  13.  
  14. if ($_POST['lubi'])
  15. {
  16. mysql_query("UPDATE `utwory` SET `lubi` = `lubi` + 1 WHERE id_utworu='$id_utworu'");
  17. mysql_query("INSERT INTO glosy VALUES ('','$id_usera','$id_utworu')");
  18.  
  19. }
  20. else if ($_POST['nielubi'])
  21. {
  22.  
  23. mysql_query("UPDATE `utwory` SET `nielubi` = `nielubi` + 1 WHERE id_utworu='$id_utworu'");
  24. mysql_query("INSERT INTO glosy VALUES ('','$id_usera','$id_utworu')");
  25. }
  26. header ("location: glosowanie.php");
  27. }
  28.  
  29. ?>
Go to the top of the page
+Quote Post
bostaf
post
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(LUCU @ 8.10.2012, 21:47:08 ) *
mimo tego , że tabela 'głosy' jest pusta zawsze jest echo 'juz glosowales'

  1. $glosowal = mysql_query("SELECT COUNT(id_oceny) FROM glosy WHERE id_utworu='$id_utworu' AND id_usera='$id_usera'");
  2. if ($glosowal>0)

Zobacz w manualu, jaki rezultat zwraca funkcja mysql_query: "For SELECT [...] mysql_query() returns a resource on success, or FALSE on error." - zwraca zasób. Porównywanie do integera zawsze zwróci fałsz.
Zanim zaczniesz porównywać, musisz ten zasób obrobić, na przykład funkcją mysql_fetch_assoc:
  1. $glosowal = mysql_query("SELECT COUNT(id_oceny) FROM glosy WHERE id_utworu='$id_utworu' AND id_usera='$id_usera'");
  2. if(FALSE !== $glosowal)
  3. $wiersz_rezultatu = mysql_fetch_assoc($glosowal);
  4. $ile_ocen = (int) $wiersz_rezultatu['count(id_oceny)'];
  5. if ($ile_ocen > 0) {


Proponowałbym nieco prostszą metodę sprawdzenia w bazie, czy user głosował, bez COUNT - wtedy wynik zapytania zwróci 0 albo więcej wierszy i sprawdzenie sprowadzi się do policzenia ilości wierszy funkcją mysql_num_rows:
  1.  
  2. $q = mysql_query("SELECT id_oceny FROM glosy WHERE id_utworu='$id_utworu' AND id_usera='$id_usera'");
  3. $ile_ocen = mysql_num_rows($q);
  4. if($ile_ocen > 0) {


No i na koniec najważniejsze. Widzisz te czerwone ramki w opisach każdej funkcji mysql_ w manualu?
"Sugerowane alternatywy
Nie zaleca się stosowania tego rozszerzenia [mysql]. W zamian powinno używać się rozszerzenia MySQLi lub PDO_MySQL"
To nie jest czyjaś subiektywna opinia. To jest zalecenie twórców PHP.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 03:21