Autor | Zpráva | ||
---|---|---|---|
Joudolol Profil * |
#1 · Zasláno: 20. 11. 2010, 13:06:25
Ahoj,
prosím potřeboval bych poradit, protože vůbec nevím jak uložit do databáze zaškrtnuté v checkboxu. Skloudil jsem HTML <?while($seznam=mysql_fetch_array($dbv)):?> <input type="checkbox" name="odvetvi" value="<?php echo $seznam['odvetvi_id']; ?>"> <?php echo $seznam['nazev']; ?><br> <?endwhile;?> To bych měl, ale už vůbec netuším jak to uložit. Tedy, tímto jsem do toho vypsal z DB název odvětví (rubriky) a její id do value. Právě už teď nevím, jestli to mám správně. atribut name="" bude u každé položky stejný (může být, anebo musí být jiný?) Nyní uživatel zaškrtne třeba 3 z 10 rubrik. To potřebuji uložit do databáze a vůbec nevím jak. Nemohl by mi někdo pomoci to zpracovat a naznačit uložení do DB? Děkuji mnohokrát za pomoc. |
||
dehtak Profil |
#2 · Zasláno: 20. 11. 2010, 13:28:08 · Upravil/a: dehtak
jednoduse , ja to delam treba tak, ze funkci implode spojim ty polozky .
U html musis zadat za jmeno hranate zavorky [] , tim se vytvori array. No a pokud chces to odvetvi ulozit do jednoho sloupce v mysql , tak ty array pole spoj v jeden text a oddel texty nejakym odelovacem , treba znamenkem | . Vysledek by mel vypadat takto : text|text|text|text. Vysledek uloziz do databaze. // pro html <input type="checkbox" name="odvetvi[]" value="<?php echo $seznam['odvetvi_id']; ?>"> // pro php $odvetvi = implode("|", $_POST['odvetvi']); // php mysql_query("INSERT INTO `odvetvi` VALUE ('$odvetvi') "); //z vypisu databaze si to zase musis pomoci funkce explode rozdelit $odvetvi = explode("|",$result['odvetvi']); foreach ($odvetvi as $o){ echo $o ."<br>"; } pisu to jen tak zkracene aby jste to pochopil |
||
Joudolol Profil * |
#3 · Zasláno: 20. 11. 2010, 13:34:22
No, já potřebuju uložit to databáze čistě jen to ID toho odvětví, je to možné?
|
||
dehtak Profil |
#4 · Zasláno: 20. 11. 2010, 13:39:19 · Upravil/a: dehtak
Joudolol:
Muzes postupovat stejnym zpusobem , vysledek bude 14|25|18|34 $odvetvi = explode("|",$result['odvetvi']); foreach ($odvetvi as $o){ mysql_query("SELECT FROM `neco` WHERE id ='$o' "); } jeste jedna vec , nepis <?php echo ; ?> ale napis jen <?=?> value="<?php echo $seznam['odvetvi_id']; ?>" value="<?=$seznam['odvetvi_id']?>" je to prehlednejsi a rychlejsi |
||
Joudolol Profil * |
#5 · Zasláno: 20. 11. 2010, 13:42:39
Ty to nechápeš :D. Já potřebuji provést to samé Query podle toho kolik bylo zaškrutných checkboxů akorát tam vložit odvetvi_id jiné. Tzn. že třeba, když zaškrtnu 4 checkboxy, do databáze se uloží 4x to samé, ale bude to mít pokaždé jiné odvetvi_id. Šlo by to tak nějak provést?
|
||
dehtak Profil |
#6 · Zasláno: 20. 11. 2010, 13:53:18
Nejak te scela nechapu.
|
||
dehtak Profil |
#7 · Zasláno: 20. 11. 2010, 14:12:40
Mozna uz to chapu , u toho html to nech stejne s hranatejma zavorkama
<input type="checkbox" name="odvetvi[]" value="<?=$seznam['odvetvi_id']?>"> potom staci jen vypsat vsechna odvetvi a ulozit do databaze foreach($_POST['odvetvi'] as $odvetvi){ mysql_query(" INSERT INTO `neco` VALUE($odvetvi)"); } |
||
Joudolol Profil * |
#8 · Zasláno: 20. 11. 2010, 14:17:36
Jojo, přesně tak, akorát ještě z toho odstranit to odvetvi[]. Prostě zapsat do DB jen čistě to číslo. Šlo by to?
|
||
dehtak Profil |
#9 · Zasláno: 20. 11. 2010, 14:27:00 · Upravil/a: dehtak
Joudolol:
vzdyt o to se stara foreach ty hranate zavorky tam jsou kvuli vytvoreny array pole while($seznam=mysql_fetch_array($dbv)){ echo "<input type='checkbox' name='odvetvi[]' value='".$seznam['odvetvi_id']."'> ".$seznam['nazev']."<br>"; } $_POST['odvetvi'] = Array ( [0] => 23 [1] => 5 [2] => 18 ) ; Array ( [0] => 23 [1] => 5 [2] => 18 ) , tim foreach ziskas jenom ty Id 23, 5, 18 a ty id ulozis schvalne jsem ti napsal script k odskouseni jen ho zkopiruj a vyskousej , akorad misto echo $o das ulozeni do databaze mysql_query(" INSERT INTO `neco` VALUE($o)"); <form action="<?=$PHP_SELF?>" method="POST"> <?php for ($i=0; $i<=5; $i++){ echo "<input type='checkbox' name='odvetvi[]' value='$i'> $i<br>"; } echo "<input type='submit' name='send' value='send'>"; ?> </form> <?php if (isset($_POST['send']) && $_POST['odvetvi']){ foreach ($_POST['odvetvi'] as $o){ echo $o."<br />"; } } ?> |
||
Joudolol Profil * |
#10 · Zasláno: 20. 11. 2010, 14:55:18
Dobře, už to alespoň trochu chápu. Takže, vrátím se k tomu jak jsi psal to implode a explode, imploduju to a uložím do DB. Pak to exploduju a např. do query dám SELECT ... FROM ... WHERE odvetvi = '7'
V DB bude uloženo pod odvetvi 1|6|2|3|7. Vybere mi to nebo to nevybere? |
||
dehtak Profil |
#11 · Zasláno: 20. 11. 2010, 14:59:03 · Upravil/a: dehtak
jak ti to vysvetlit , mas dejme tomu 2 tabulky , jedna je odvetvi obsahuje sloupce id a obsah
druha je seznam a obsahuje sloupce id_odvetvi a treba taky nakej text. 1 reseni Z ty tabulky seznam chces vypsat vsechna odvetvi , takze musis vypsat z tabulky seznam id_odvetvi explodovat a funkci foreach vypsat z tabulky odvetvi obsah. nebo 2 reseni vypsat nekolikrat tabulku seznam s id_odvetvi a tim pak vypsat z tabulky odvetvi obsah Podle mne je 1 reseni lepsi. Vypis z databaze podle druhyho reseni lze udelat i spojovanim tabulek mysql_query(SELECT * FROM odvetvi, seznam WHERE seznam.id=1 AND odvetvi.id=seznam.odvetvi_id ); |
||
Joudolol Profil * |
#12 · Zasláno: 20. 11. 2010, 15:02:14
Dobře, jdu to zkusit....
|
||
panther Profil |
#13 · Zasláno: 20. 11. 2010, 15:11:40
dehtak:
není moc dobrý nápad cokoliv z pole spojovat do jednoho stringu pomocí nějakých oddělovačů. Joudolol: každou položku toho pole (každý checkbox) ukládej do tabulky do samostatného řádku (id | hodnota), případně si ukládej jen ta ID, kde je hodnota == 1, nuly můžeš ignorovat. |
||
Joudolol Profil * |
#14 · Zasláno: 20. 11. 2010, 15:12:21
V DB mám tenhle zápis v odvetvi_id : 2|3|9
Když přímo v PHPMyAdmin do SQL napíšu SELECT * FROM ... WHERE odvetvi_id = '2' Vypíše: nulový počet výsledků |
||
Joudolol Profil * |
#15 · Zasláno: 20. 11. 2010, 15:14:28
panther:
Rád bych, ale spíš bych to potřeboval napsat, psal jsem, že vůbec netuším jak to zde rozdělit nějak, prostě nevím .. byl bych vděčný, kdybys mi to alespoň ukázal na nějakém příkladu prosím.. |
||
xmark Profil |
#16 · Zasláno: 20. 11. 2010, 15:18:35
Joudolol:
nepotřebuješ náhodou toto? tabulka clanky ID ... nazev .. neco .. atd tabulka odvetvi ID ... nazev tabulka prirazeni IDclanku ... IDodvetvi |
||
dehtak Profil |
#17 · Zasláno: 20. 11. 2010, 15:27:04 · Upravil/a: dehtak
Joudolol:
udelej to takhle , i kdyz podle mne je to blby, reseni 2 if (isset($_POST['send']) && $_POST['odvetvi']){ foreach ($_POST['odvetvi'] as $o){ mysql_query("INSET INTO seznam ('id_odvetvi',id_seznam) VALUE('$o', 'id_seznamu s obsahem') "); } } $result = mysql_query ("SELECT id FROM seznam WHERE id=1"); while($row=mysql_fetch_array($result)){ $row2=mysql_fetch_array(mysql_query ("SELECT * FROM seznam,odvetvi WHERE seznam.id_seznam=$row['id'] AND odvetvi.id= seznam.odvetvi_id")); } budes muset ukladat i id_seznamu, pokud mas i v seznamu nakej obsah abys ho nemusel 50x ukladat do tabulky i s id_odvetvim podle 1 reseni by to bylo takto if (isset($_POST['send']) && $_POST['odvetvi']){ $odvetvi_id = implode("|",$_POST['odvetvi']); mysql_query("INSET INTO seznam(id_odvetvi) VALUE($odvetvi_id) "); } $row=mysql_fetch_array( mysql_query ("SELECT * FROM seznam WHERE id=1")); $id_odvetvi = explode("|", $row['id_odvetvi']); foreach ($id_odvetvi as $id ){ $row2=mysql_fetch_arra(mysql_query ("SELECT * FROM odvetvi WHERE id=$id ")); } min to zatezuje databazi |
||
dehtak Profil |
#18 · Zasláno: 20. 11. 2010, 15:41:54
panther:
„ní moc dobrý nápad cokoliv z pole spojovat do jednoho stringu pomocí nějakých oddělovačů.“ pokud se jedna o id je to jedno, jemu jde o spojovani tabulek , jak jsem tak nejak pochopil. takze neni dobry ukladat do tabulky seznam 20x id odvetvi , tim padem by musel but ukladat do tabulky seznam i ten obsah nebo by musel vytvorit dalsi sloupec id_seznam |
||
dehtak Profil |
#19 · Zasláno: 20. 11. 2010, 16:35:52
Joudolol:
> V DB mám tenhle zápis v odvetvi_id : 2|3|9 > Když přímo v PHPMyAdmin do SQL napíšu SELECT * FROM ... WHERE odvetvi_id = '2' > Vypíše: nulový počet výsledků Jasne ze 0 pocet vysledku to bys v tom radku musel mit pouze cislo 2 ale ty tam mas vice cisel, to reseni jsem uz napsal, $row=mysql_fetch_array( mysql_query ("SELECT * FROM nevim_co WHERE id=1")); $id_odvetvi = explode("|", $row['id_odvetvi']); foreach ($id_odvetvi as $id ){ $row2=mysql_fetch_arra(mysql_query ("SELECT * FROM odvetvi WHERE id=$id ")); } |
||
panther Profil |
#20 · Zasláno: 20. 11. 2010, 16:42:59
dehtak:
už vidíš, proč je nesmysl ukládat vše do jednoho řádku s oddělovačem? Dejme tomu, že uložím 10 hodnot oddělených „|“. K získání dat pak budu potřebovat 11! SQL dotazů. Přijde ti to normální. Mě moc ne. Směr, jakým Joudolola navádíš, je ten nejhorší možný. |
||
Joudolol Profil * |
#21 · Zasláno: 20. 11. 2010, 17:03:05
Díky všem za pomoc, už jsem to nějak skloubil, smícháním mých vědomostí a všech skriptů, co jsou zde. Ke všemu mi to ještě vysvětlil AM, za což mu také děkuji.
|
||
Časová prodleva: 13 let
|
0