Autor Zpráva
JaySee
Profil
Ahoj,

řeším problém, kdy potřebuji vybrat (označit checkboxem) 0 až mnoho hodnot a pokud jsou vybrány, tak je zapsat do databáze (pokud neexistují) nebo je smazat (pokud existují). Hlavně mi jde o tom, jak to udělat (správně) při mě neznámém množství prvků. Prostě třeba můžu vypsat 1000 možností z nichž si uživatel vybere 4.

Jakým způsobem tedy potom (správně-bezpečně) přistupovat k poli $_POST a dostat z něj požadovaná data?

Přenáší se jen hodntoa ID a ANO/NE, resp. jen ANO.

Díky za náměty.
JaySee
Profil
Hmm, zdá se otázka zapeklitá.

Přidám svůj nápad, ale nejsem přesvědčen o tom, že je to správná cesta.

Mám tedy formulář, který obsahuje základní identifikační údaje a k tomu celou řadu volitelných položek.

Ty volitené položky se jmenují řekněme special5, special78, special125 .. etc.

Projedu celé pole $_POST v cyklu a explodem (či něčím jiným) z toho dostanu idčka. (tedy odřízku special od čísla).

A pak provedu třeba sto insertů:

mysql_query("INSERT INTO special (member_id, special_id) VALUES ('$id', '$spec_id') ON DUPLICATE KEY UPDATE special_id = '$spec_id'");

Ještě by to ale asi chtělo ověřovat, zda-li je poslané id existující... co vy na to? Je to přijatelné řešení, nebo bastlířská prasárnička?
marek094
Profil
checkboxům nastav name="jmeno[]" value="checked" a z POST je vezmeš $_POST["jmeno"][0], $_POST["jmeno"][1] .... [n]
if($_POST["jmeno"][$i]=="checked") $checkbox[$i] = 1; else $checkbox[$i] = 0 ...
JaySee
Profil
marek094:
díky za tip! Ale ještě se tedy doptám, když potřebuji přenést id skrz formulář, mám jej přidávat jako jmeno[$id][] a pak to z toho pole dostat? Mě by totiž stačila i varianta, že by se přenesla jen a pouze idečka, kde je checked.
marek094
Profil
JaySee:
pouze idečka, kde je checked
Jedině přes javascript, ale je to celkem zbytečné.

jmeno[$id][]
Jo to jde (foreach)
JaySee
Profil
marek094:
ještě to není ideální. Když dám print_r($_POST['jmeno']) tak mi to vyplivne Array ( [2] => [4] => ) no ale nejsou tam ty hodnoty (checked nebo true nebo 1) a ty nevybrané se nepošlou vůbec (což chápu a je v pořádku) ... ale neměla by ta hodnota tam přecijenom být? Nebo to mám ověřovat jen na základě existence toho id?
Tori
Profil
JaySee:
Můžete si do session uložit ID těch checkboxů, a při zpracování formuláře procházet cyklem ne $_POST, ale $_SESSION (a ověřovat, jestli tohle ID checkboxu existuje v $_POST).
JaySee
Profil
Tori:
jo to by šlo, bude tam jen pár uživatelů, nemuselo by dojít k žádným kolizím... dobrej nápad, díky.

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: