Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz z checkbox'ami
Forum PHP.pl > Forum > PHP
gruber84
Witam,
ponieważ dopiero zaczynam przygodę z PHP mam taki "trywialny" problem, a minowicie mam taki formularz :

Kod
   <form action="odczyt.php method="post">
   <div>
   <input name="Nazwa" />Podaj swoje imię i nazwisko(lub pseudonim - nick name)
   <input name="Poczta" />Podaj adres poczty elektronicznej
  
   <p>Podaj swoją płeć:</p>
   <input type="radio" name="Plec" value="Kobieta" />Kobieta
   <input type="radio" name="Plec" value="Mezczyzna" />Mężczyzna
  
   <p>Ile masz lat?</p>
   <input type="radio" name="Wiek" value="do 20" />do 20
   <input type="radio" name="Wiek" value="21-30" />21-30
   <input type="radio" name="Wiek" value="31-40" />31-40
   <input type="radio" name="Wiek" value="41-50" />41-50
   <input type="radio" name="Wiek" value="51-60" />51-60
   <input type="radio" name="Wiek" value="powyzej 60" />powyżej 60
    
   <p>Czym się zajmujesz?</p>
   <input type="checkbox" name="Zajecie[]" value="Ucze sie" />Uczę się
   <input type="checkbox" name="Zajecie[]" value="Pracuje" />Pracuję
   <input type="checkbox" name="Zajecie[]" value="Jestem na emeryturze" />Jestem na emeryturze
   <input type="checkbox" name="Zajecie[]" value="Inne" />Inne
  
   <p>Jak duża jest Twoja miejscowość? (liczba mieszkańców)</p>
   <input type="radio" name="Miejscowosc" value="Do 10 tys." />Do 10 tyś.
   <input type="radio" name="Miejscowosc" value="10 - 50 tys." />10 - 50 tyś.
   <input type="radio" name="Miejscowosc" value="50 - 100 tys." />50 - 100 tyś.
   <input type="radio" name="Miejscowosc" value="100 tys. - 1 milion" />100 tyś. - 1 milion
   <input type="radio" name="Miejscowosc" value="ponad 1 milion" />ponad 1 milion
  
   <p>Jakiego komputera używasz?</p>
   <input type="checkbox" name="Komputer[]" value="PC Pentium" />PC Pentium
   <input type="checkbox" name="Komputer[]" value="PC Pentium Celeron" />PC Pentium Celeron
   <input type="checkbox" name="Komputer[]" value="PC Pentium II" />PC Pentium II
   <input type="checkbox" name="Komputer[]" value="PC Pentium III" />PC Pentium III
   <input type="checkbox" name="Komputer[]" value="PC Pentium IV" />PC Pentium IV
   <input type="checkbox" name="Komputer[]" value="PC AMD" />PC AMD
   <input type="checkbox" name="Komputer[]" value="Macintosh" />Macintosh
   <input type="checkbox" name="Komputer[]" value="Sun" />Sun
  
   <p>Jakiego systemu operacyjnego używasz?</p>
   <input type="checkbox" name="System[]" value="Windows 98" />Windows 98
   <input type="checkbox" name="System[]" value="Windows ME" />Windows ME
   <input type="checkbox" name="System[]" value="Windows 2000" />Windows 2000
   <input type="checkbox" name="System[]" value="Windows NT" />Windows NT
   <input type="checkbox" name="System[]" value="Windows XP" />Windows XP
   <input type="checkbox" name="System[]" value="Windows Vista" />Windows Vista
   <input type="checkbox" name="System[]" value="Linux" />Linux
   <input type="checkbox" name="System[]" value="Inny Unix" />Inny Unix
   <input type="checkbox" name="System[]" value="MacOS" />MacOS
   <input type="checkbox" name="System[]" value="Inny" />Inny
  
   <p>Jakiej przeglądarki www używasz najczęściej?</p>
   <input type="checkbox" name="Przegladarka[]" value="Internet Explorer" />Internet Explorer
   <input type="checkbox" name="Przegladarka[]" value="Netscape Navigator" />Netscape Navigator
   <input type="checkbox" name="Przegladarka[]" value="Opera" />Opera
   <input type="checkbox" name="Przegladarka[]" value="Firefox" />Firefox
   <input type="checkbox" name="Przegladarka[]" value="Inna" />Inna
  
   <p>Jakie masz połączenie - modemowe czy stałe łącze?</p>
   <input type="radio" name="Polaczenie" value="Zwykly modem" />Zwykły modem
   <input type="radio" name="Polaczenie" value="Stale łacze" />Stałe łącze
  
   <p>Ile godzin tygodniowo spędzasz serfując w domu w Internecie?</p>
   <input type="radio" name="Godziny" value="Do 5 godzin" />Do 5 godzin
   <input type="radio" name="Godziny" value="5 - 10 godzin" />5 - 10 godzin
   <input type="radio" name="Godziny" value="10 - 20 godzin" />10 - 20 godzin
   <input type="radio" name="Godziny" value="20 - 30 godzin" />20 - 30 godzin
   <input type="radio" name="Godziny" value="ponad 30 godzin" />ponad 30 godzin
  
   <p>Jeśli masz dodatkowe spostrzeżenia i uwagi, to to jest właśnie to miejsce</p>
   <textarea name="Komentarz" cols="50" rows="10">Proszę, wpisz tutaj jakiś komentarz...</textarea>
  
   <!-- Przycisk WYŚLIJ -->
   <input type="submit" value="Wyślij" />
  
   <!-- Przycisk KASUJ ANKIETE -->
   <input type="reset" value="Kasuj ankietę" />
  
   </div></form>


a teraz potrzebny mi jest skrypt, który by odczytał dane z formularza i je wyświetlił w formie :
Dziekuję za wypełnienie formularza.
Twoje dane to:
Imie i nazwisko/pseudonim: ....
Płeć: ...
Wiek: ...
Zajęcie: ..., .... (jeżeli zaznaczone kilka to wypisane wszystkie)
.
.
.
JoShiMa
Żeby wypisac zajęcie musisz przeczesać tablicę $_POST['Zajecie'] i zobaczyć które wartości były zaznaczone, czyli które zostały przesłane. Ona nie będzie miała wszystkich indeksów tylko te zaznaczone w ankiecie, więc nie zrobisz tego przez for a jedynie przez foreach.

Na przykład:
  1. <?php
  2. foreach($_POST['Zajecie'] as $index=>$wartosc){
  3.   echo $wartosc.',';
  4. }
  5. ?>


A tak na przyszłość, keśli wiesz które indeksy się pojawiły to do pojedynczej wartości możesz się również odnieść tak: $_POST['Zajecie'][$index]
gruber84
Dzięki za wskazówkę.
czyli dla radiobutonów i pól tekstowych robię np:
Kod
<?PHP
$a = $_POST[Nazwa]
echo $a
?>

A dla każdego checkbox tak jak napisałeś:
Kod
<?php
foreach($_POST['Zajecie'] as $index=>$wartosc){
   echo $wartosc.',';
}
?>
JoShiMa
W pierwszym przypadku nie ma potrzeby mnozyć zmiennych wystarczy

  1. <?php
  2. echo $_POST['Nazwa']
  3. ?>


Nie zapomnij o apostrofach w nawiasie kwadratowym tam gdzie masz nazwę pola smile.gif
gruber84
czyli wyglądałoby to tak :
Kod
<?PHP
echo "Twoje nazwisko/nick to: "$_POST['Nazwa'];

echo "Twój adres e-mail to: "$_POST['Poczta'];

echo "Jesteś "$_POST['Plec'];

echo "Twój przedział wiekowy to: "$_POST['Wiek'];

foreach($_POST['Zajecie'] as $index=>$wartosc{
echo "Aktualnie zajmujesz się: "Swartosc.',';

echo "Twoja miejscowosc liczy: "$_POST['Miejscowosc'];

foreach($_POST['Komputer'] as $index=>$wartosc{
echo "Uzywasz komputera: "$wartosc.',';

foreach($_POST['System'] as $index=>$wartosc{
echo "Uzywasz systemu operacyjnego: "$wartosc.',';

foreach($_POST['Przegladarka'] as $index=>$wartosc{
echo "Uzywasz przegladarki: "$wartosc.',';

echo "Posiadasz połaczenie: "$_POST['Polaczenie'];

echo "Tygodniowo spedzasz w internecie: "$_POST['Godziny'];
?>


mam jeszcze wątpliwość co do $index i $wartosc - czy nie powinno być na $index1, $index2... $wartosc1, wartosc2 w sensie, aby się nie powtarzały te same zmienne.
JoShiMa
Nie:
  1. <?php
  2. echo "Twoje nazwisko/nick to: "$_POST['Nazwa'];
  3. ?>

tylko:
  1. <?php
  2. echo 'Twoje nazwisko/nick to: '.$_POST['Nazwa'];
  3. ?>

Zapomniałeś o kropkach smile.gif Poza tym jeśli masz czysty string nez zmiennych wewnątrz to lepiej używac apostrofu niż cudzysłów (wydajność).

Nie:
  1. <?php
  2. foreach($_POST['Zajecie'] as $index=>$wartosc{
  3. echo "Aktualnie zajmujesz się: "Swartosc.',';
  4. ?>


Tylko:
  1. <?php
  2. echo 'Aktualnie zajmujesz się: ';
  3. foreach($_POST['Zajecie'] as $index=>$wartosc){
  4. echo $wartosc.',';
  5. }
  6. ?>


W Twojej wersji wypisałby tekst: "Aktualnie zajmujesz się:" przed każdą wartością zajęcia. No i zgubiłeś nawias i klamrę

Przecież te zmienne nie będą Ci potem potrzebne, więc po co bez sensu tworzyć kolejne? W pierwszej pętli wykorzystasz $index i $wartość a potem nie są ci potrzebe więc możesz ich użyć w następnej pętli i tak dalej i tak dalej.

Aha. Jak prezentujesz kod php to korzystaj z tagów do php smile.gif

Jeszcze zamiast:
  1. <?php
  2. echo 'Aktualnie zajmujesz się: ';
  3. foreach($_POST['Zajecie'] as $index=>$wartosc){
  4. echo $wartosc.',';
  5. }
  6. ?>


możesz napisać

  1. <?php
  2. echo 'Aktualnie zajmujesz się: '.implode(',' , $_POST['Zajecie']);
  3. ?>


Będzie ładniej bo bez przecinka za ostatnią pozycją
gruber84
Dzięki wielkie za wskazówki, poprawiłem i teraz jest tak:
Kod
<?PHP
echo 'Dziękujemy za wypełnienie formularza.';

echo 'Twoje nazwisko/nick to: '.$_POST['Nazwa'];

echo 'Twój adres e-mail to: '.$_POST['Poczta'];

echo 'Jesteś '.$_POST['Plec'];

echo 'Twój przedział wiekowy to: '.$_POST['Wiek'];

echo 'Aktualnie zajmujesz się: ';
foreach($_POST['Zajecie'] as $index=>$wartosc{
echo Swartosc.',';
}

echo 'Twoja miejscowosc liczy: '.$_POST['Miejscowosc'];

echo 'Uzywasz komputera: ';
foreach($_POST['Komputer'] as $index=>$wartosc{
echo $wartosc.',';
}

echo 'Uzywasz systemu operacyjnego: ';
foreach($_POST['System'] as $index=>$wartosc{
echo $wartosc.',';
}

echo 'Uzywasz przegladarki: ';
foreach($_POST['Przegladarka'] as $index=>$wartosc{
echo $wartosc.',';
}

echo 'Posiadasz połaczenie: '.$_POST['Polaczenie'];

echo 'Tygodniowo spedzasz w internecie: '.$_POST['Godziny'];
?>


Załączam ten kod żeby ktoś inny mógł też wykorzystać wskazówki smile.gif
Pozdrawiam
JoShiMa
Polecam się na przyszłość:
http://forum.php.pl/index.php?act=announce&f=1&id=4
debian
Cytat(gruber84 @ 7.01.2009, 13:11:07 ) *
echo 'Aktualnie zajmujesz się: ';
foreach($_POST['Zajecie'] as $index=>$wartosc{
echo Swartosc.',';
}

Zamiast S radziłbym napisać $ smile.gif
goorolx
Witam,
W php jestem zielony jak szczypiorek, dlatego prosze o pomoc. Mam podobny formularz z checkboxami jak gruber, jedyna roznica jest taka ze potrzebuje zapisac wartosci z calego formularza do pliku txt. Wszsytko dziala fajnie oprocz checkboxow, zapisuje mi tylko jedna, ostatnia wartosc z checkboxow. Gdy sprobowalem uzyc foreach, a potem echo i wyswietla wszystkie zaznaczone pola poprawnie. Teraz niewiem jak to zapisac Czy istnieje np. mozliwosc zapisania do txt tego co bylo wyswietlone przy uzyciu echo?

tak to wyglada u mnie bez foreach i echa, ale przynajmniej zapisuje do pliku:

  1. $report_type = $_POST['rep_type'];
  2. $category = $_POST['category'];
  3. $name = $_POST['name'];
  4.  
  5. $path = "safe/";
  6. $num = 1;
  7. $filename = $num."safecard.txt";
  8.  
  9. while (file_exists($path.$filename))
  10. {
  11. $num++;
  12. $filename = $num."safecard.txt";
  13. }
  14. $handle = fopen($path.$filename, "w") or die("can't open file");
  15.  
  16.  
  17. $form = "
  18. SAFE CARD
  19.  
  20. Report type-".$report_type.
  21. "
  22. Category-".$category.
  23. "
  24. Name-".$name;
  25.  
  26.  
  27. fwrite($handle,$form);
  28. fclose($handle);
  29. echo "Thank you for submiting SAFEcard!";

Lion_87
Może z foreach >> do zmiennej >> do pliku?
goorolx
Sprobowalem czegos takiego, ale tez niebardzo.

  1. foreach ($report_type as $rep_type => $value)
  2.  
  3. $form = " SAFE CARD
  4.  
  5. Report type - ".$report_type.$value.
  6. "


w pliku wyrzucilo mi : Array + wartosc tylko z ostatniego zaznaczonego check boxa,

Czy jest moze taka funkcja ktora caly tekst wyswietlony przez echo zapisuje do pliku? bo z echo wyswietla mi wszystkie zaznaczone wartosci.
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.