IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Les conditions de ma requête ne sont pas respectées [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut Les conditions de ma requête ne sont pas respectées
    Bonjour tout le monde !

    Je rencontre un petit problème avec ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?
    require_once("../Connections/config_db.php");
     
    $type = $_GET['typeRch']; 
    $bien = $_GET['bien'];
    $Smin=$_GET['Smin'];
    $Smax=$_GET['Smax'];
    $Pmin=$_GET['Pmin'];
    $Pmax=$_GET['Pmax'];
    $PrMin=$_GET['PrMin'];
    $PrMax=$_GET['PrMax'];
    $commune=$_GET['commune'];
    $depart=$_GET['depart'];
     
    $result = "select count(id_annonce) as total from a_immobilier where paye='O' ";
     
    if ($type!=0)
    	$result = $result."and id_choix ='".$type."'" ;
     
    if ($bien!=0)
    	$result = $result."and id_bien_immo ='".$bien."'" ;
     
    if ((!empty($Smin))&&(!empty($Smax)))
    	$result = $result."and superficie between '".$Smin."' and '".$Smax."'" ;
     
    if ((!empty($Smin))&&(empty($Smax)))
    	$result = $result."and superficie >='".$Smin."'" ;
     
    if ((empty($Smin))&&(!empty($Smax)))
    	$result = $result."and superficie <='".$Smax."'" ;
     
    if ((!empty($Pmin))&&(!empty($Pmax)))
    	$result = $result."and nb_pieces between '".$Pmin."' and '".$Pmax."'" ;
     
    if ((!empty($Pmin))&&(empty($Pmax)))
    	$result = $result."and nb_pieces >='".$Pmin."'" ;
     
    if ((empty($Pmin))&&(!empty($Pmax)))
    	$result = $result."and nb_pieces <='".$Pmax."'" ;
     
    if ((!empty($PrMin))&&(!empty($PrMax)))
    	$result = $result."and prix between '".$PrMin."' and '".$PrMax."'" ;
     
    if ((!empty($PrMin))&&(empty($PrMax)))
    	$result = $result."and prix >='".$PrMin."'" ;
     
    if ((empty($PrMin))&&(!empty($PrMax)))
    	$result = $result."and prix <='".$PrMax."'" ;
     
     
    if((empty($depart))&&(!empty($commune)))
    	$result = $result."and ville='".$commune."'";
     
    if($depart==1)
    	{
    	$cp=substr($commune,0,2);
    	$result = $result."and ville Like '".$cp."%'";
    	} 
     
    //  LE PROBLEME COMMENCE LA 
    if($depart==2)
    	{
    	$cp=substr($commune,0,2);
     
    	$select =" select limitrophe from departement where idDepart=".$cp;
    	$tot_select = mysql_query($select) or die('Erreur SQL !'.$select.'<br>'.mysql_error());
    	$row_tot_select = mysql_fetch_assoc($tot_select);
     
    	$result = $result."and ville Like '".$cp."%'";
     
    	$taille=strlen($row_tot_select['limitrophe']); 
     
    	$j=0;
     
    	while ($j<=$taille)
    	{
     
    	$CodeDepart=substr($row_tot_select['limitrophe'],$j,2);
    	$result = $result."or ville Like '".$CodeDepart."%'";
    	$j=$j+3;
     
    	}
    	}
    // ET SE TERMINE LA 
    $tot = mysql_query($result) or die('Erreur SQL !'.$result.'<br>'.mysql_error());
    $row_tot = mysql_fetch_assoc($tot);
    echo $row_tot['total'];
    ?>
    D'apré le résultat que j'obtient la requete ne tien plus compte des condtions autres que $depart, mais quand j'affiche ma requete j'obtien bien select .....where ...and ville like '88%' or ville like '54%' (c'est un exemple)

    comprend pô !!
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonjour,

    Que te renvoie la requete suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     select limitrophe from departement where idDepart=".$cp

    Car c'est surement de là que viens le souci
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  3. #3
    Membre averti Avatar de DavidDeTroyes
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 305
    Points : 348
    Points
    348
    Par défaut
    Moi j'ai un reflexe qui evite ce genre d'erreur (je ne dit pas que ça viens de là mais ça pourrai) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET["variable"])) $g_variable = $_GET["variable"]; else $g_variable = "";
    Et je teste $g_variable sur "" ou non.

    Si ça peux aider.
    "Les cons ca ose tout, c'est même à ca qu'on les reconnait" M. AUDIARD
    "L'intelligence, on croit toujours en avoir assez, vu que c'est avec ça qu'on juge" COLUCHE

    Spidercochon ! Spidercochon !
    Il peut marcher au plafond.
    Est-ce qu'il peut tisser une toile ?
    Bien sûr que non c'est un cochon
    Prends garde Spidercochon est là...

  4. #4
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    une chaine de nombre, par exemple '54,57,70,52'

  5. #5
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par babou54 Voir le message
    une chaine de nombre, par exemple '54,57,70,52'
    Es-tu sur que cette requête fonctionne ?


    Dans un cas comme celui-là, je te conseille de faire un explode sur le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $tabDep = explode(',',$row_tot_select);
    foreach($tabDep as $dept){
    $result = $result."or ville Like '".$CodeDepart."%'";
    }
    C'est beaucoup plus propre et moins casse geule que substr(). Que se passerait-il si tu mettais les DOMs ( 3chiffres )
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  6. #6
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Oui je suis sur que ca fonctionne,
    j'ai testé cela avant de poster ,
    Je vais essayer la méthode explode
    Par contre pour ce qui est des DOM TOM je n'y est pas encore songé mais en je pense que je peux mettre le nombre de chiffre à extraire dans une variable et qui sera incrémenter au fur et à mesur de teste sur le département

  7. #7
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par babou54 Voir le message
    Oui je suis sur que ca fonctionne,
    j'ai testé cela avant de poster ,
    Je vais essayer la méthode explode
    Par contre pour ce qui est des DOM TOM je n'y est pas encore songé mais en je pense que je peux mettre le nombre de chiffre à extraire dans une variable et qui sera incrémenter au fur et à mesur de teste sur le département

    d'ou l'utilité de l'explode .

    Donc le if $depart==2 est bien parcouru, donc le seul souci vient justement de ton découpage de la liste de departements.

    Je viens juste de remarquer, penses bien à mettre des ( ) autour de ton gros OR car sinon tu va avoir des soucis
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  8. #8
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Des parenthèses autour de mon gros OR ??
    Pasque y'a des gros et des petits or ?

  9. #9
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par babou54 Voir le message
    Des parenthèses autour de mon gros OR ??
    Pasque y'a des gros et des petits or ?
    Disons que si les tests précédents te fixent certaines contraintes tu peux avoir une requete du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select champs from matable where a=1 and b=2 and dept=75 or dept=76 or dept=77
    et là tu va avoir une surprise au niveau des résultats
    alors que ce que tu veux c'est ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select champs from matable where a=1 and b=2 and (dept=75 or dept=76 or dept=77)
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  10. #10
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    ah ! Ok !
    Ca marche nickel! merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Toutes les valeurs d'une requête ne sont pas traitées
    Par Lunaden dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/06/2008, 16h03
  2. Réponses: 5
    Dernier message: 02/07/2007, 11h23
  3. Réponses: 2
    Dernier message: 20/06/2007, 15h31
  4. Réponses: 4
    Dernier message: 08/11/2006, 08h56
  5. Réponses: 10
    Dernier message: 23/03/2006, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo