Autor | Zpráva | ||
---|---|---|---|
Jack06 Profil |
#1 · Zasláno: 1. 9. 2009, 17:31:01 · Upravil/a: Jack06
Dobrý den, řeším teď takové dilema. Dělámuživateloj profil, (vzhled, záliby, aktivní sporty, pasivní sporty, atd)
Jde ot o že si je bude vybírat checkboxama a zapisovat do databáze. Nejradši bych udělal pole nejspíše typu varchar(x), do kterého by se vešli čísla checkboxů [jelikož při výběru z array mhu přiřadit každému xheckboxu číslo, tak to zapíšu i do databáze, je to méně dat než psát ty slova] Ovšem viděl jsem a četl jsem, že to není správný důvod pro zapisování a tvoření zpětně pole. že se dělá tabulka typu ID | uživatel | druh_profilu | cislo z array | a když zaškrtne deset věcí v databázi bude 10 záznamů.. Ovšem teď se dostávám k problému: Jestliže se bude na zaškrtání celkem v celých profilech cca 100 políček a bude registrovaných 1000 lidí, tak to bude 10 000 záznamů a bude to růst (beru to v maximech) a když si bude chtít změnit v profilu jednu věc a odškrtne ji, jak mazat právě to co odškrtl... Nebude to tedy lepší tím prvním ač třeba ne správným způsobem, kdy se updatuje jedno políčko prostě číslama jen z poslaných checkboxů?? Děkuji za případné rady. |
||
SwimX Profil |
#2 · Zasláno: 1. 9. 2009, 17:43:17
Jack06:
udělal bych to takto: tabulka users id | jmeno | prijmeni | fotbal | hokej | tenis a podle těch checkboxů které vybere se do daného sloupce dá 1. Když něco odšrtne tak pouze UPDATE SET fotbal= 0 WHERE id = id... to bude fungovat v případě že se nebudou dynamicky příliš často měnit checkobxy (sloupce v DB) jinak by to asi chtělo udělat tři tabulky users id | jmeno | prijmeni sports id | sport_nazev neco id | id_uzivatele = users.id | id_sportu = sports.id je to sice horší, natahuje to DB, a mazat se pak musí přesně jak píšeš, ale zase stačí do jedné tabulky přidat název (pokud to uděláš dobře *výpis chcekoxů z DB podle tabulky sports) |
||
Jack06 Profil |
#3 · Zasláno: 1. 9. 2009, 17:49:06 · Upravil/a: Jack06
SwimX
Jenže tam bude třeba html tabulka s checkboxama: aktivní sporty: a 20checkboxů se sportama pasivní sporty: 20 checkboxů se sportama záliby: 30 checkboxů s výběrem co koho baví A když jeden z těch x (třeba 20) odškrtne, jak když dá uložit to pozná, kterej odškrtl, když se pak neodešle? To bych musel issetovat všechny checkboxy asi takto (if(!isset(checkbox ten a ten){delete from tabulka where id=cislo, ktere to vytahlo) |
||
SwimX Profil |
#4 · Zasláno: 1. 9. 2009, 18:01:56
Jack06:
to se řeší nějak takle: (příklad z posledního webu) mysql_query("DELETE FROM vybaveni_technicke WHERE id_spolecnost=$spolecnost_id AND id_zarizeni NOT IN ". make_mysql_set_from_array($_POST['vybaveni_technicke'], true)); kde make_mysql_set_from_array je function make_mysql_set_from_array($array, $usekeys=false){ if(!@$array) return '(NULL)'; $return = '('; if($usekeys) foreach($array as $key => $value){ $return .= '"' . addslashes($key) . '", '; } else foreach($array as $value){ $return .= '"' . addslashes($value) . '", '; } $return = substr($return, 0, -2); $return .= ')'; return $return; } a potom (po té co smažeš checkoby co nejsou vybraný) uděláš: if(@$_POST['vybaveni_technicke']) foreach($_POST['vybaveni_technicke'] as $key => $value) mysql_query("INSERT INTO vybaveni_technicke SET id_spolecnost=$spolecnost_id, id_zarizeni=$key ON DUPLICATE KEY UPDATE id_zarizeni=$key"); |
||
Jack06 Profil |
#5 · Zasláno: 1. 9. 2009, 19:39:37
SwimX
Tj, ale tak to bych ty checkboxy po odeslání formuláře musel dát nějak do array ne? nebo jak když budu mít: <form action="form.php" method="post"> <table> <tr> <td><input type="checkbox" name="0" checked="checked">Hohej</td> <td><input type="checkbox" name="1" checked="checked">Fotbal</td> <td><input type="checkbox" name="2">Florbal</td> </tr> <tr> <td><input type="checkbox" name="3">Basketbal</td> <td><input type="checkbox" name="4">Volejbal</td> <td><input type="checkbox" name="5">Plavání</td> </tr> <tr> <td><input type="checkbox" name="6">Nevyplneno4</td> </tr> </table> </form> tak to po odeslání frknu přez tu funkci?? |
||
SwimX Profil |
#6 · Zasláno: 1. 9. 2009, 19:51:03 · Upravil/a: SwimX
Jack06:
samozřejmě ;) <input type='checkbox' name='vybaveni_technicke[16]' value="1"> pivnice <input type='checkbox' name='vybaveni_technicke[17]' value="1"> parkoviště <input type='checkbox' name='vybaveni_technicke[18]' checked value="1"> uzavřené parkoviště kde name='vybaveni_technicke[17]' 17 je id toho sportu z tabulky sports jejíž návrh je výš. |
||
Jack06 Profil |
#7 · Zasláno: 1. 9. 2009, 19:54:34 · Upravil/a: Jack06
SwimX
Super.. Díky moc zkusím to a dám vědět ještě jednou díky //ohledně těch počtů záznamů v tabulkách to tedy nevadí? |
||
Časová prodleva: 12 dní
|
|||
Jack06 Profil |
#8 · Zasláno: 13. 9. 2009, 14:19:53 · Upravil/a: Jack06
SwimX
Funguje THX |
||
DoubleThink Profil * |
#9 · Zasláno: 13. 9. 2009, 15:47:25
Můžeš použít také vlastní enumeraci hodnot, pak si vystačíš v databázi s jedním číselným sloupcem na všechno.
|
||
Časová prodleva: 15 let
|
0