Autor | Zpráva | ||
---|---|---|---|
Rellik Profil |
#1 · Zasláno: 9. 6. 2011, 21:44:53 · Upravil/a: Rellik
Potřebuju poradit:
Pro manželku jakožto učitelku vytvářím generátor matematických příkladů. Momentálně to funguje, ale potřebuju aby se zkontrolovaly odesílané data aby bylo možné vložit pouze čísla. Zkoušel sem to pomocí if_numeric() , ale asi dělám něco špatně. Nechci každou hodnotu kontrolovat zvlášť tak sem to dal do jedné podmínky ale tak to bohužel nefunguje. $prvni_od = $_POST['prvni_od']; $prvni_do = $_POST['prvni_do']; $druhe_od = $_POST['druhe_od']; $druhe_do = $_POST['druhe_do']; $operace = $_POST['operace']; if(is_numeric($prvni_od && $prvni_do && $druhe_od && $druhe_do)) {.... Jde to udělat abych to nemusel kontrolovat každé zvlášť? Pak bych měl složitější dotaz a to jak vyřešit to aby se náhodou nevygenerovaly naráz třeba dva stejné příklady. určitě to bude chtít asi uložit do array a pak to cyklem zkontrolovat a ke stejné čísla nějak změnit, ale momentálně mě nenapadá jak to provést. :-/ Celý kód: <form method="post" title="priklady" action="?post=ok"> <table id="vstup"> <tr> <td class="zadani">Počet příkladů:</td> <td><input name="pocet" size="10" value="20" /></td> <td></td> <td></td> </tr> <tr> <td></td> <td class="zadani">Min</td> <td class="zadani">Max</td> <td class="zadani">Počet <br /> desetiných<br /> míst</td> </tr> <tr> <td class="zadani">První číslo:</td> <td><input name="prvni_od" size="10" /></td> <td><input name="prvni_do" size="10" /></td> <td><select size="1" name="pocet_desetin"> <option selected="selected" value="0">0 </option> <option value="1">1 </option> <option value="2">2 </option> <option value="3">3 </option> </select></td> </tr> <tr> <td class="zadani">Operace:</td> <td><input name="operace" type="radio" value="+" /> + <input name="operace" type="radio" value="-" /> - <input name="operace" type="radio" value="/" /> : <input name="operace" type="radio" value="*" /> x </td> <td></td> <td></td> </tr> <tr> <td class="zadani">Druhé číslo:</td> <td><input name="druhe_od" size="10" /></td> <td><input name="druhe_do" size="10" /></td> <td><select size="1" name="pocet_desetin_x"> <option selected="selected" value="0">0 </option> <option value="1">1 </option> <option value="2">2 </option> <option value="3">3 </option> </select></td> </tr> <tr> <td></td> <td></td> <td></td> <td><input name="send" type="submit" value="Vygenerovat" /></td> </tr> </table> </form> </div> <!-- menu konec --> <div id="text"> <!-- text --> <table id="vypis"> <tr> <?php $pocet = $_POST['pocet']; $pocet_desetin = $_POST['pocet_desetin']; $pocet_desetin_x = $_POST['pocet_desetin_x']; $prvni_od = $_POST['prvni_od']; $prvni_do = $_POST['prvni_do']; $druhe_od = $_POST['druhe_od']; $druhe_do = $_POST['druhe_do']; $operace = $_POST['operace']; $send = $_GET['post']; $refer = $_GET['refer']; if($send == "ok") { if($prvni_od && $prvni_do && $druhe_od && $druhe_do) { if($operace) { for($i=1;$i<=$pocet;$i++) { if($pocet_desetin) { if($pocet_desetin == "1") { $desetiny = ".".rand(1,9); } if($pocet_desetin == "2") { $desetiny = ".".rand(11,99); } if($pocet_desetin == "3") { $desetiny = ".".rand(111,999); } } else $desetiny = ""; if($pocet_desetin_x) { if($pocet_desetin_x == "1") { $desetiny_x = ".".rand(1,9); } if($pocet_desetin_x == "2") { $desetiny_x = ".".rand(11,99); } if($pocet_desetin_x == "3") { $desetiny_x = ".".rand(111,999); } } else $desetiny_x = ""; $first = rand($prvni_od,$prvni_do).$desetiny; $last = rand($druhe_od,$druhe_do).$desetiny_x; $val=$i; if($i<10) $val='0'.$i; $vypis = "\t\t<td>".$first.$operace.$last." =___"; $vypis = str_replace("/",":",$vypis); $vypis = str_replace("*","x",$vypis); $vypis = str_replace(".",",",$vypis); echo $vypis; if($operace == "-") { echo "<span class=\"help\">".($first-$last)."</span></td>\n"; } if($operace == "/") { echo "<span class=\"help\">".($first/$last)."</span></td>\n"; } if($operace == "*") { echo "<span class=\"help\">".($first*$last)."</span></td>\n"; } if($operace == "+") { echo "<span class=\"help\">".($first+$last)."</span></td>\n"; } if(($val%4)<"1") { echo "\t</tr><tr>\n"; } }echo "<span class=\"help\">Stránku můžete vytisknout přes místní nabídku. Vytisknou se pouze příklady. (bez výsledků)</span>"; } else { echo "Nebyla zvolena operace!"; } } else { echo "Nebyly vyplněny všechny údaje nebo byly zadány ve špatném tvaru - musí to být jen čísla! <br />Zadejte je prosím znovu.";} } else echo "\t\t\t Do políček vyplňte kolik požadujete vygenerovat příkladů, v jakém rozmezí se mají pohybovat první a druhé číslo, kolik má mít které číslo desetinných míst a jaká operace má být provedena.<br /> \t\t <b>Může se stát že se některé vygenerované příklady opakují. V tomto případě zmáčkněte klávesu F5 a potvrďte odeslání dat, tím se vygenerují nové příklady</b>"; ?> </tr> </table> Toto řešení mám hotové už asi dva roky, ale až teď mě napadlo to trochu vylepšit... Díky za každou pomoc. Možná bude stačit jen pomoct s prvním dotazem, to druhé je složitější a nechci nikoho moc zatěžovat. :) EDIT: hotová ukázka: http://veletiny.cz/mat/ |
||
Darker Profil |
#2 · Zasláno: 9. 6. 2011, 21:58:40 · Upravil/a: Darker
Ad 1.
Nemůžeš použít tu konstrukci, cos předvedl, skus si do ní za proměnné dosadit: if(is_numeric("ble"&&21&&30)) //sotva bude true. Funkce dostane false (popř. true) a to není numerická proměnná. Musíš použít foreach pro superglobální $_POST. S tím že do cyklu foreach zařadíš výjimky. Ad 2. Ukládal bych příklady do pole a pak aplikoval funkci in_array. |
||
Časová prodleva: 13 let
|
0