Autor | Zpráva | ||
---|---|---|---|
kopi Profil |
#1 · Zasláno: 20. 3. 2019, 16:33:47
Zdravím,
potřeboval bych od Vás poradit. V cyklu vypisuji checkboxy: <input type='checkbox' class='flat-red' name='auto[".$row['id_auto']."]' value='1' checked> Checkboxy potom zpracovávám: $auta = array(); if(isset($_POST['auto'])) //jsou data pro 'auta' v postu { $auta = array_keys($_POST['auto']); // do pole $auta uloz id auta, které byly zašktnuté } if(!empty($auta)) { foreach($auta as $autoId) { //update tabulky $update = mysqli_query($conn,"UPDATE tabulka SET `sloupec`=$ValueCheckboxu WHERE id_auto=$autoId"); } } Tohle celé mi funguje dobře až na jednu věc. Z pole checkboxů získávám $autoId a potřeboval bych získat i $ValueCheckboxu. děkuji za každou radu |
||
Tomášeek Profil |
kopi:
Proč tak složitě? if (!empty($_POST['auto'])) { foreach ($_POST['auto'] as $key => $val) { // $key - klic auta // $val - hodnota ve value } } |
||
kopi Profil |
#3 · Zasláno: 20. 3. 2019, 17:43:23
Tomášeek:
ale když si to takhle vypíšu, tak dostanu 0 => 1286, 1 => 1287. Já bych potřeboval, aby $key bylo 1286 (id auta) a $val = 1 nebo 0, což je buď zaškrtnuto nebo ne. |
||
Tomášeek Profil |
#4 · Zasláno: 20. 3. 2019, 17:58:12
kopi:
Tak to nefunguje. Nezaškrtnuté checkboxy se neodesílají, vždy máš k dispozici jen ty odeslané. Pokud potřebuješ i neodeslané, musíš si je dopočítat, jsou to všechny - zaškrtnuté .
|
||
kopi Profil |
#5 · Zasláno: 20. 3. 2019, 18:03:13
u každého checkboxu mám i <input type="hidden" name='auto[".$row['id_auto']."]' value='0'>.
Takže i nezaškrtnutý checkbox by se měl odeslat s hodnotou 0? Ale i kdyby to tak nebylo, tak stejně to není tak jak potřebuju. V name checkboxu mám uložené ID, takže ve $val je uloženo to ID, ale value z checkboxu uložené není nikde. |
||
Keeehi Profil |
#6 · Zasláno: 20. 3. 2019, 18:41:46
kopi:
„u každého checkboxu mám ...“ Bohužel to jsme nemohli vědět, jehož vědecké koule jsou zrovna na renovaci po náročné zimní sezóně. Zkus nám to sem prosím napsat vše, hezky a pořádně ať to z tebe nemusíme tahat po kouscích. Pak ti určitě budeme schopni poradit nějaké hezké elegantní řešení. |
||
kopi Profil |
#7 · Zasláno: 20. 3. 2019, 18:47:52
výpis checkboxů:
<input type='hidden' name='auto[".$row['id_auto']."]' value='0' /> <input type='checkbox' name='auto[".$row['id_auto']."]' value='1' checked> zpracování checkboxů: $auta = array(); if(isset($_POST['auto'])) //jsou data pro 'auta' v postu { $auta = array_keys($_POST['auto']); // do pole $auta uloz id auta, které byly odeslané } if(!empty($auta)) { foreach($auta as $autoId) { //update tabulky $update = mysqli_query($conn,"UPDATE tabulka SET `sloupec`=$ValueCheckboxu WHERE id_auto=$autoId"); } } Takhle to mám teď. A prostě neumím přijít na to, jak do proměnné $ValueCheckboxu dostat hodnotu value z inputu. Pokud je zaškrtnutý value = 1, pokud není zaškrtnutý, odešle se value = 0. |
||
Tomášeek Profil |
#8 · Zasláno: 20. 3. 2019, 19:40:18
kopi:
„Takže i nezaškrtnutý checkbox by se měl odeslat s hodnotou 0?“ Checkbox se neodesílá, odesílá se nulový hidden .
Celkově se vyjadřuješ jak tatar. Dumpni si $_POST['auta'] , ať víš, s jakými daty (a klíči) se pracuje. Pak už je to jen základní práce s poli, vysvětlená v druhé kapitole každé PHP knihy.
|
||
kopi Profil |
#9 · Zasláno: 20. 3. 2019, 19:47:32
já se to jen učím, není to nic, co by měl někdo používat. a právě si zkouším pracovat s poli. Kdybych všechno uměl, tak bych se tu takhle blbě neptal. Jinak díky za pomoc.
|
||
Keeehi Profil |
#10 · Zasláno: 20. 3. 2019, 23:09:02
<input type='hidden' name='auto[".$row['id_auto']."]' value='0' /> <input type='checkbox' name='auto[".$row['id_auto']."]' value='1' checked> Nicméně pokud ti na konci z toho vznikne pole ["1286" => "0", "1287" => 1] pak pro update tabulky ti stačí opravdu to, co ti psal Tomášeek v [#2].
if(isset($_POST['auto'])) { foreach($_POST['auto'] as $autoId => $autoValue) { $update = mysqli_query($conn,"UPDATE tabulka SET `sloupec`=$autoValue WHERE id_auto=$autoId"); } } No a na závěr se hodí zmínit, že tento styl lepení SQL dotazu z uživatelských dat obsahuje zranitelnost typu SQL injection. Což je v ukázkách pro jednoduchost ignorováno ovšem ty by sis to měl opravit. |
||
Kajman Profil |
#11 · Zasláno: 21. 3. 2019, 08:16:58
Prohlížeče nemají problém se vstupy, co se stejně jmenují. Odeslají je všechny. To, že tam je hodnota jen jedna udělá až php. Některé jiné jazyky např. dělají pole při více stejných názvech i bez použití hranatých závorek v jejich názvu.
Osobně bych si seskládal jeden update na všechna odeslaná auta. Něco jako UPDATE tabulka SET `sloupec` = CASE WHEN id_auto IN (seznam, zatrhnutych, cisel, oddelenych, carkou) THEN 1 ELSE 0 END WHERE id_auto IN (seznam, vsech, cisel, oddelenych, carkou) |
||
Časová prodleva: 6 let
|
0