Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokada dodawania głosów w sondzie.
Forum PHP.pl > Forum > PHP
Mateusz10
Witam!
Niedawno znalazłem znakomitą sondę wszystko było by ok gdyby tylko była blokada że jeżeli ktoś już oddał głos nie może zrobić tego ponownie w ciągu jednego dnia. I dlatego występuję do was z pytaniem czy może wiecie jak zrobić taką blokadę?
Poniżej prezentuje skrypty sondy:

Index.php
<form action="glosuj.php" method="post">
<strong>Jak Ci Się Podoba Nasza Strona?</strong><br>
<input type="radio" name="glos" value="1" class="sondaodp" /> Jest Super<br>
<input type="radio" name="glos" value="2" class="sondaodp" /> Może Być<br>
<input type="radio" name="glos" value="3" class="sondaodp" /> Jest Beznadziejna<br>
<input type="submit" value="Głosuj" />
</form>

Glosuj.php
<?php
/*Początek interpretowanego bloku */

$plik = fopen("wyniki.txt", "r");
/*otwarcie do odczytu pliku z wynikami*/

$dane = fread($plik, filesize("wyniki.txt"));
/*odczytanie z pliku z wynikami danych i zapisanie ich do
zmiennej $dane odczytanych zostanie tylko tyle znaków ile
istnieje w pliku, nie mniej, nie więcej*/

$wyniki = split(":", $dane);
/*wydzielenie dwóch wyników, rozdzielenie zawartości zmiennej
po znaku dwukropka*/

fclose($plik);
/*zamknięcie pliku*/

if($_POST['glos'] == 1)
$wyniki[0] += 1;
/*jeśli użytkownik głosował "za" marchewką,
czyli zmienna "glos" ma wartość jeden to do
wyników za dopisywany jest jeden głos*/

else if ($_POST['glos'] == 2)
$wyniki[1] += 1;
/*analogiczna operacja do poprzedniej, ale dodawany jest
głos "przeciw"*/

else
;
/*instrukcja dla reszty przypadków, które teoretycznie nie
powinny nastąpić*/

$plik = fopen("wyniki.txt", "w");
/*ponowne otwarcie pliku z wynikami, tym razem do zapisu, plik
jest wyzerowany*/

flock($plik, 2);
/*zablokowanie pliku przed innymi skryptami, które będą chciały
zapisywać*/

fwrite($plik, "$wyniki[0]:$wyniki[1]:", 200);
/*zapis wyników do pliku, 200 znaków z powodzeniem wystarczy*/

flock($plik, 3);
/*zdjęcie blokady z pliku*/

fclose($plik);
/*zamknięcie pliku*/

header("Location: pokaz.php");
/*przekierowanie przeglądarki do pliku pokaz.php*/

?>

/*koniec interpretowanego bloku*/

Pokaz.php
<?php
$plik = fopen("wyniki.txt", "r");
/*otwarcie pliku z wynikami do odczytu*/

$dane = fread($plik, filesize("wyniki.txt"));
/*odczytanie wszystkich bajtów z pliku*/

fclose($plik);
/*zamknięcie pliku*/

$wyniki = split(":", $dane);
/*rozdzielenie wyników*/

$suma = $wyniki[0] + $wyniki[1];
/*zsumowanie wyników*/

?>

<table>
<tbody>

<tr><td>Jest Super:</td><td>
<?php
echo(round($wyniki[0]/$suma * 100));
/*wyświetlenie zaokrąglonej procentowej ilości głosów,
znak procenta jest w następnej linijce*/

?>
%</td><td>

<img src="pasek.jpg" alt="pasek.jpg"
title="Jest Super" height="10" width="
<?php
echo(round($wyniki[0]/$suma * 100));
/*podobnie jak wcześniej, tyle, że wyświetlona liczba będzie
szerokością graficznego paska, w tym wypadku liczba 100 jest
maksymalną szerokością paska */

?>
" /></td></tr>

<tr><td>Może Być:</td><td>
<?php
echo(round($wyniki[1]/$suma * 100));
?>
%</td><td>
<img src="pasek.jpg" alt="pasek.jpg"

title="Może Być" height="10" width="
<?php
echo(round($wyniki[0]/$suma * 100));
/*podobnie jak wcześniej, tyle, że wyświetlona liczba będzie
szerokością graficznego paska, w tym wypadku liczba 100 jest
maksymalną szerokością paska */

?>
" /></td></tr>

<tr><td>Jest Beznadziejna:</td><td>
<?php
echo(round($wyniki[1]/$suma * 100));
?>
%</td><td>
<img src="pasek.jpg" alt="pasek.jpg"

title="Jest Beznadziejna" height="10" width="
<?php
echo(round($wyniki[1]/$suma * 100));
?>
" /></td></tr>
</font>
</tbody>

</table>
<p>Ogołem oddano głosów: <?php echo($suma); ?>

Blokada ma być na 24 godziny.
kajzur
Hm, może zapisz cookie na kompie usera? Daj mu ważność dobę, a w skrypcie sprawdzaj czy istnieje ciasteczko ;>
Mateusz10
w tym skrypcie nie ma blokady ciasteczek i ja chcę żeby ktoś mi zrobił blokadę ciasteczek na 24 godziny właśnie pod ten skrypt tak ażeby jedna osoba nie mogła głosować 2 czy więcej razy w ciągu dnia!
rzymek01
było na forum ,poszukaj
Mateusz10
Nie znalazłem może pomożecie?
rzymek01
widocznie źle szukałeś, bylo wiele razy wałkowane blokady ip, cookies, sesje i inne najprzeróżniejsze sposoby sadsmiley02.gif
kajzur
Patrz.. Robisz sobie ciateczko, masz taką funkcję setcookie - http://pl.php.net/setcookie

Takie cos utworzy ciastko na 1h:
Kod
setcookie("TestCookie", $value, time()+3600);


A Ty masz na dobę, czyli razy 24 smile.gif Później sprawdzasz if'em czy istnieje, jesli tak, to

echo 'Głosowałes już';

jesli nie, to normalmy kod smile.gif
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.