Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]$_POST z radio buttons jeżeli nie wybrane wraca jako: Undefined index
Forum PHP.pl > Forum > Przedszkole
bogostradamus
Witam.
Na początek zaznaczę że jestem w tym nowy.
Zrobiłem form na zasadzie quizu. 4 odpowiedzi, tylko jedna dobra:
Form method="post"
Na drugiej stronce łapie $_POST i wszystko pięknie. Zlicza mi wynik, podaje i wszystko śmiga. Problem tylko taki że jak ktoś nie zaznaczy odpowiedzi żadnej i kliknie submit.
error log wyswietla:
Notice: Undefined index: p1 in wynik.php on line 2
Jak zrobic by przechwycona zmienna, gdy ma value "" albo empty lub !isset (nie jestem pewien jaka trafia z pustego radio button) była automatycznie ustawiana jako domyślna np.4

To mój kod:

<form action="wynik.php" method="post">
1. What do you ..................... in your spare time?<BR>
<input TYPE="radio" name="p1" value="0"> like do<BR>
<input TYPE="radio" name="p1" value="1"> like doing<BR>
<input TYPE="radio" name="p1" value="2"> like to doing<BR>
<input TYPE="radio" name="p1" value="3"> doing<BR>
<input type="submit" class="przycisk" value="Oblicz Wynik!">
</form>
</div>

wynik.php:
<?php
$pyt1 = $_POST["p1"];

$score = 0;
if ($pyt1 == '1'){
$score++;
}
?>
<body>
<?php
echo '<p>Twoj wynik to:' . $score . ' na 20 Możliwych' . '<br />';
if ($score < 5){
echo '<p>Bardzo słabo.</p>';
}
else if (($score >= 5) && ($score < 10)){
echo '<p>Raczej słabo. </p>';
}
else if (($score >= 11) && ($score < 15)){
echo '<p>Średnia punktów! </p>';
}
else if (($score >= 16) && ($score <= 18)){
echo '<p>Całkiem nieźle.</p>';
}
else if ($score > 18){
echo '<p>Rewelacyjnie!</p>';
}
?>
</body>

Kod troszke uprosicilem do jednego pytania. Tak jak mowilem wszystko dziala pieknie do momentu gdy wszystkie odp zostaly udzielone.
Ellington
Tak, jak sobie odpowiedziales: isset - jezeli nie istnieje, to defaultowa wartosc. Ewentualnie w kodzie html, dla jednego z radio w danym pytaniu ustaw wartosc checked, wtedy bedziesz mial pewnosc, ze jedna z odpowiedzi zostanie zaznaczona.
bogostradamus
Ustawić domyślną checked nie mogę, ponieważ to test znajomości języka. Nie by była podpowiedź w teście - nawet gdyby była nieprawidłowa. A to isset ustawić jak właśnie?
Jak napisać funkcje if else by w przypadko dobrej odpowiedzi dodawało jeden do $score++ a w momencie gdy ktos u uzupełni pytania to zostawiało $score ale bez error loga.

<?php
$pyt1 = $_POST["p1"];

$score = 0;
if ($pyt1 == '1'){
$score++;
} elseif ($pyt1 == '!isset'){
Co tu wstawić?
}
?>

Nie wiem czy to dobrze nawet. Mowiłem że jestem w tym nowy.
rytek
  1. if (isset($_POST["p1"]))
  2. {
  3. $pyt1 = $_POST["p1"];
  4.  
  5. $score = 0;
  6. if ($pyt1 == '1'){
  7. $score++;
  8. }
  9. }
  10. else
  11. {
  12. echo"Nie wybrałeś żadnej odpowiedzi!";
  13. }


Albo próbuj walidacji formularza za pomocą javascript.
bogostradamus
Ten skrypt co podesłałeś nie działa. Wyswietla echo"Nie wybrałeś żadnej odpowiedzi!" na stronce oraz:
Notice: Undefined variable: score in wynik.php on line 88
A validation form w javascript to jak?
bogostradamus
Dzieki za pomoc dla ciebie rytek, ale nie zmienia to fakt, ze nie moge sobie z tym walidacja formularza poradzic. To juz wrzuciłem na nowy temat http://forum.php.pl/index.php?showtopic=140739&hl=
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.