Probleem met SELECT en IF

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wilfried Acke

Wilfried Acke

05/06/2016 21:19:30
Quote Anchor link
Ik ben nu al weken aan het zoeken om het volgende probleem op te lossen en het lukt me niet.
Ik heb fout meldingen ingebouwd, echo's en op het web en in handleidingen gezocht.

Ik heb een formulier met 4 keuzevakjes: Land,Maand,Prijs,Logies.
Als men bij alle 4 iets selecteert werkt mijn resultatenpagina.
Echter is er ook de mogelijkheid om het volgende te selecteren:
Bij Land : <option value='Alle'>- Alle Landen
Bij Maan d : <option value='Gans'>Gans het jaar
Bij Prijs: <option value='Iedere'>Iedere prijs
Bij Logies : <option value='Alles'>Alle

Aangezien dat ‘Alle’ ‘Gans’ ‘Iedere’ ‘Alles’ niet in de db staan dacht ik het op te lossen met: if na SELECT
Dat lukt niet voor alle if

Code 19-22 werkt
Code 24-27 werkt niet
Code 29-32 werkt
Code 34-37 werkt niet
Code 39-42 werkt

Wat doe ik fout ?



Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

include('connect.php');

$zoekland=$_POST["LAND"];
$zoekmaand=$_POST["MAAND"];
$zoekprijs=$_POST["PRIJS"];
$zoeklogies=$_POST["LOGIES"];

$Alle='Alle';
$Gans='Gans';
$Iedere='Iedere';
$BHR='BHR';

$sql = "SELECT  LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE ";

if  ($zoekland==$Alle)
{

$sql.=" MAAND ='$zoekmaand' AND PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};


if  ($zoekland==$Alle&&$zoekprijs==$Iedere&&$zoeklogies==$BHR)
{

$sql.=" MAAND ='$zoekmaand' ";
};


if ($zoekmaand==$Gans&&$zoekprijs==$Iedere&&$zoeklogies==$BHR)
{

$sql.= "LAND = '$zoekland' ";
};


if  ($zoekland==$Alle&&$zoekmaand==$Gans)
{

$sql.="  PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};


if  ($zoekland!=$Alle&&$zoekmaand!=$Gans&&$zoekprijs!=$Iedere&&$zoeklogies!=$BHR)
{

$sql.=" LAND='$zoekland' AND MAAND ='$zoekmaand' AND PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};




if(!$result = $mysqli->query($sql))
{

trigger_error('Fout in query: '.$mysqli->error);
}

else
while($row = $result->fetch_assoc())

{

$land = $row['LAND'];
$maand = $row['MAAND'];
$datum = $row['DATUM'];
$tocht = $row['TOCHT'];
$foto = $row['FOTO'];
$tekst = $row['TEKST'];
$prijs = $row['PRIJS'];
$logies = $row['LOGIES'];
$soort = $row['SOORT'];


$kolom_breedte   =['360'];
$top = 'top';
$info='meer weten ...';
$left='left';
$right='right';
?>

<table cellspacing="15">
 <tbody>
   <tr>
    <td colspan="5" valign="top" ><hr></td>
    </tr>
    <tr>
       <td valign="top"></td>
       <td valign="top"></td>
       <td valign="top" align="left" width="250"><p></p></td>
       <td valign="top" width="100"><p></p></td>
       <td valign="top" width="50"><p></p></td>
      
      
     </tr>
     <tr>
<?php
echo"    <td valign=$top>$land</td>
        <td valign=$top><a href='$land.html'>$tocht</a></td>
        <td valign=$top align=$right>$datum</td>
        <td valign=$top align=$left>$maand</td>
        "
;
echo"    </tr>";
echo"        <tr>";
echo"    <td valign=$top><a href='$land.html'><img src='$foto.JPG' width=200 hight=250 /></a></td>
        <td valign=$top align=$left>$tekst<br><p><a href='$land.html'>$info</a></p></td>
        <td valign=$top align=$right>$prijs Euro</td>
        <td valign=$top align=$left>$soort</td>
        <td valign=$top align=$left>$logies</td>
        "
;

echo"        </tr>";
}

?>



</tbody></table>
 
PHP hulp

PHP hulp

16/06/2024 10:34:14
 
Adoptive Solution

Adoptive Solution

05/06/2016 23:10:07
Quote Anchor link
In regels 26 en 36 ontbreekt AND. Omdat $sql in regel 21 al gevuld is, is de query fout.
 
Wilfried Acke

Wilfried Acke

05/06/2016 23:17:35
Quote Anchor link
(regel 21)Dus kan ik op die manier niet met IF werken.
Wat kan ik dan wel doen ?
 
Adoptive Solution

Adoptive Solution

05/06/2016 23:41:02
Quote Anchor link
Ga alle if's langs en echo na elke if de $sql variable om te zien wat erin staat.
 
Wilfried Acke

Wilfried Acke

06/06/2016 00:02:08
Quote Anchor link
Als ik de tweede IF toepas codenr. 19-22 krijg ik dubbele resultaten

SELECT LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE MAAND ='Juli 16' AND PRIJS ='Iedere' AND LOGIES ='BHR'
SELECT LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE MAAND ='Juli 16' AND PRIJS ='Iedere' AND LOGIES ='BHR' MAAND ='Juli 16'
SELECT LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE MAAND ='Juli 16' AND PRIJS ='Iedere' AND LOGIES ='BHR' MAAND ='Juli 16'
SELECT LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE MAAND ='Juli 16' AND PRIJS ='Iedere' AND LOGIES ='BHR' MAAND ='Juli 16'
SELECT LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE MAAND ='Juli 16' AND PRIJS ='Iedere' AND LOGIES ='BHR' MAAND ='Juli 16'

Notice: Fout in query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MAAND ='Juli 16'' at line 1 in /var/www/vhosts/aw-netbe/aw-net.be/wwwroot/test/zoeken.php on line 48
 
Ozzie PHP

Ozzie PHP

06/06/2016 00:18:08
Quote Anchor link
Ik weet niet precies wat je wilt, maar probeer dit eens ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$sql
= "SELECT  LAND, MAAND, DATUM, TOCHT, FOTO, TEKST, PRIJS, LOGIES, SOORT FROM `hippotrail` WHERE ";

if  ($zoekland==$Alle)
{

$add=" MAAND ='$zoekmaand' AND PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};


if  ($zoekland==$Alle&&$zoekprijs==$Iedere&&$zoeklogies==$BHR)
{

$add=" MAAND ='$zoekmaand' ";
};


if ($zoekmaand==$Gans&&$zoekprijs==$Iedere&&$zoeklogies==$BHR)
{

$add=" LAND = '$zoekland' ";
};


if  ($zoekland==$Alle&&$zoekmaand==$Gans)
{

$add=" PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};


if  ($zoekland!=$Alle&&$zoekmaand!=$Gans&&$zoekprijs!=$Iedere&&$zoeklogies!=$BHR)
{

$add=" LAND='$zoekland' AND MAAND ='$zoekmaand' AND PRIJS ='$zoekprijs' AND LOGIES ='$zoeklogies' ";
};


$sql = $sql.$add;

?>
 
Wilfried Acke

Wilfried Acke

06/06/2016 00:37:47
Quote Anchor link
Dat werkt. Haha. De fout was dus $sql.
Morgen verder schrijven want er zijn nog een aantal IF's mogeljk.
Heel erg bedankt, ik had beter vroeger hulp gevraagd.
 
Ozzie PHP

Ozzie PHP

06/06/2016 00:41:17
Quote Anchor link
Graag gedaan ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2016 11:34:44
Quote Anchor link
Een andere strategie was mogelijk handiger geweest.

Voeg alleen een argument aan de query toe indien er een specifieke waarde is ingevuld. Nu ben je alle mogelijke combinaties van of iets mogelijk wel of niet is ingevuld aan het afgaan en dat is niet nodig. Controleer dit gewoon per argument en bouw zo stapsgewijs de query op in plaats van dit proberen in 1x te doen. Dit (de huidige oplossing(srichting)) zorgt ook voor een onoverzichtelijke brei van if-statements.

En als dit een zoekformulier betreft is de GET methode mogelijk handiger dan de POST methode omdat je met GET vrij voor- en achteruit kunt navigeren zonder dat je browser begint te zeuren dat informatie opnieuw verzonden wordt en ook zijn zoekopdrachten dan te bookmarken en door te sturen. Dit zorgt in zijn algemeenheid voor een prettigere zoek-ervaring.
Gewijzigd op 06/06/2016 11:36:30 door Thomas van den Heuvel
 
Wilfried Acke

Wilfried Acke

06/06/2016 14:26:01
Quote Anchor link
Ja dat klopt. Ik denk dat ik nu een 15 IF nodig heb en ik vrees dat het inderdaad nogal onoverzichtelijk gaat worden. Maar mijn kennis is niet groot genoeg om het anders op te lossen, tenzij je me op het goede spoor wilt zetten :-)
 
Ozzie PHP

Ozzie PHP

06/06/2016 14:29:55
Quote Anchor link
Hier zie je al een voorbeeldje (het 2e codeblok) waar je eens naar zou kunnen kijken en wat inspiratie van zou kunnen opdoen voor jouw eigen situatie ...

http://patrickallaert.blogspot.nl/2007/09/building-dynamic-sql-queries-elegant.html
 
Wilfried Acke

Wilfried Acke

06/06/2016 14:37:50
Quote Anchor link
Begrijp er niet heel veel van, een beetje wel. Ga me er in verdiepen.
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2016 19:55:58
Quote Anchor link
Repetition is the path to mastery ;)

En als je ook nog verschillende veldtypen wilt verwerken krijg je mogelijk zoiets (ter inspiratie).

Vragen? vragen!
 
Wilfried Acke

Wilfried Acke

06/06/2016 20:04:55
Quote Anchor link
Quote:
Repetition is the path to mastery ;)


Het pad is nog heel smal hoor . Maar de aanhouder wint :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.