Door
Kees Mulder
op 19-08-2013 10:09
gewijzigd op 19-08-2013 10:30
2.747 views
Ik wil graag filters gebruiken voor mijn items (producten). Nu heb ik drie tabellen:
ITEMS
item_id
item_omschrijving
FILTERS
filter_id
filter_omschrijving
ITEMS_FILTERS
item_id
filter_id
Nu wil ik een totaaloverzicht met alle filters en als er een filter ingevoerd is moet deze aangevinkt zijn als checkbox. Alleen krijg ik het niet voor elkaar.
[code]
[code]
<?php
$query = "SELECT * FROM filters LEFT JOIN items_filters ON item_filters.if_filter_id = filters.filters_id";
$uitvoeren = mysql_query($query) or die (error($query, $HTTP_SERVER_VARS['PHP_SELF']));
While ($row = mysql_fetch_array($uitvoeren))
{
if($row['if_item_id'] = $row1['code'])
{
$check='checked=checked';
} else
{
$check='';
}
Ten aanzien van je code:
Schrijf je query volledig uit ipv * te gebruiken.
$HTTP_SERVER_VARS is deprecated (vervallen). Vervangen door $_SERVER
Zou PHP_SELF niet gebruiken. (B)lijkt onveilig te zijn.
Gebruik ook geen 'die', maar zorg voor een nette(re) foutafhandeling.
Waarom mysql_fetch_array? En niet mysql_fetch_assoc?
Wat doe je verder met $check in de while?
mysql_* komt ook te vervallen. Stap (bv) over op mysqli.
Het eenvoudigste is om met een cross join in een subquery eerst alle filters aan een item te koppelen en dan via een left join kijken of de filter 'geselecteerd' is:
SELECT
sub.item_id,
sub.item_omschrijving,
sub.filter_id,
sub.filter_omschrijving,
IF (fi.filter_id IS NULL, 0, 1) AS selected
FROM
(SELECT
i.item_id,
i.item_omschrijving,
f.filter_id,
f.filter_omschrijving
FROM
items AS i
CROSS JOIN
filters AS f
WHERE item_id = 2
) AS sub
LEFT JOIN
items_filters AS fi
USING (item_id, filter_id)
[edit]
Opps, aliasje vergeten bij de laatste join
[/edit]
Ik heb het aan mijn script toegevoegd en het werk super. Ook toevoegen en wijzigen. Alleen lukt één ding nog niet en dat is dat hij de checkbox niet aanvinkt als deze op checked staat...
Als ik de bron kijk dan klopt het gewoon en zie ik checked staan bij een 0 en geen checked bij 1 (of net anders om). Alleen op het scherm zie ik de vinkjes niet staan. Waar kan dat aan liggen?
Toevoeging op 20/08/2013 13:57:38:
Probleem is opgelost, zat iets fout met <div> of <form>