Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Skrypt oceniania
Forum PHP.pl > Forum > Przedszkole
Wojtek0Adam
Witam,
tworzę skrypt oceniania artykułów, w którym głosować mogą tylko raz zalogowani.
Wszystko działa, można głosować, tylko nie mam pojęcia jak zrobić, by można było głosować tylko raz.
  1. $stmt = $pdo -> query('SELECT * FROM `user`, `oceny` WHERE `id_art` = \''.(int)$_GET['id'].'\'');
  2. foreach ($stmt as $row)
  3. {
  4. if ($row['id_dod'] == $_SESSION['user_id'])
  5. {
  6. echo 'Już głosowałeś!';
  7. }
  8. else {
  9. /* kod dodawania */
  10. }
  11. }

Coś w tym skrypcie jest nie tak? Proszę o odpowiedź. smile.gif
vegeta
Zapodaj jeszcze tabelkę oceny.
retep86
Za mało danych aby Ci pomóc. Przydałaby się tabelka 'oceny'i ewentualnie 'user'.
Wojtek0Adam
OK.
Tabelka oceny:
  1. CREATE TABLE `oceny` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_pio` int(11) NOT NULL DEFAULT '0',
  4. `id_dod` int(11) NOT NULL DEFAULT '0',
  5. `wart` tinyint(4) NOT NULL DEFAULT '0',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM

Tabelka user (pola najważniejsze):
  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(30) NOT NULL DEFAULT '',
  4. `haslo` varchar(35) NOT NULL DEFAULT '',
  5. `rej` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. `mail` varchar(35) NOT NULL DEFAULT '',
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `login` (`login`),
  9. UNIQUE KEY `mail` (`mail`)
  10. ) ENGINE=MyISAM
thek
O, żesz... a po co aż tak szaleć w zapytaniu winksmiley.jpg Walnij po prostu czy w tabeli 'oceny' zapytanie o rekord gdzie id usera zgadza się z tym w sesji i jednocześnie id ankiety jest identyczne z tą, które właśnie user odwiedza lub próbuje submitować. Jeśli taki rekord istnieje, znaczy, że już głosował i nie ma prawa tego ponownie zrobić. A gdy odwiedzi stronę głosowania ponownie, nie ma się nawet prawa pojawić możliwość głosowania, czyli na stronie brak formularza głosowania, ale a to wyniki tej ankiety.
vegeta
Cytat(thek @ 20.08.2010, 00:04:18 ) *
O, żesz... a po co aż tak szaleć w zapytaniu winksmiley.jpg Walnij po prostu czy w tabeli 'oceny' zapytanie o rekord gdzie id usera zgadza się z tym w sesji i jednocześnie id ankiety jest identyczne z tą, które właśnie user odwiedza lub próbuje submitować.


ID ankiety jest pewnie automatycznie +1 w mysql winksmiley.jpg

  1. $stmt2 = $pdo -> query('SELECT * FROM `oceny` WHERE `id_pio` = \''.(int)$_GET['id'].'\' AND `id_dod` = \''.(int)$_SESSION['user_id'].'\'');
  2. if (isset($stmt2))
  3. {
  4. echo 'Już głosowałeś!';
  5. }
Wojtek0Adam
Chyba sobie jakoś poradziłem.
  1. $stmt2 = $pdo -> query('SELECT * FROM `oceny` WHERE `id_pio` = \''.(int)$_GET['id'].'\' AND `id_dod` = \''.(int)$_SESSION['user_id'].'\'');
  2. foreach ($stmt2 as $row2)
  3. {
  4. $l = 1;
  5. }
  6. if ($l==1)
  7. {
  8. echo 'Już głosowałeś!';
  9. }
  10. else
  11. {
  12. /* kod dodawania */
  13. }

Nie wiedziałem jak inaczej zrobić winksmiley.jpg
thek
A może po prostu policz ile tych rekordów? Albo count w zapytaniu, albo po odebraniu wyników smile.gif W wyniku 0 - nie głosował. Jeśli 1 - głosował smile.gif
lord2105
a może do tabeli ankiety dodaj kolumnę users i przy każdym artukule zapisuj w niej ID userów (jako tablice) którzy już głosowali później sprawdzaj czy przy danym artykule w zapisanej tablicy jest ID aktualnie zalogowanego usera jak nie to pozwól zagłosować.
thek
Wyobrażasz sobie zapis i edycje takiej informacji lord? Odczytać id, unserialize tablicy, sprawdzenie, jeśli nie był a zagłosował to dodanie, ponowna serializacja, zapis. Brrrr... smile.gif O wiele wygodniejsza tabela łącząca.
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.