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} 
Celý kod
<?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ě)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0