Door
Tom geen
op 03-01-2012 20:59
gewijzigd op 03-01-2012 21:50
4.272 views
Hey,
Ik heb een foutmelding, en ik weet niet wat het is.
De meding is:
Parse error: syntax error, unexpected T_AS in C:***\autosite\autos.php on line 111
Het gaat dan om:
<?php
foreach (($Types as $Type) && ($Merken as $Merk)) {
?>
Hieronder de volledige code:
<?php
// We gaan $_GET['merk'] & $_GET['merk'] omzetten naar een variabele:
$TypeGET1 = implode('%', $_GET['type']);
$TypeGET = explode('%', $TypeGET1);
$MerkGET1 = implode('%', $_GET['merk']);
$MerkGET = explode('%', $MerkGET1);
// Databaseconnectie:
databaseConn();
// We gaan alle automerken uit de database selecteren:
$Select_types = mysqli_query($Conn, "SELECT DISTINCT type FROM vacatures") or trigger_error('Database fout.');
$Select_merken = mysqli_query($Conn, "SELECT DISTINCT merk FROM vacatures") or trigger_error('Database fout.');
// De connectie sluiten:
mysqli_close($Conn);
// Standaard $Brand variabele:
$Brands = '';
// Als er rijen zijn gevonden:
if(mysqli_num_rows($Select) > 0) {
// While loop met merken:
while($Row_types = mysqli_fetch_array($Select_types)) {
$Types = $Row_types['type'].'%'.$Brands;} // Hiermee maken we een string om later een array van te maken
while($Row_merken = mysqli_fetch_array($Select_merken)) {
$Merken = $Row_merken['merk'].'%'.$Brands;} // Hiermee maken we een string om later een array van te maken
// We gaan de laatste letter, teken van $Types * $Merken verwijderen, want dat is %:
$Types = substr($Types, 0, -1);
$Merken = substr($Merken, 0, -1);
// We gaan $Brand terug splitten met explode:
$Types = explode('%', $Types);
$Merken = explode('%', $Merken);
// We gaan de geselecteerde merken splitsen:
foreach (($Types as $Type) && ($Merken as $Merk)) {
// Hier moet een if functie: if(in_array(branche, $BrandGET3))
if(in_array($Merk, $MerkGET)) {
// We gaan alle merken tonen met een input box:
if(in_array($Type, $TypeGET)) {
blablabla;
Dan kan je denk ik een geneste foreach gebruiken. Dus:
<?php
foreach($merken as $merk){
foreach($typen as $type){
//bla bla bla
}
}
?>
Alleen, als ik nu naar je code kijk gebruik je ook nog "if(in_array($Merk, $MerkGET))".... dat begrijp ik niet. $merk is een element uit de array $merken en dan ga je daarop nog een inarray() loslaten. Dat lijkt me onzinnig. Die inarray() zou je op $merken los moeten laten (maar dan heb je die foreach niet meer nodig). Of is $merken een multidimensionale array?
[size=xsmall]Toevoeging op 03/01/2012 23:19:13:[/size]
Ok, ik kijk nu nog verder, en het spijt me zeer, maar wat je doet is uhm.... erg omslachtig en volkomen overdreven.
Eerst zet je namelijk alle types achter elkaar in een string met een delimiter ertussen:
$Types = $Row_types['type'].'%'.$Brands;
En dan splits je ze weer met explode:
$Types = explode('%', $Types);
Om vervolgens eerst met foreach er doorheen te lopen en dan in die loop weer een inarray() te gebruiken....
Echt, ik weet niet waarom je denkt dat dit nodig is, maar ik zou je willen aanraden dit even allemaal te deleten en opnieuw te beginnen.
los van je laatste toevoeging, daar zal ik nog eens naar kijken! Maar wat betreft de if(in_array($merk,$merkGET)), je wilt toch eest 1 merk selecteren, en dan pas kijken of dit merk in de lijst $merkGET voorkomt! En vervolgens dat met elke item uit de foreach loop!
[size=xsmall]Toevoeging op 04/01/2012 08:57:25:[/size]
Hey Erwin,
Ik heb even gouw een aanpassing gedaan, ik heb alleen nog even geen tijd om het te controleren. Maar denk je dat dit gaat werken:
<?php
// We gaan $_GET['merk'] & $_GET['merk'] omzetten naar een variabele:
$TypeGET1 = implode('%', $_GET['type']);
$TypeGET = explode('%', $TypeGET1);
$MerkGET1 = implode('%', $_GET['merk']);
$MerkGET = explode('%', $MerkGET1);
// Databaseconnectie:
databaseConn();
// We gaan alle automerken uit de database selecteren:
$Select_types = mysqli_query($Conn, "SELECT DISTINCT type FROM autos") or trigger_error('Database fout.');
$Select_merken = mysqli_query($Conn, "SELECT DISTINCT merk FROM autos") or trigger_error('Database fout.');
$Select_count = mysqli_query($Conn, "SELECT COUNT(*) AS aantal FROM autos") or trigger_error('Database fout.');
// De connectie sluiten:
mysqli_close($Conn);
// Als er rijen zijn gevonden:
if(mysqli_num_rows($Select) > 0)
{
// While loop met merken:
while($Row_types = mysqli_fetch_array($Select_types))
{
$Types = $Row_types['type'];
}
los van je laatste toevoeging, daar zal ik nog eens naar kijken! Maar wat betreft de if(in_array($merk,$merkGET)), je wilt toch eest 1 merk selecteren, en dan pas kijken of dit merk in de lijst $merkGET voorkomt! En vervolgens dat met elke item uit de foreach loop!
Maar hoeveel elementen denk jij dat er in de array $merkGET zitten dan? $merkGET definieer je als volgt:
Oftewel, er zit maar 1 element in die hele array.... Dus waarom er een array van maken in de eerste plaats?
Zoals ik al zei, echt, ik denk dat je beter opnieuw kunt beginnen want afgezien van de syntax fouten klopt je structuur gewoon niet. Uiteraard kunnen we je er bij helpen, maar dat gaat beter vanaf een lege pagina.
Probeer anders eens uit te leggen wat je nu precies wilt bereiken. Welke gegevens zitten er bijvoorbeeld in je GET array (variabele type, wat betekenen ze), wat wil je er mee doen en wat voor gegevens zitten er in je database? Hoe is die gestructureerd en op welke manier moeten de gegevens in je database gecontroleerd worden met de gegevens in je GET array. Het zou mij namelijk niet verbazen als je bijna je hele script kan vervangen door een query.
Wat ik heb is 1 tabel, met daarin alle beschikbare auto’s met de velden:
Merk, type, bouwjaar, apk, beschrijving enz…
Nu wil ik dat je kunt aanvinken welk merk dat je wilt zoeken, bijvoorbeeld alleen volkswagen, opel en peugot. (deze worden bij mijn in $MerkenGET gepost) Maar je kunt alleen een merk selecteren als deze ook daadwerkelijk in de db aanwezig is. Want als er geen Bentley beschikbaar is, dan hoeft deze ook niet in de keuzelijst te staan (dat wordt onoverzichtelijk).
Vervolgens wil ik alle types tonen die in de db beschikbaar zijn, is er geen Opel Astra beschikbaar, dan deze ook niet tonen! Vervolgens wil ik wanneer ik een aantal types heb geselecteerd, deze gezocht worden. Mocht ik toch nog een ander type willen selecteren, dan moet je opnieuw zoeken, en dan moet alles WEL geselecteerd blijven? Niet dat je dan al je selectiekeuzes kwijt bent! (Deze post ik dus in $typesGET)
Dat is wat ik wil bereiken! En ik dacht dat dit wel zou werken, maar ik zou het fijn vinden als je me wilt helpen verbeteren.
Dat is wat ik wil bereiken! En ik dacht dat dit wel zou werken, maar ik zou het fijn vinden als je me wilt helpen verbeteren.
We gaan in elk geval een poging wagen.
Dus als ik het goed begrijp wil je met dit script controleren of de aangevinkte merken en types wel in je database staan en of die dus getoond kunnen worden?
Dan nog een paar vragen. Hoe weet je dat de merk/type combinaties kloppen? Wat als iemand bijvoorbeeld Audi en Corsa aanvinkt? Laat je dan alle Audi's zien en alle Opel Corsa's, of zeg je dan dat dat geen juiste combinatie is? Wat is het eindresultaat van het script, moeten alle records die aan de aangevinkte merken/types voldoen worden getoond?
Als iemand Audi Corsa selecteerd, dan krijg hij inderdaad een melding dat dat niet klopt. Maar dat is bij de upload page aan de orden.
Maar als je al je gewenste merken/types hebt aangevinkt. Dan krijg je inderdaag een lijst met alle beschikbare aanbiedingen. Dat mogen dus gewoon 7 opel corsa's zijn of net hoeveel aanbiedingen er zijn.
Maar hoe kunnen de merken en types dan aangevinkt worden? Zijn het twee losse lijsten waar je meerdere kunt selecteren? Wat als ik Audi, Opel, Volvo aanvink als merken, en dan Clio als type? Hoe weet je in dit script welk merk(en) en type(s) bij elkaar horen (afgezien van wat er in de DB staat, puur op basis van de info die je van de gebruiker krijgt)?
als je Audi, Opel en Volvo aanvinkt, dan krijg je in de volgende lijst alleen types van dat merk. Een Clio is van Renauld, en die heb je niet aangevinkt. Dus die zal je ook niet te zien krijgen.
En ik dacht als ik een lijst heb van merken en een van types, dat deze 1 op 1 gelijk zouden lopen en dus altijd bij elkaar horende merk/types hebt. Maar heel strikt genomen, heb je wel gelijk dat je uit de orden kan gaan lopen met je lijst en dat de eene lijst voorloop op de andere lijst, en dus een verkeerde types bij merken krijg. (dat is wel het gevaar! inderdaad)