Zdravím všechny,
řeším následující úlohu:
Na dané stránce má uživatel možnost tipovat výsledky 1..n zápasů. Po vyplnění formulářových polí (pro každý zápas jsou 2 - góly domácích a góly hostů) má mít uživatel všechny typy zapsat do databázové tabulky (se sloupci ID zápasu, domácí, hosté, góly domácí, góly hosté) najednou, stisknutím jednoho tlačítka. ID uzivatele bude v SESSION.
Kdyby se někdo chtěl podívat - představuji si to takhle: www.vhala.chytrak.cz uživatel vhala a heslo vhala - pak v menu v levo kliknout na "Zápasy". Jde o studijní verzi - neřešte detaily.
Doposud jsem formuláře vnímal tak, že šlo pokaždé o zápis jednoho řádku do tabulky. V tomto případě ale vkládám několik řádků jedním formulářem. Asi bych se s tím nějak dokázal poprat, ale zatím mě napadají samé divné věci:). Existuje nějaké elegantní řešení, jak se tento problém řeší (za použití php)?
Off topic - je tu na fóru možnost vyhledávání? Vím, že dřív tu byla, ale teď nikde žádnou lupu nevidím.
Díky za nápady....
Tak lze to.
Klasická varianta je, že každá položka (input) má svoji name hodnotu a tu poté jen zpracujete. Tak jak to tam máte teď. Akorát je to dosti nepraktické s velkou pravděpodobnosti chyby.
Pro tyto účely lze využít featurku. Každý blok formuláře (zápas) nastavit jako pole a při zpracování s ním jako pole pracovat.
Tedy. Ve formuláři budete mít společný name s tím, že pro každý zápas nastavíte jako index jeho id.
<input name="d[1]" value=""> <input name="h[1]" value="">
<input name="d[2]" value=""> <input name="h[2]" value="">
<input name="d[3]" value=""> <input name="h[3]" value="">
Při zpracování se to pak bude chovat jako dvě proměnné d a h, ale s tím, že to nebude single hodnota, ale pole s indexem id.
foreach ( $_POST['d'] as $id_zapas => $d_value ) {
$d = $d_value;
$h = $_POST['h'][$id];
ulozit(id_zapas, d, h);
}