| 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: 14 let
|
|||
0