Skrypt głosowania php

Skrypt głosowania php

Wątek zablokowany 2018-10-19 10:46 przez Patryk27.

K2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Witam. Robię prosty skrypt głosowania w php.

Wszystko szło mi bez przeszkód, do momentu w którym musiałem zablokować ponowną możliwość głosowania.
Wybrałem rozwiązanie z IP i jego zapisem do bazy danych gdyż: sesja się sypie, ciastka można wyłączyć/usunąć.

W tabeli glosy mam : id, glos, ip, rekord.

Poprawnie zapisuję wyniki glosowania, lecz gdy chcę sprawdzić czy ktoś głosował, wyskakuje mi błąd.
Próbowałem tak :

Kopiuj
$query = mysql_query("SELECT * FROM oceny WHERE rekord = ".$_GET['id']." AND ip = ".$_SERVER[REMOTE_ADDR]." ");
				$liczba = mysql_num_rows($query);
if ($liczba >0 ) { echo "Głosowałeś już";}
 

Gdy tak zrobię, wyskakuje mi błąd :

Kopiuj
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in [ścieżka] on line [linia] 

I tu moja prośba, czy mógłby ktoś pomóc mi to rozwiązać ? Ewentualnie poprawić to co zrobiłem ?

Bardzo proszę i z góry dziękuję! Pozdrawiam

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Hm...

Kopiuj
$_SERVER[REMOTE_ADDR]

->

Kopiuj
$_SERVER['REMOTE_ADDR']

K2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Nie Patryk, nie w tym rzecz. Próbowałem już tak, dalej ten sam błąd.
Uprzejmie proszę o dalszą pomoc :)

GI
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 12 lat
1
Kopiuj
$query = mysql_query("SELECT * FROM oceny WHERE rekord='$_GET[id]' AND ip='$_SERVER[REMOTE_ADDR]'");

Ja uważam że najlepszy zawsze będzie PHP a ASP.NET jest niepotrzebny i tyle na ten temat - Adamlewczuk
Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:11 dni
  • Postów:2792
0

2 pomysły:

  1. Brak połączenia z bazą.
  2. ip w apostrofach.
Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
0

Nauczcie się sprawdzać czy zapytanie nie zwróciło FALSE, a jeśli tak rzucać wyjątkiem z mysql_error(). Problem solved.


Women were the reason I became a monk - and, ah, the reason I switched back...
KO
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 10 lat
  • Postów:114
0

Jak już to

Kopiuj
$liczba = mysql_num_rows("SELECT * FROM oceny WHERE rekord = ".$_GET['id']." AND ip = ".$_SERVER[REMOTE_ADDR]);
if ($liczba >0 ) { echo "Głosowałeś już";}
//a lepiej
$liczba =  mysql_fetch_object(mysql_query("SELECT COUNT(*) AS row_count FROM oceny WHERE rekord = ".$_GET['id']." AND ip = ".$_SERVER[REMOTE_ADDR]));
Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
0

Zanim zaczniecie [CIACH!] głupoty jak zwykle proponuję chociaż PRZECZYTAĆ WPIS W MANUALU I ZOBACZYĆ PRZYKŁADY

http://ipu.4programmers.net/6f9a/geniusze_mysqla.jpg

Wymyślanie użycia z d**y i korzystanie ze stałych które nie istnieją żeby się evalnęły do stringa (ave REMOTE_ADDR) przyprawia o gorączkę.


Women were the reason I became a monk - and, ah, the reason I switched back...
KO
A to sorry ale nigdy nie używałem mysql_num_rows :P więc $liczba = mysql_fetch_object(mysql_query("SELECT COUNT(*) AS row_count FROM oceny WHERE rekord = ".$_GET['id']." AND ip = ".$_SERVER['REMOTE_ADDR']));
KO
Tera to już nie widze co źle :P na moje oko dobre ale nie chce mi się sprawdzać :P
Kwpolska
@konrados: radze wcale nie uzywac, tylko przejsc na PDO, ew. mysqli_. mysql_ jest zdeprecjonowane.
K2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Rozwiązane z pomocą gienka (dziękuję)

Kopiuj
$liczba = mysql_num_rows($query = mysql_query("SELECT * FROM oceny WHERE rekord='$_GET[id]' AND ip='$_SERVER[REMOTE_ADDR]'"));
				if ($liczba > 0) {echo "Głosowaleś już dzisiaj";} 

Do zamknięcia.

Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
2
krzysiek2541 napisał(a)

Rozwiązane z pomocą gienka (dziękuję)

Kopiuj
$liczba = mysql_num_rows($query = mysql_query("SELECT * FROM oceny WHERE rekord='$_GET[id]' AND ip='$_SERVER[REMOTE_ADDR]'"));
				if ($liczba > 0) {echo "Głosowaleś już dzisiaj";} 

Do zamknięcia.

?id='; DROP TABLE oceny ;--
I twoja tabela znika.


Women were the reason I became a monk - and, ah, the reason I switched back...
K2
Racja, trzeba się zabezpieczyć przed sql injection. Dzięki Demonical Monk.
K2
Hm, spróbowałem, nie znikła :D
Demonical Monk
Poczytaj artykuły o SQL Injection.
K2
Wystarczy jak wykorzystam mod_rewrite w .htaccess ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.