![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%)
|
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> |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%)
|
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:
|
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 22:41 |