Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z sondą
Forum PHP.pl > Forum > Przedszkole
shreker
Witam Panowie.
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>
Foxx
1. Używaj prawidłowych znaczników bbcode, bardzo ciężko się to czyta.
2. Zakładam, że robisz porządek z ciastkiem? Bo może po prostu już głosowałeś?
3. Jak się nazywa plik, który wkleiłeś? Jeżeli pokaz.php i wszystko się rozgrywa w 1 pliku to może masz bałagan w headerach i po uruchomieniu skryptu od razu następuje przekierowanie? A bałagan w headerach masz na pewno:
  1. <?php
  2. header("Location: sonda.php");
  3. /*przekierowanie przeglądarki do pliku pokaz.php*/
  4.  
  5. /*koniec interpretowanego bloku*/
  6.   setcookie("mojasonda", "glosowalem", time()+ 604800);
  7.   /*to polecenie wysyła do przeglądarki ciasteczko o nazwie "mojasonda"
  8.    i zawartości "glosowalem", ciasteczko będzie ważne 604800 sekund,
  9.    czyli równy tydzień, po tygodniu będzie można znowu glosować*/
  10.  
  11.   header("Location: sonda.php");
  12. ?>
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.