Autor | Zpráva | ||
---|---|---|---|
petrkolos Profil |
#1 · Zasláno: 30. 10. 2015, 12:34:15 · Upravil/a: Moderátor (editace znemožněna) 2. 11. 2015, 11:26:19
Zdravím mám formulář kde si uživatel zadá počet lidí se kterýma byl na akci (označení). Stránka se refreshne a zobrazí se přesný počet selectu, kde si uživatel vybere jména. Selecty jsou name="uzivatel-1" atd. Potřeboval bych nějaký nápad jak tenhle počet neznámích proměnných nasypat do databáte v poly $pole($uzivatel1,$uzivatel2,$uzivatel3,.....) Podle počtu lidí co si on zadal. Díky
|
||
Kcko Profil |
petrkolos:
Takhle nějak a $selectNum si nahraď tím čím nazýváš kde si uživatel zadá počet lidí
<? $selectNum = 10; if (!empty($_POST)) { foreach ($_POST['select'] as $select) { print_r($select); // hodnota jednotlivych nastavenych selectu .. s tím už si udělej co potřebuješ. } } ?> <form method="post"> <? for ($i = 1; $i <= $selectNum; $i++) { ?> <select name="select[<?= $i?>]"> <option value="1">Ahoj</option> <option value="2">Čau</option> <option value="3">Nazdar</option> </select> <? } ?> <input type="submit" value="Odeslat" /> </form> |
||
mimochodec Profil |
#3 · Zasláno: 30. 10. 2015, 12:41:35
petrkolos:
„zadá počet lidí se kterýma byl na akci (označení). Stránka se refreshne a zobrazí se přesný počet selectu, kde si uživatel vybere jména.“ To mi připadá jako hodně nepohodlné. Nebylo by lepší fázi zadání počtu přeskočit, rovnou nabídnout všechny a k nim dá zatržítka? |
||
juriad Profil |
#4 · Zasláno: 30. 10. 2015, 12:48:01
mimochodec:
Nebo rovnou select multiple? Spolu s name="kamaradi[]" , což PHP bude přímo interpretovat jako pole.
|
||
petrkolos Profil |
#5 · Zasláno: 30. 10. 2015, 12:49:43
Jdu to zkusit ale vypadá to že to bude ono moc ti děkuji :)
|
||
mimochodec Profil |
#6 · Zasláno: 30. 10. 2015, 12:50:52
juriad:
„Nebo rovnou select multiple?“ Já ho nemám moc rád. Znám dost lidí, kteří ho jako uživatelé neumí použít. |
||
juriad Profil |
#7 · Zasláno: 30. 10. 2015, 12:56:37
Kcko:
Nepoužívej zkrácené otevírací značky <? , spoustě lidí nebudou fungovat.
Po odeslání formuláře POSTem musíš přesměrovat. Jelikož se jedná o akci měnící stav aplikace, není možné použíť GET, který by jinak byl bezpečný. mimochodec: Stačí přeci dát poznámku pod/bokem, že má uživatel vybrat více položek s controlem. |
||
Kcko Profil |
#8 · Zasláno: 30. 10. 2015, 13:28:41
juriad:
Ok první připomínku beru, druhou ne. To už bysme do toho mohli zamíchat bezpečnost proměnných, logiku kódu atd. |
||
petrkolos Profil |
#9 · Zasláno: 30. 10. 2015, 13:41:08
Díky za pomoc už mi to funguje a nakonec jsem se na ty selecty vykašlal a udělal jsem tam checkbox
|
||
petrkolos Profil |
#10 · Zasláno: 31. 10. 2015, 18:43:18
Ještě mám jeden problém. Jak mám udělat aby se mi ten array hodil do jedny bunky v mysql. Když dam insert tak se tam dá akorát první číslo a když insert hodím do toho cyklu tak se vytvoří několik nových řádků v tabulce. Díky :)
|
||
juriad Profil |
#11 · Zasláno: 31. 10. 2015, 18:47:01
petrkolos:
Ale ty chceš vytvořit více řádků. Viz Diskuse JPW: Některé časteji řešené dotazy pro MySQL - FAQ » Více hodnot ve sloupci. Vkládat pole do jedné „buňky“ je vždy špatně. |
||
petrkolos Profil |
#12 · Zasláno: 31. 10. 2015, 19:00:38
Asi to udělám tak že vytvořím ještě jednu tabulku pro to označování :) A kdyby se to mělo hodit do jedny buňky tak by to vypadalo jak?
|
||
mimochodec Profil |
#13 · Zasláno: 31. 10. 2015, 19:06:52
petrkolos:
V jedné buňce to nemá co dělat. Je to špatný postup, který určitě dokážeš vymyslet sám a jde jen o to, jestli ti jeho nevýhody dojdou předtím, než se do toho pustíš, nebo až během toho. |
||
juriad Profil |
V PHP bys použil funkci implode.
Ale opravdu to nedělej, nezbylo by to pak nic jiného než hledat pokládat SQL dotazy pomocí operátoru LIKE '%hodnota%' , což je ukrutně pomalé - rozdíl je v tom, že databáze musí projít úplně všechny záznamy oproti malého množství (logaritmického, pamatuješ-li si ze školy logaritmus). Navíc nějaké dotazy tak nejde vůbec zrealizovat.
|
||
petrkolos Profil |
#15 · Zasláno: 31. 10. 2015, 19:14:57
Nechám si poradit :) Udělám ještě jednu tabulku. Díky
|
||
Časová prodleva: 9 let
|
0