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 qui fonctionne en dur mais pas avec des variables [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Par défaut Requête qui fonctionne en dur mais pas avec des variables
    Bonjour à tous,

    Je rencontre un soucis sur une requête qui fonctionne correctement dans PHPMyAdmin quand je mets des valeurs en dur.
    Mais une fois que je la mets dans mon PHP et que j'essaye de la faire fonctionner avec des variables (des valeurs de checkbox) elle ne fonctionne pas et me retourne un résultat vide (sans erreur).
    Je ne comprends pas d'ou peut venir le soucis !
    Voici le code en question :

    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
    <?php
     
            if(isset($_POST['color-choice']) AND isset($_POST['type_choice']))
            {
                if(!empty($_POST['color-choice']) and !empty($_POST['type_choice']))
                {
                    $couleur = implode(',', $_POST['color-choice']);
     
                    $type = implode(",", $_POST['type-choice']);
     
                    $req = $sqlQuery->query("SELECT lieux.nom FROM lieux INNER JOIN lieux_couleur ON lieux.ID = lieux_couleur.id_lieux INNER JOIN couleur_vin ON couleur_vin.ID = lieux_couleur.id_couleur WHERE (couleur_vin.ID IN ( " . $couleur . ") AND lieux.id_type_lieu IN( " . $type . "))");
                    while ($data = $req->fetch())
    				{
                        echo $data["nom"] . '</br>';
                    }
                }
            }
    		?>
    Merci de votre aide !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Quand on construit une requête par concaténation de chaines de caractères, la première chose à faire lorsque ladite requête ne s'exécute pas correctement c'est d'afficher le texte de la requête.
    Dans la plupart des cas, l'erreur apparait clairement.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Par défaut
    Merci de votre réponse,

    Comment fait-on pour afficher le texte de la requête ?

    Je suis novice en développement je n'ai pas encore tous les automatismes.

    Merci pour votre aide en tout cas

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    On peut faire comme ça.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "SELECT lieux.nom FROM lieux INNER JOIN lieux_couleur ON lieux.ID = lieux_couleur.id_lieux INNER JOIN couleur_vin ON couleur_vin.ID = lieux_couleur.id_couleur WHERE (couleur_vin.ID IN ( " . $couleur . ") AND lieux.id_type_lieu IN( " . $type . "))";
    print $query;
    $req = $sqlQuery->query($query);

    D'après moi il manque des apostrophes avant l'affectation des valeurs. Le IN dans une requête SQL sert quand on a une liste de valeurs. Dans ton cas un = suffirait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "SELECT lieux.nom FROM lieux INNER JOIN lieux_couleur ON lieux.ID = lieux_couleur.id_lieux INNER JOIN couleur_vin ON couleur_vin.ID = lieux_couleur.id_couleur WHERE (couleur_vin.ID IN ( '" . $couleur . "') AND lieux.id_type_lieu IN( '" . $type . "'))";

    Du moment que tu utilises " pour délimiter une chaîne de caractères, tu peux mettre un nom de variable dedans. PHP remplacera le nom de la variable par sa valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT lieux.nom FROM lieux INNER JOIN lieux_couleur ON lieux.ID = lieux_couleur.id_lieux INNER JOIN couleur_vin ON couleur_vin.ID = lieux_couleur.id_couleur WHERE (couleur_vin.ID IN ( '$couleur') AND lieux.id_type_lieu IN( '$type'))";
    Il y aurait encore plein de choses à dire mais comme tu débutes je vais te laisser digérer ça.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Par défaut
    Merci de ta réponse !

    Alors j'ai essayé cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query = "SELECT lieux.nom FROM lieux INNER JOIN lieux_couleur ON lieux.ID = lieux_couleur.id_lieux INNER JOIN couleur_vin ON couleur_vin.ID = lieux_couleur.id_couleur WHERE (couleur_vin.ID IN ( " . $couleur . ") AND lieux.id_type_lieu IN( " . $type . "))";
    print $query;
    $req = $sqlQuery->query($query);
    Le résultat est toujours vide.

    Tu me dit qu'un égal suffirait car le IN concercne plusieurs valeurs, mais si je coche plusieurs checkbox, j'ai bien plusieurs valeurs non ?

    J'ai essayé en rajoutant les apostrophes et le résultat de mon submit est toujours tristement vide alors que ma requête fonction dans la console !!!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- facilite-toi la vie en indentant proprement le code :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT lieux.nom 
    	FROM lieux 
    	INNER JOIN lieux_couleur 
    	ON lieux.ID = lieux_couleur.id_lieux 
    	INNER JOIN couleur_vin 
    	ON couleur_vin.ID = lieux_couleur.id_couleur 
    	WHERE (couleur_vin.ID IN ( " . $couleur . ") 
    	AND lieux.id_type_lieu IN( " . $type . "))";
    ou encore (avec des alias pour les noms des tables) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT lieux.nom 
    	FROM lieux L
    	INNER JOIN LC LC 
    	ON L.ID = LC.id_lieux 
    	INNER JOIN couleur_vin CV
    	ON CV.ID = LC.id_couleur 
    	WHERE (CV.ID IN ( " . $couleur . ") 
    	AND L.id_type_lieu IN( " . $type . "))";

    2- Si on te dit d'AFFICHER la requête, ce n'est pas pour que tu répondes : "Le résultat est toujours vide".
    MONTRE ce qui s'affiche !

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

Discussions similaires

  1. [MySQL] requête avec sous requete qui fonctionne sur PhpMyAdmin mais pas avec un script PHP
    Par Park033 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/02/2017, 22h18
  2. Réponses: 1
    Dernier message: 02/05/2010, 17h12
  3. Requête qui fonctionne sous Access mais pas JDBC
    Par loic911 dans le forum JDBC
    Réponses: 1
    Dernier message: 12/09/2008, 16h46
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43

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