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 :

Requête BETWEEN et conditions if [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut Requête BETWEEN et conditions if
    bonjour à tous, je suis entrain de faire une requête sur le prix entre un mini et un maxi.
    une personne de developpez.com m'avait expliqué comment mettre des conditions dans une requête différente que celle que je vais vous montrer.
    j'ai voulu faire pareil mais ca ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $SQL ='SELECT count(bienid) as total FROM bien WHERE biensurfacehab between';
    if(!empty($_GET['mini']))
    $SQL .=	' "'.$choix.'" and';
    if(!empty($_GET['maxi']))
    $SQL .=	' "'.$choix2.'";';
    ce que je veux faire c est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $SQL ='SELECT count(bienid) as total FROM bien WHERE biensurfacehab between "'.$choix.'" and "'.$choix2.'" ';
    voyez vous mon erreur car il me renvoie :
    Erreur SQL ! select * from bien where biensurfacehab between Erreur de syntaxe près de '' à la ligne 1
    merciiiiiiiiiii

  2. #2
    Membre chevronné Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Par défaut
    y'a un probleme dans ta requete :
    Supposons que mini et maxi soit vide, ta requete est :

    SELECT count(bienid) as total FROM bien WHERE biensurfacehab between
    le between pose probleme vu qu'il n'y a rien apres !

    tu pourrais faire cela situ as plusieurs conditions (AND) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $SQL ='SELECT count(bienid) as total FROM bien WHERE 1=1';
    if(!empty($_GET['mini'] && (!empty($_GET['maxi']))))
    $SQL .=	'AND biensurfacehab between "'.$choix.'" and "'.$choix2.'" ';

    EDIT : Si tu n'as qu'une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $SQL ='SELECT count(bienid) as total FROM bien ';
    if(!empty($_GET['mini'] && (!empty($_GET['maxi']))))
    $SQL .=	'WHERE biensurfacehab between "'.$choix.'" and "'.$choix2.'" ';

  3. #3
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Si tes champs ne sont pas des chaînes de caractères il ne faut pas les entourer de quotes. D'ailleurs au passage tu mets des guillemets mais en SQL je crois que c'est des quotes autour des chaînes, jamais essayé avec des guillemets.


    Edit : +1 avec Joe même si dans ce cas il n'y a pas d'intérêt au 1=1 vu qu'il n'y a qu'une seule condition ajoutée, autant ajouter directement si besoin le WHERE

  4. #4
    Membre chevronné Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Par défaut
    Citation Envoyé par JWhite
    Edit : +1 avec Joe même si dans ce cas il n'y a pas d'intérêt au 1=1 vu qu'il n'y a qu'une seule condition ajoutée, autant ajouter directement si besoin le WHERE
    j'ai rajouté le code

  5. #5
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut
    merci beaucoup!! vous êtes super réactif ça fait plaisir
    effectivement je n'ai qu'une condition. en fait j'ai deux requêtes dans cette page, une qui va compter le nombre de biens pour la pagination et une qui va les afficher.
    j'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $SQL ='SELECT count(bienid) as total FROM bien';
    if((!empty($_GET['mini'])) && (!empty($_GET['maxi'])))
    $SQL .=	'where biensurfacehab between "'.$choix.'" and "'.$choix2.'" ';
    et pour la deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query ='SELECT * from bien';
    if((!empty($_GET['mini'])) && (!empty($_GET['maxi'])))
    $query .=	'where biensurfacehab between "'.$choix.'" and "'.$choix2.'" LIMIT $Ndeb,$Nmax' or die ('Probleme lors de la lecture de la base de donnees');
    mais il me sort :
    Erreur de syntaxe près de 'between "12" and "56"' à la ligne 1
    apparemment j'ai un ' de trop
    mais dans le code je ne le vois pas!!!

  6. #6
    Membre chevronné Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Par défaut
    met des quotes a la place des guillemets :

    ou sans si c'est des entiers!

  7. #7
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Oui +1 avec Joe tu devrais lire tous les messages en entier djedje j'ai déjà fait la remarque dans ma première réponse

  8. #8
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut
    normalement les personnes rentreront 56m², 12...
    des valeurs entières.
    je dois donc faire ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query .=	'where biensurfacehab between ".$choix." and ".$choix2." LIMIT $Ndeb,$Nmax' or die ('Probleme lors de la lecture de la base de donnees');
    ????
    je suis pas sur d'avoir bien compris!!!

  9. #9
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Tu te mélanges les pinceaux entre les quotes et les guillemets...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query .= 'where biensurfacehab between '.$choix.' and '.$choix2.' LIMIT $Ndeb,$Nmax';
    Le or die te sers à rien à ce niveau, tu construis juste une chaîne, par contre il est préférable de le mettre quand tu fais le mysql_query...

  10. #10
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut
    j'ai donc fais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $SQL ='SELECT count(bienid) as total FROM bien';
    if((!empty($_GET['mini'])) && (!empty($_GET['maxi'])))
    $SQL .=	'where biensurfacehab between '.$choix.' and '.$choix2.' ';
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query ='SELECT * from bien';
    if((!empty($_GET['mini'])) && (!empty($_GET['maxi'])))
    $query .=	'where biensurfacehab between '.$choix. ' and '.$choix2.' LIMIT $Ndeb,$Nmax';
    $resultat = mysql_query ($query) or die('Erreur SQL ! '.$query.''.mysql_error());
    ça me donne
    Erreur de syntaxe près de 'between 45 and 57' à la ligne 1
    peut être faut-il que je mette plutôt les valeur $_get??

  11. #11
    Membre chevronné Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Par défaut
    ben en fait $maxi et $mini ne sont pas initialisées :

    tu n'as pas fait précédemment :

    $mini = $_GET['mini']; ????

    fait le et tu verras le résultat !

  12. #12
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut
    si j ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $choix=$_GET['mini'];
    $choix2=$_GET['maxi'];

  13. #13
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    si tu fais un echo de ta requête avant exécution, ça donne quoi?
    tu la colles ici STP

    il me semble qu'entre "bien" et "where" tu n'as pas laissé d'espace

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Dans le même style que ce qui t'a été indiqué ici : Requête BETWEEN pour un formulaire (varchar => int)
    Il faut que tu fasses un cast de ta valeur provenant du formulaire, sans quoi tu auras une jolie faille d'injection SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $choix = intval($_GET['mini']);
    $choix2 = intval($_GET['maxi']);
    @ JWhite : MySQL accepte les guillemets et les apostrophes comme délimiteurs de chaînes. Dans le cas des valeurs numériques, ces délimiteurs ne sont pas obligatoires.

    Edit, oubli : http://securite.developpez.com/faq/?..._sql_injection

  15. #15
    Membre confirmé Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Par défaut
    tout à fait c'est ça !!
    bravo à tous et merci beaucoup

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

Discussions similaires

  1. [MySQL] Requête BETWEEN pour un formulaire
    Par djedje37et28 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/08/2006, 09h56
  2. Problème requête avec 2 conditions
    Par omgirl dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/07/2006, 16h19
  3. [MySQL] concaténer une requête sql avec condition
    Par maliak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/02/2006, 12h01
  4. Problème de requête avec une condition IN
    Par sorcer1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/10/2005, 11h56
  5. problème requête between dans access
    Par Vodkha dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/09/2005, 07h50

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