Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/06/2007, 15h58   #1
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 4
Points : 4
Par défaut [SQL] Problème construction requête SQL - PHP

Bonjour à tous,
Voilà j'ai un petit soucis pour développer mon application, j'ai un formulaire permettant à l'utilisateur d'effectuer une recherche avec différentes listes déroulantes.

Le problème est le suivant :
Code :
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
<?php
$ch_commu = $_POST['commune'];
$instru = $_POST['instructeur'];
$numord= $_POST['no_ord'];
$perm = $_POST['permis'];
 
if (!empty($ch_commu))
{
$param1 = "Commune = '" .$ch_commu. "'";
}
else
{
$param1 = "";
}
 
if (!empty($instru))
{
$param2 = "Instructeur = '" .$instru. "'";
}
else 
{
$param2 = "";
}
if (!empty($numord))
{
$param3 = "Ordre_du_jour = '" .$numord. "'";
}
else
{
$param3 = "";
}
if (!empty($perm))
{
$param4 = "N_permis = '" .$perm. "'";
}
else
{
$param4 = "";
}
 
 
$option = "$param1 AND $param2 AND $param3 AND $param4";
echo $option;
$consul = mysql_query(" SELECT * FROM t_dossiers WHERE '".$option."'");
$resconsul = mysql_fetch_array($consul);
 
echo "</br> SELECT * FROM t_dossiers WHERE '".$option."'";
 
?>
je teste ce que l'utilisateur a choisit dans la liste déroulante ou si il n'a rien séléctionner mais si il ne sélectionne rien/1choix/2choix/3choix le AND de ma requête SQL apparait toujours.
Ma requête est valide que si il choisit une valeur à chaque liste déroulante.

Je ne sais pas comment faire pour construire ma requete.

Merci d'avance.
laulau37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h04   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Normal, car quand certains paramètres sont vides ca donne une requete de ce style :

SELECT * FROM matable WHERE AND AND AND; donc ca n'est pas valide.

Il faudrait plutot construire ta requete au fur et a mesure :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$req = "SELECT * FROM matable ";
$condition = " WHERE "; // attention aux espaces, et la premiere condition est where
 
// si premier param selectionné
if(isset($param1) )
{
$req .= $condition . " param1 = '" . $param1 . "' ";
$conditition = " AND " ; // mnt on aura un AND
}
 
// si premier param selectionné
if(isset($param2) )
{
$req .= $condition . " param2 = '" . $param2 . "' ";
$conditition = " AND " ; // mnt on aura un AND
}
//etc...
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h08   #3
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Code :
$option = "$param1 AND $param2 AND $param3 AND $param4";
Ici, il te suffit de tester si un param est vide avant de l'ajouter à la requete :

Par exemple :
Code :
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
 
$option = $param1;
 
if ($option != "")
{
  if ($param2 != "") $option = $option." AND ".$param2;
}
else
{
  $option = $param2;
}
 
 
if ($option != "")
{
  if ($param3 != "") $option = $option." AND ".$param3;
}
else
{
  $option = $param3;
}
 
 
if ($option != "")
{
  if ($param4 != "") $option = $option." AND ".$param4;
}
else
{
  $option = $param4;
}
EDIT : Flûte ! grillé !

Ben comme ça, t'auras 2 exemples...

3 exemples... décidemment, y'en a qu'on de la chance !
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h08   #4
Membre Expert
 
Avatar de guigui5931
 
guillaume defrain
Inscription : avril 2006
Messages : 1 667
Détails du profil
Informations personnelles :
Nom : guillaume defrain
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2006
Messages : 1 667
Points : 2 099
Points : 2 099
Ce que tu peux faire c'est au lieu de faire
faire
pour les 4 paramètres
Comme ça tu aura des 1 dans les paramètre vide (ce qui correspont au boolean true).
C'est pas forcement le plus propre mais ça devrait marcher
__________________
autant l'hiver éclate que l'hétéroclite
le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre
guigui5931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h10   #5
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
guigui5931 :

J'avais jamais pensé à ça... je trouve que c'est la solution la plus maline et celle qui fait le code le plus petit, donc le plus clair... bien vu !
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h50   #6
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 4
Points : 4
Merci à tous ça marche
laulau37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h58.


 
 
 
 
Partenaires

Hébergement Web