Autor Zpráva
Jack06
Profil
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
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
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
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
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
Jack06:
samozřejmě ;)
<input type='checkbox' name='vybaveni_technicke[16]' value="1">&nbsp;pivnice 
<input type='checkbox' name='vybaveni_technicke[17]' value="1">&nbsp;parkoviště 
<input type='checkbox' name='vybaveni_technicke[18]' checked value="1">&nbsp;uzavřené parkoviště


kde name='vybaveni_technicke[17]' 17 je id toho sportu z tabulky sports jejíž návrh je výš.
Jack06
Profil
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í?
Jack06
Profil
SwimX
Funguje THX
DoubleThink
Profil *
Můžeš použít také vlastní enumeraci hodnot, pak si vystačíš v databázi s jedním číselným sloupcem na všechno.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: