checkbox overzicht en updaten
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.
<?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='';
}
echo '<input type="checkbox" name="filters[]" value="'.$row['item_id'].'"> '.$row['item_omschrijving'].'<br />';
}
mysql_free_result($uitvoeren);
?>
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 (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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='';
}
echo '<input type="checkbox" name="filters[]" value="'.$row['item_id'].'"> '.$row['item_omschrijving'].'<br />';
}
mysql_free_result($uitvoeren);
?>
Gewijzigd op 19/08/2013 10:30:21 door Kees Mulder
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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)
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
Opps, aliasje vergeten bij de laatste join
Gewijzigd op 19/08/2013 18:58:31 door Ger van Steenderen
En kan ik dan als eind toevoegen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WHERE item_id = '2';
want zo ziet de tabellen eruit:
ITEMS
item_id - item_omschrijving
1 - Appel
2 - Banaan
3 - Kiwi
4 - Winterpeen
5 - Komkommer
FILTERS
filter_id - filter_omschrijving
1 - groente
2 - fruit
3 - geel
4 - groen
5 - rood
6 - oranje
ITEMS_FILTERS
item_id - filter_id
1 - 2
1 - 4
1 - 5
2 - 2
2 - 3
3 - 2
3 - 4
4 - 1
4 - 6
5 - 1
5 - 4
Ik wil nl. de banaan zien (2) en dan alle filters die er zijn met dan alleen filter 2 en 3 geselecteerd (vinkje aan).
want zo ziet de tabellen eruit:
ITEMS
item_id - item_omschrijving
1 - Appel
2 - Banaan
3 - Kiwi
4 - Winterpeen
5 - Komkommer
FILTERS
filter_id - filter_omschrijving
1 - groente
2 - fruit
3 - geel
4 - groen
5 - rood
6 - oranje
ITEMS_FILTERS
item_id - filter_id
1 - 2
1 - 4
1 - 5
2 - 2
2 - 3
3 - 2
3 - 4
4 - 1
4 - 6
5 - 1
5 - 4
Ik wil nl. de banaan zien (2) en dan alle filters die er zijn met dan alleen filter 2 en 3 geselecteerd (vinkje aan).
Gewijzigd op 19/08/2013 15:58:11 door Kees Mulder
Ik heb de query in mijn vorige reactie aangepast, voor een voorbeeld van het resultaat zie hier
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>
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>




