Witam mam na stronie formulaz z 2 submitami do głosowania (“cool” , “lame”).
Jak zrobić żeby zalogowany user mógł zagłosować tylko 1 raz ??
Jak ktos może to niech pomoże.
Witam mam na stronie formulaz z 2 submitami do głosowania (“cool” , “lame”).
Jak zrobić żeby zalogowany user mógł zagłosować tylko 1 raz ??
Jak ktos może to niech pomoże.
Musisz gdzieś zapisywać (najlepiej w bazie danych) użytkowników , którzy głosowali. Przy oddaniu głosu sprawdzasz, czy użytkownik jest na liście, jeśli tak to nie pozwalasz mu głosować, albo najlepiej sprawdzasz to przed wyświetleniem formularza i zamiast niego wyświetlasz mu jakąś informację, że juz głosował (choć niezależnie od tego, musisz sprawdzać to przy zapisywaniu głosu).
No to tak zrobiłem ale każdy moze 2 razy głosować jeśli po losowaniu nie zmieni strony tylko spróbuje jeszcze raz albo odświezy strone.
A jak już jest w bazie to nie może to działa ale czemu 2 razy??
Mam taki kod: (fragment)
require('config.php');
$query=mysql_query("SELECT kto FROM `glosy` WHERE utwor = '$utwor'");
$i=0;
while($row=mysql_fetch_assoc($query))
{
$wyniki[$i]=$row;
$i++;
}
$kto= $wyniki[0]['kto'];
if ($kto==$nick)
{
$blokuj="disabled='disabled'";
}
else{$blokuj="";
}
echo "
";
I po wciśnięciu pliku zapisuje kto głosował w bazie danych:
$zap="INSERT INTO glosy(kto, utwor) VALUES('$nick', '$utwor')";
mysql_query($zap) or die (mysql_error());
header("Location: kategorie.php");
Idziała ale dopiero jeśli ten kto głosował po oddaniu głosu wejdzie na inną strone a potem znowu wejdzie ta z głosowaniem a jeśli odswiezy strone albo wciśnie jeszcze raz to głosuje 2 raz i dopiero za 2 razem ma stałą blokade
Na początek zmień zapytanie sprawdzające czy ten ktoś już głosował, na coś takiego:
$query=mysql_query("SELECT count(kto) FROM `glosy` WHERE utwor = '$utwor' AND kto='$nick'"); [/code]
W ten sposób dostaniesz w odpowiedzi jeden wiersz z liczbą oddanych głosów przez konkretnego użytkownika, jeśli jest więcej niż zero, to oznacza, że już głosował. Nie ma potrzeby pobierania wszystkich i szukania w pętli.
Druga sprawa, to to, że zablokowanie formularza nie uniemożliwia oddania fałszywego głosu, jak ktoś będzie chciał to odblokuje sobie formularz w przeglądarce i i tak odda głos, więc przed zapisaniem głosu, musisz jeszcze raz sprawdzić, czy ta osoba nie oddała już głosu - to da Ci pewność, że nikt nie oszuka.
Ok dzięki.
Wieczorem spróbuje poprawic i napisze czy działa.