Parse error: unexpected T_AS
Tot zover denk ik het te begrijpen. Dan wat er moet gebeuren is hoe je de data uit je database krijgt. Volgens mij krijg je dus twee arrays terug van de gebruiker, een met merken en een met types. Op basis daarvan wil je records uit je database halen en dat kan op zich met een simpele query. Stel de gebruiker heeft de volgende merken en types geselecteerd (inclusief een foute):
merken = (Audi, Volvo, Opel)
types = (Corsa, Clio, A4, S40, Astra)
Dan kan je met deze query alle juiste combinaties eruit krijgen:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT merk, type
FROM autos
WHERE merk IN ('Audi','Volvo','Opel')
AND type IN ('Corsa','Clio','A4','S40','Astra')
ORDER BY merk, type;
FROM autos
WHERE merk IN ('Audi','Volvo','Opel')
AND type IN ('Corsa','Clio','A4','S40','Astra')
ORDER BY merk, type;
In de SELECT clause kan je uiteraard alle velden opnemen die je wilt en de ORDER BY is ook maar een voorbeeld. Belangrijker nu is het WHERE deel. Wat ik hier dus zeg is dat alle records geselecteerd moeten worden die zowel een merk uit de merken array hebben, als een type uit de types array. Opel Astra, Volvo S40 etc worden dus wel geselecteerd, maar Opel Vectra dus niet, Renault Clio ook niet. Wat je dus alleen niet doet is controleren op foute combinaties. Mocht er een Volvo Clio in je database staan dan wordt die nu wel geselecteerd.
Gewijzigd op 04/01/2012 10:41:00 door Erwin H
Het gaat mij eerst om de selectielijsten. Ik wil een lijst met alle beschikbare types uit de db, dus aan de hand van jou voorbeeld alleen alle types van audi, opel en volvo. Dus geen clio o.i.d. we gaan ervan uit dat dit onmogelijk is om te uploaden. Maar de lijst moet wel variabel zijn! want iemand anders wil misschien alleen peugot en renauld zien! of weet ik veel wat voor een combinatie...
En als we alle beschikbare types hebben, dan moeten we kijken of deze eerder was aangevinkt of niet. zo ja opnieuw aanvinken. zo nee, niet aanvinken.
Code (php)
1
2
3
4
2
3
4
SELECT DISTINCT merk, type, CONCAT(merk,"_",type) AS merk_type
FROM autos
WHERE merk = 'blablabla'
ORDER BY merk, type;
FROM autos
WHERE merk = 'blablabla'
ORDER BY merk, type;
Wil je meerdere merken tegelijk selecteren krijg je dit:
Code (php)
1
2
3
4
2
3
4
SELECT DISTINCT merk, type, CONCAT(merk,"_",type) AS merk_type
FROM autos
WHERE merk IN ('blablabla1','blablabla2','blablabla3')
ORDER BY merk, type;
FROM autos
WHERE merk IN ('blablabla1','blablabla2','blablabla3')
ORDER BY merk, type;
Zoals je overigens ziet heb ik er een extra kolom bij gedefinieerd "merk_type" en dat is voor het volgende deel van je vraag, hoe de checkboxen te maken.
Ten eerste is het dan van belang dat je die goed opbouwt in je HTML. Als je het als volgt doet:
Code (php)
1
2
3
4
2
3
4
//merk checkbox
<input type="checkbox" name="merk[]" value="...">
//type checkbox
<input type="checkbox" name="merk_type[]" value="...">
<input type="checkbox" name="merk[]" value="...">
//type checkbox
<input type="checkbox" name="merk_type[]" value="...">
Dan krijg je de aangevinkte checkboxen direct in een array terug in je php $_POST array, waardoor je er direct mee kunt werken. Je $_POST array zal dan zijn:
$_POST = array([merk] => Array(....), [merk_type] => Array(....))
Mits uiteraard, er tenminste een is aangevinkt (zie laatste opmerking).
Als je dan je data uit de database hebt en je de checkboxes wilt printen is het eigenlijk vrij eenvoudig om ze aangevinkt te zetten of niet. ($data is de variabele waarin ik even aanneem dat je al je data hebt gezet die uit de database is gekomen.)
Code (php)
Dit is voor alle types dus, voor de merken kan je hetzelfde doen. Merk op dat ik merk_type heb gebruikt voor de value van de checkbox. Dit doe ik omdat je dan nog een check inbouwt op eventuele dubbele model namen. Ik weet niet of het mogelijk is, maar theoretisch zou je een Volvo S40 en een Mercedes S40 op zeker moment kunnen hebben en daar zou je dan op nat kunnen gaan.
Nog een opmerking: bovenstaande zal fout gaan op het moment dat er een gebruiker is die geen checkboxen heeft aangevinkt. Op dat moment zal de $_POST array namelijk niet gevuld zijn en kan je dus de check niet maken om te kijken of een checkbox moet zijn aangevinkt. Simpele oplossing:
Neem dit op in je script voor je verder met de $_POST array gaat werken. Zelfde voor het $_POST["merk"] element.
Gewijzigd op 06/01/2012 10:43:49 door Erwin H