Autor | Zpráva | ||
---|---|---|---|
Fastman Profil |
#1 · Zasláno: 28. 6. 2015, 13:50:30
Zdravím,
Potřeboval bych poradit, jak udělám podmínku pro multiple. Uživatel si vybere několik věcí a odešle, jak udělám podmínku, že skutečně odeslal ty správné a že si nějakou neupravil. Příklad: Sekce ovoce: Jahody Meloun Ananas <select multiple name=\"ovoce[]\" class=\"form-control\"> <option>Jahody</option> <option>Meloun</option> <option>Ananas</option> </select> Uživatel by si mohl jednoduše editovat text a změnit si Jahody na Jablka a odeslat to. Jak ale ověřím, že odeslal správné (v mém příkladu ovoce)? Děkuji všem za odpovědi. |
||
Taps Profil |
#2 · Zasláno: 28. 6. 2015, 14:01:39
Fastman:
Ve skriptu, který údaje zpracovává si vytvoř pole hodnot, a pak toto pole budeš porovnávat s hodnotami, které byly odeslány z formuláře. |
||
Alphard Profil |
#3 · Zasláno: 28. 6. 2015, 14:02:17
Rozšiřuji odpověď [#2] Taps.
Docela jednoduše, ale je třeba posunout se na trochu abstraktnější úroveň. Ten formulář si programátor nepíše sám, html není jeho starost. On si pouze definuje pole možností $fruitsList = [ 'Jahody', 'Meloun', 'Ananas', ]; $form->addMultipleSelect('fruits', $fruitsList) .
Protože $form zná (i po odeslání) povolené volby, může např. pomocí in_array() ověřit, jestli jsou z povoleného seznamu, tj. validovat formulář (např. i zkontrolovat povinné položky atd.) a vrátit výsledky.
Viz např. Nette\Forms, tam je to hezky automaticky vyřešené. |
||
Fastman Profil |
#4 · Zasláno: 28. 6. 2015, 16:24:32
Děkuji moc za odpovědi, tak jsem zkusil napsat do vykonávajícího skriptu tyto hodnoty:
$ovoce_overuji = array('Jahody', 'Meloun', 'Ananas'); if ($_POST['ovoce'] !== $ovoce_overuji){ echo "Zvolené ovoce neexistuje!!"; } Bohužel nefunguje. I když zvolím hodnotu Jahody nebo si pozměním hodnotu Jahody na Jablka, tak to stále píše "Zvolené ovoce neexistuje!!" a neověřuje si to hodnoty z array. |
||
Trsak Profil |
#5 · Zasláno: 28. 6. 2015, 16:41:00
$ovoce_overuji = array('Jahody', 'Meloun', 'Ananas'); if (!in_array($_POST['ovoce'], $ovoce_overuji)){ echo "Zvolené ovoce neexistuje!!"; } |
||
Fastman Profil |
Trsak:
Tak to bohužel nejde. Zkoušel jsem si vypsat samotnou hodnotu $_POST['ovoce'] a vypsalo se "Array". Když jsem zkusil: foreach ($_POST['ovoce'] as $ovoce2){ if (!in_array($ovoce2, $ovoce_overuji)){ echo "$ovoce2" //Otestoval jsem si výpis hodnot - vypsali se. echo "Zvolené ovoce neexistuje!!"; } } |
||
Alphard Profil |
#7 · Zasláno: 28. 6. 2015, 17:43:43
Fastman [#4], Trsak [#5]:
To in_array (které jsem sám nešťastně zmínil), by se muselo používat v cyklu (který by však určitě byl součástí každé komplexnější validace). V tomto nejjednodušším případě, kdy chcete jen porovnat 2 pole, by se muselo použít např. array_diff(). Fastman [#6]: Tenhle kód už vypadá dobře (až na to, že kromě výpisu nic nedělá). Asi sem nedáváte přesně původní podobu, protože tahle by skončila syntaktickou chybou, ale nějak tak by to fungovat mělo. |
||
Fastman Profil |
Po odeslání to zpracovává skript a porovná:
<?php //Hodnoty které se budou ověřovat. $ovoce_overuji = array('Jahody', 'Meloun', 'Ananas'); //Získám hodnoty z "ovoce" a přeložím jako $ovoce2 foreach ($_POST['ovoce'] as $ovoce2){ //Podmínka, jestliže hodnota získaná z $ovoce2 není v array, tak vyhodí "Ovoce neexistuje". if (!in_array($ovoce2, $ovoce_overuji)){ echo "Ovoce neexistuje"; exit; } } ?> *Kód jsem poupravil, aby to bylo lépe pochopitelné, když někdo narazí na tento topic. |
||
Alphard Profil |
#9 · Zasláno: 28. 6. 2015, 18:32:56
Překlep v názvu
$mapa_overuji . Kdybyste používal pořádné IDE, upozorní vás.
|
||
Fastman Profil |
Ajo, máte pravdu. Díky moc, už to funguje. Používám Notepad++.
|
||
Časová prodleva: 9 let
|
0