Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sonda + Cookie - nie do końca działa...
Forum PHP.pl > Forum > Przedszkole
Niedźwiedź
Witam!
Piszę sobię prostą otwartą stronkę (w senie że nie ma kont użytkowników i mieć nie będzie) ośrodka wypoczynkowego, który prowadzę. Chciałbym mieć na tej stronie ankietę, poprzez którą klienci mogliby ocenić świadczone usługi. No ale nie chciałbym aby mogli klikać raz za razem. Dlatego cookies wydają mi się nienajgorszym wyborem, tym bardziej że nei jest to w żadnym wypadku portal społecznościowy czy coś. Napisałem sobie więc taką ankietę:

  1. <?php
  2.    if(!isset($_COOKIE['marysienka'])){
  3.        echo "<p style=\"margin: 41px 26px 16px 12px; text-align:center; font-size:12px; color:#361f0d; font-weight:bold; font-family:Arial;\">Korzystałeś z naszych usług? Możesz nas ocenić!</p>";
  4.        echo "<form action=\"data/survey.php\" method=\"post\" target=\"\">";
  5.        echo "<center><font style=\"font-family:Arial; color:#361f0d; font-size:12px\">Twoja ocena:</font> <select name=\"rating\" class=\"survey\">";
  6.        for($i=1;$i<7;$i++) echo "<option>",$i,"</option>";
  7.        echo "</select><br><br>";
  8.        echo "<input class=\"survey\" type=\"Submit\" name=\"survey\" value=\"Oceń!\">";
  9.        echo "</center></form>";
  10.    }else{
  11.        echo "<p style=\"margin-top: 41px; margin-right=16px; margin-left: 12px; text-align:center; font-size:12px; color:#361f0d; font-weight:bold; font-family:Arial;\">Już głosowałeś!</p>";
  12.        $file=fopen("nrate.dat","r");
  13.        $nrate=fgets($file);
  14.        fclose($file);
  15.        $file=fopen("srate.dat","r");
  16.        $srate=fgets($file);
  17.        fclose($file);
  18.        echo "<p style=\"margin-bottom: 26px; margin-right=16px; margin-left: 12px; text-align:center; font-size:12px; color:#361f0d; font-weight:bold; font-family:Arial;\">Średnia ocena wynosi ",round($srate/$nrate,2),"<br>";
  19.        echo "Głosowało już ",$nrate," osób.</p>";
  20.    }
  21. ?>


Plik survey.php:
  1. <?php setcookie('marysienka',$_POST['rating'],time()+86400);
  2.    $file=fopen("nrate.dat","r");
  3.    $nrate=fgets($file);
  4.    fclose($file);
  5.    $file=fopen("srate.dat","r");
  6.    $srate=fgets($file);
  7.    fclose($file);
  8.    $nrate=$nrate+1;
  9.    $srate=$srate+$_POST['rating'];
  10.    $file=fopen("nrate.dat","w");
  11.    fwrite($file,$nrate);
  12.    fclose($file);
  13.    $file=fopen("srate.dat","w");
  14.    fwrite($file,$srate);
  15.    fclose($file);
  16. ?>
  17. <html>
  18.    <head>
  19.        <meta http-equiv="refresh" content="0; url=http://localhost/~kamil/marysienka/show.php?name=home">
  20.    </head>
  21. </html>


Naliczanie głosów działa bez problemu, ale instrukcja if(!isset($_COOKIE['marysienka'])) {...}else{...} nigdy nie wchodzi w zbiór else. Co wiecej, gdy dodałem instrukcję echo $_COOKIE['marysienka'] do pliku z ankietą, to po zagłosowaniu instrukcja nie zwróciła, żadnych wartości... Tak jakby cookie wygasało.

Jednak gdy utworzyłem plik temp.php o zawartości <?php echo $_COOKIE['marysienka']; ?>, to po jego wywołoaniu otrzymałem wartość zapisaną w cookie.

Czy może mi ktoś wyjaśnić dlaczego ten skrypt nie działa?

Z góry thx za pomoc.

Pozdrawiam,
Kamil
Kojak
Uruchomiłem ten podany przez Ciebie skrypt i zagłosowałem. I teraz nie mogę głosować (tak więc weszło w sekcje ELSE). W pliku index.php na samym końcu wywołaj funkcję phpinfo(); i po zagłosowaniu wklej jej zawartość.
Niedźwiedź
Hmmm teraz jak sprawdziłem plik ze skryptem to faktycznie działa... Problem pojawia się w głółwnym szablonie strony, gdzie skrypt ankiety jest includowany - wtedy w ogole nie widzi cookie...

Niżej link do tego, co zwraca phpinfo(). (plik rtf)

PHP INFO

Pozdrawiam,
Kamil

Podbijam. Ktoś coś wymyśliłquestionmark.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.