Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosty skrypt sondy
Forum PHP.pl > Forum > PHP
Savail
Czesc
Niedawno wzialem sie za kurs php i postanowilem stworzyc sobie prosty skrypt sondy w php, lecz jak zawsze mam bledy poczatkujacego i nie wiem jak je rozwiazac ;p. formularz tej sondy to:
  1. <form action="skrypt.php" method="post">
  2. Jakie żarcie lubisz najbardziej?<br/>
  3. <input type=radio name="zarcie" value="pizza">Pizza<br/>
  4. <input type=radio name="zarcie" value="kartofle">Kartofle<br/>
  5. <input type=radio name="zarcie" value="sharma">Sharma<br/>
  6. <input type=submit value="Wyślij">
  7.  

a kod php to:
  1. <?php
  2. $x = 0;
  3. $y = 0;
  4. $z = 0;
  5.  
  6. switch($_POST['zarcie']){
  7. case pizza:
  8. echo "Pizza";
  9. for( $x = 0; $x >= 0; $x++ )
  10. echo $x. " ";
  11. break;
  12. case kartofle:
  13. echo "Kartofle";
  14. for( $y = 0; $y >= 0; $y++ )
  15. echo $y. " ";
  16. break;
  17. case sharma:
  18. echo "Sharma";
  19. for( $z = 0; $z >= 0; $z++ )
  20. echo $z. " ";
  21. break;
  22. }
  23. ?>


Chcialem zeby po zaglosowaniu na np pizza liczba obok pizzy zwiekszala sie o 1, tymczasem nastepuje odliczenie od 0 do nieskonczonosci ;p. Nie wiem takze jak zrobic aby tylko raz uzytkownik mogl zaglosowac z danego ip.
Bede wdzieczny za pomoc!!
Wiktor P.
Cytat(Savail @ 19.09.2009, 08:45:12 ) *
Nie wiem takze jak zrobic aby tylko raz uzytkownik mogl zaglosowac z danego ip.

Może zacznę od końca.
IP osób wchodzących na twoją stronę znajdziesz w tablicy $_SERVER, a konkretnie jest to $_SERVER['REMOTE_ADDR'];
Aby ktoś raz tylko głosował z danego IP powinieneś zapisać IP w bazie danych.
Trzeba mieć jednak pewne rozeznanie, czy ktoś korzysta z stałego, czy zmiennego nr IP.
Możesz to sprawdzić np tutaj:
http://ip.boo.pl/ip.php

Jeśli ktos ma zmienne IP, a ty go zablokujesz, to wystarczy, że zrestartuje sobie połączenie (np. router) aby IP mu się zmieniło,
z kolei jego poprzednie IP może zostać przypisane komuś innemu, kto póżniej połączy się z siecią.

Można też zrobić tak, aby przy użyciu sesji internauta mógł tylko raz głosować, ale po zgaszeniu przeglądarki i uruchomieniu
ponownie sesja znika, więc znów mógłby zagłosować.
Ewentualnie skorzystaj z cookie.

Cytat
Chcialem zeby po zaglosowaniu na np pizza liczba obok pizzy zwiekszala sie o 1

  1.  
  2.  
  3. if ( $_POST['zarcie'] == 'pizza') )
  4. {
  5. $_SESSION['pizza']++;
  6. echo $_SESSION['pizza'];
  7. }
  8.  


I tak z całą resztą.

Cytat
Chcialem zeby po zaglosowaniu na np pizza liczba obok pizzy zwiekszala sie o 1, tymczasem nastepuje odliczenie od 0 do nieskonczonosci ;

Do zwiększania o 1 służy operator inkrementacji ++, do zmniejszania operator dekrementacji --.
Twoja pętla
Cytat
  1. for( $x = 0; $x >= 0; $x++ )

w pierwszym i drugim argumencie dotyczy tej samej liczby, czyli zera - nic dziwnego, że otrzymałeś nieoczekiwany wynik.

Pamiętaj, że do zapisu danych otrzymanych z formularza powinieneś użyć bazy danych, sesji lub cookie.
Bez tego będzie ciężko zliczać wyniki, bo po każdym kolejnym wysłaniu formularza strona ci się przeładuje i zmienne php znikną.
Savail
heh ok to jeszcze poczytam w kursie bo o bazach danych jeszcze nic nei wiem ;p, ale dzieki za wskazowki i pomoc smile.gif
Wiktor P.
Nie ma za co.
Tak się trochę pospieszyłem i chyba nie napisałem wszystkiego co miałem na myśli.
Chodzi mi konkretnie o cookies.

  1. setcookie('pizza', $_SESSION['pizza']);
  2. if ( $_POST['zarcie'] == 'pizza') )
  3. {
  4. $_SESSION['pizza']++;
  5. echo $_COOKIE['pizza'];
  6. }


Cookie odczytasz nawet jak wyłaczysz i włączysz jeszcze raz przegladarkę.
Jest to rozwiązanie tylko dla jednej przegladarki, więc na innej wartość ile razy kliknięto na pizze będzie inna.
Bez bazy danych trochę trudno cokolwiek robić.
Ale to chyba normalna sprawa, że najpierw się zaczyna od czegoś 'lżejszego', czyli cookie, sesje, a potem bierze się za bazy danych.
Podczas treningu pamiętaj, że funkcje setcookie i session_start muszą być wysłane jako pierwsze w skrypcie przed jakąkowliek treścią.
No i nie zapominaj, że przy zabawie z cookie czasami jego prawdziwą wartość poznasz dopiero po odświerzeniu strony (F5).

Savail
heh no narazie to wlasnie robilem ta sonde nie na potrzeby strony ale zeby potrenowac php, przy okazji mozna stworzyc sonde bez uzywania bazy danych??
Wiktor P.
Cytat(Savail @ 19.09.2009, 11:13:56 ) *
mozna stworzyc sonde bez uzywania bazy danych??

Można. Pomijam kwestię cookie.
Zapomniałem właściwie wcześniej wspomnieć o obsłudze plików.
Możesz sobie wyniki zapisywać w plikach tekstowych.
Tu będą przydatne funkcje fopen, fclose, fgetc, fgets, fputs, fread, fwrite i kilka innych.
Z reguły jednak takie rozwiązanie jest mało praktyczne.

Są strony gdzie jest pokazane jak to robić, np:
http://4programmers.net/PHP/FAQ/Jak_zrobić..._na_plikach_txt
Savail
Dobra, wielkie dzieki za odpowiedzi pomoc i linki raz jeszcze winksmiley.jpg
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.