Mam problem ze skryptem sondy. Przerobiłem go co nieco z sondy czteroplikowej na dwuplikową, i z dwóch opcji do wyboru na 3 opcje, badz więcej. Mam jednak problem z ciasteczkiem które blokuje głosowanie - zaraz po uruchomieniu wywala mi że "już głosowałem". Kombinowałem, ale coś mi nie wychodzi, domyślam się że ciasteczko jest zapisywane w niewłaściwym momencie, tylko nie wiem już w którym miejscu skryptu ma ono być umieszczone.
Kod
if (isset($_COOKIE['mojasonda']))
{
echo("Już głosowałeś!");
/*warunek sprawdza czy istnieje w przeglądarce ciasteczko o nazwie
"mojasonda", jeśli tak to nie pozwala na ponowne oddanie głosu*/
}
else
{
/*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 if ($_POST['glos'] == 3)
$wyniki[2] += 1;
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]:$wyniki[2]:", 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: sonda.php");
/*przekierowanie przeglądarki do pliku pokaz.php*/
/*koniec interpretowanego bloku*/
setcookie("mojasonda", "glosowalem", time()+ 604800);
/*to polecenie wysyła do przeglądarki ciasteczko o nazwie "mojasonda"
i zawartości "glosowalem", ciasteczko będzie ważne 604800 sekund,
czyli równy tydzień, po tygodniu będzie można znowu glosować*/
header("Location: sonda.php");
}
echo '
<form action="sonda.php" method="post">
<p>Co sądzisz o gotowanej marchewce?<br />
<input type="radio" name="glos" value="1" />Uwielbiam<br />
<input type="radio" name="glos" value="2" />Nienawidzę<br />
<input type="radio" name="glos" value="3" />Niewiem<br />
<input type="submit" value="Zagłosuj" />
</p>
</form>
';
$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] + $wyniki[2];
/*zsumowanie wyników*/
?>
<table>
<tbody>
<tr><td>Lubiący gotowaną marchewkę:</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.gif" alt="pasek.gif"
title="Za marchewką!" 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>Nienawidzący gotowanej marchewki:</td><td>
<?php
echo(round($wyniki[1]/$suma * 100));
?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Przeciw marchewce!" height="10" width="
<?php
echo(round($wyniki[1]/$suma * 100));
?>
" /></td></tr>
<tr><td>Nienawidzący gotowanej marchewki:</td><td>
<?php
echo(round($wyniki[2]/$suma * 100));
?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Przeciw marchewce!" height="10" width="
<?php
echo(round($wyniki[2]/$suma * 100));
?>
" /></td></tr>
</tbody>
</table>
<p>Ogołem oddano głosów: <?php echo($suma); ?>.</p>
{
echo("Już głosowałeś!");
/*warunek sprawdza czy istnieje w przeglądarce ciasteczko o nazwie
"mojasonda", jeśli tak to nie pozwala na ponowne oddanie głosu*/
}
else
{
/*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 if ($_POST['glos'] == 3)
$wyniki[2] += 1;
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]:$wyniki[2]:", 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: sonda.php");
/*przekierowanie przeglądarki do pliku pokaz.php*/
/*koniec interpretowanego bloku*/
setcookie("mojasonda", "glosowalem", time()+ 604800);
/*to polecenie wysyła do przeglądarki ciasteczko o nazwie "mojasonda"
i zawartości "glosowalem", ciasteczko będzie ważne 604800 sekund,
czyli równy tydzień, po tygodniu będzie można znowu glosować*/
header("Location: sonda.php");
}
echo '
<form action="sonda.php" method="post">
<p>Co sądzisz o gotowanej marchewce?<br />
<input type="radio" name="glos" value="1" />Uwielbiam<br />
<input type="radio" name="glos" value="2" />Nienawidzę<br />
<input type="radio" name="glos" value="3" />Niewiem<br />
<input type="submit" value="Zagłosuj" />
</p>
</form>
';
$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] + $wyniki[2];
/*zsumowanie wyników*/
?>
<table>
<tbody>
<tr><td>Lubiący gotowaną marchewkę:</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.gif" alt="pasek.gif"
title="Za marchewką!" 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>Nienawidzący gotowanej marchewki:</td><td>
<?php
echo(round($wyniki[1]/$suma * 100));
?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Przeciw marchewce!" height="10" width="
<?php
echo(round($wyniki[1]/$suma * 100));
?>
" /></td></tr>
<tr><td>Nienawidzący gotowanej marchewki:</td><td>
<?php
echo(round($wyniki[2]/$suma * 100));
?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Przeciw marchewce!" height="10" width="
<?php
echo(round($wyniki[2]/$suma * 100));
?>
" /></td></tr>
</tbody>
</table>
<p>Ogołem oddano głosów: <?php echo($suma); ?>.</p>