Autor | Zpráva | ||
---|---|---|---|
W4RDON Profil |
Dobrý den, mám formulář a chci ho jednoduše ošetřit proti prázdnému radku v tabulce... tak jsem napsal tento kod ale něco se mu nelíbí na těch proměných, kde mě to ukazuje chybu Undefined index: otazka2 in C/neco/neco (samozřejmě to dělá i u otázky 1 až 5) děkuji; V tomto kodu je ošetřeno jen jméno ale jinak by tam podmínka měla vypadat takto:
Podmínka: if (($jmeno=="") or ($a==0) or ($b==0)($c==0) ($d==0) ($e==0) ){echo "špatně";} else { zapis do db} <?php include_once "system.php"; $system = new system(); include ("header.php"); $jmeno=$_POST["jmeno"]; $a=$_POST["otazka1"]; $b=$_POST["otazka2"]; $c=$_POST["otazka3"]; $d=$_POST["otazka4"]; $e=$_POST["otazka5"]; if (isset($_POST["ok"])){ if ($_POST["jmeno"]=="") { echo "Nejsou vyplněny požadované údaje"; } else { $z=0; if($a==3) { $z++;} else { } if($b==1) { $z++;} else { } if($c==1) { $z++;} else { } if($d==2) { $z++;} else { } if($e==1) { $z++;} else { } $vysledek=mysql_query("insert into tabulka (jmeno, body) values ('".$jmeno."','".$z."')"); echo "<h1>Dokončil jsi test <a href='tabulka.php'>Zobrazit výsledek</a></h1>"; } } else{ ?> <h3>Test</h3> <form action="spustit.php" method="POST" name="test"> Zadej své jméno <input type="text" name="jmeno"> <h4>1. Jak se nazývá první Newtonův zákon:</h4> <input type="radio" name="otazka1" value="1"> Zákon akce a reakce<br> <input type="radio" name="otazka1" value="2"> Zákon síly<br> <input type="radio" name="otazka1" value="3"> Zákon setrvačnosti<br> <h4>2. Kdy se narodil Albert Einstein:</h4> <input type="radio" name="otazka2" value="1">1879<br> <input type="radio" name="otazka2" value="2">1865<br> <input type="radio" name="otazka2" value="3">1878<br> <input type="radio" name="otazka2" value="4">1854<br> <h4>3. Mezi nejvýznamnější Pythagorovy objevy patří:</h4> <input type="radio" name="otazka3" value="1">Pythagorova věta<br> <input type="radio" name="otazka3" value="2">Čtveřina <br> <input type="radio" name="otazka3" value="3">Pythagorejské ladění<br> <input type="radio" name="otazka3" value="4">Něco jiného<br> <h4>4. Eulerova přímka těžiště dělí spojnici středu výšek a středu kružnice opsané v poměru:</h4> <input type="radio" name="otazka4" value="1">1:3<br> <input type="radio" name="otazka4" value="2">1:2<br> <input type="radio" name="otazka4" value="3">1:1<br> <input type="radio" name="otazka4" value="4">Ani jedna možnost<br> <h4>5. Tháletová věta říká:</h4> <input type="radio" name="otazka5" value="1">Všechny trojúhelníky, jejichž střed kružnice opsané půlí nejdelší stranu, jsou pravoúhlé.<br> <input type="radio" name="otazka5" value="2">Všechny trojúhelníky, jejichž střed kružnice opsané půlí nejkratší stranu, jsou pravoúhlé.<br> <input type="radio" name="otazka5" value="3">Tháletova kružnice má stejný obvod jako trojuhelník jemu opsaný.<br> <input type="submit" name="ok" value="Odeslat"> </form> <p class="citace">Za každou spávnou odpověd je 1 bod. Váš výsledek bude uložen do tabulky výsledků.</p> <?php } $system->vypis_menu(); include ("footer.php"); ?> |
||
Joker Profil |
W4RDON:
Dejte kontrolu vyplněnosti položky před kopírování do proměnné. A místo $_POST["jmeno"]=="" použijte empty($_POST["jmeno"]) , to právě nebude vyhazovat to undefined index v případě, že ta položka vůbec není vyplněná.
Poznámka, empty jako „prázdnou hodnotu“ bere třeba i řetězec "0", ale v tomhle případě to asi nevadí. Pro kontrolu jen toho, jestli položka byla nastavena by se použilo isset() (s obrácenou logikou, tj. empty kontroluje jestli je prázdná a isset jestli je nastavená, tj. když u neexistující položky empty() vrátí true a isset() false).
Připomínám, že je rozdíl mezi neexistující proměnnou a proměnnou obsahující prázdný řetězec. U té první isset vrátí false, u druhé true. Mimochodem, jestli se něco zkopíruje z $_POST do proměnné a pak se ta proměnná v nezměněné podobě používá, tak k čemu je dobré to kopírování? A řetězce používané v databázových dotazech by se měly escapovat (mysql_real_escape_string v tomto případě) |
||
Časová prodleva: 11 let
|
0