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 :

souci sur une requête [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut souci sur une requête
    Bonsoir tout le monde,
    J'ai une requête qui fonctionne sous PhpMyadmin mais rien à faire dans un formulaire PHP. Je pense que je code mal et me permets de vous soumettre mon code, si vous aviez une idée ce serait super :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT ID_gite FROM GITE a JOIN PAYS b ON a.ID_pays = b.ID_pays AND codePays='" . $codePays . "' JOIN DEPARTEMENT c	ON a.ID_departement = c.ID_departement AND codeDepartement='" . $codeDepartement . "' JOIN COMMUNE d ON a.ID_commune = d.ID_commune AND codeCommune='" . $codeCommune . "' WHERE numGite='" . $numGite . "'";
    Un grand merci par avance,
    Evelyne31

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il aurait fallut mettre plus de code, car avec le peu que tu donne, on peu allègrement énumérer 10 000 type d'erreurs possible (une infinité même).

    On ne sait même pas comment et avec quoi est exécuté la requête SQL (fonctions mysql, fonction mysqli ou Objet MySQLi, PDO, etc, etc ...).

    De plus, il suffit qu'une des variables ($codePays, $codeDepartement) ne soit pas correctement initialisée, voire inexistantes pour faire "planter" l'exécution de la requête.


    Donc post plus de code.
    Fais un minimum de déboggage afin de nous donner des indications/pistes, donc d'éliminer des cas.
    Faire par exemple un simple : echo $codePays (idem pour les autres variables) suffit pour vérifier que la valeur est conforme à ce qu'on attend.
    Si certaines données viennent d'une étape précédente en paramètre (GET ou POST, formulaire ou lien), un simple : var_dump($_POST) (ou $_GET) suffit pour savoir si tous les paramètres ont été correctement reçu et leur valeurs aussi.

    Et d'autres encore ... tout est bon pour aider à comprendre ce qui ne va pas, et surtout te permettre de le trouver seul.

    Il y a de quoi faire.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Bonsoir RunCodePhp et merci pour cette réponse.
    J'ai mis peu de code pour ne pas être trop longue, désolée.
    Toutes les variables proviennent d'un formulaire, j'ai fait des empty pour les champs obligatoires et des isset pour les autres + un echo sur chacune des variables et elles s'affichent bien.
    J'insère la requête après les empty/isset, avant les echo. Elle vient d'un fichier de fonctions. Ces dernières fonctionnent toutes très bien dans d'autres cas.
    Je joins mon code plus complet ci-dessous, je l'ai coupé juste avant la série des "echo".
    Merci si vous pouviez me permettre d'avancer.
    Evelyne31

    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
    <?php
    if (isset($_POST["faire"]))
    { 
        if (empty($_POST["codePays"]) && empty($_POST["codeDepartement"]) && empty($_POST["codecommune"]) && empty($_POST["numGite"]) && empty($_POST["numEchantillon"]) && isset($_POST["anneePrelevement"]) && isset($_POST["forme"]) && isset($_POST["trame"]) && isset($_POST["grain"]) && isset($_POST["opacite"]) && isset($_POST["alterations"]) && isset($_POST["inclusions"]) && isset($_POST["bioclastes"]) && isset($_POST["texture"]) && isset($_POST["descriptionEchantillon"]) && isset($_POST["dateCreaFicheE"]) && isset($_POST["prenomIntervenant1"]) && isset($_POST["nomIntervenant1"]) && isset($_POST["dateSaisieFicheE"]) && isset($_POST["prenomIntervenant2"]) && isset($_POST["nomIntervenant2"]) && isset($_POST["ID_roche"]) && isset($_POST["ID_couleur"]) && isset($_POST["cortex"]) && isset($_POST["epaisseurCortex"]) && isset($_POST["couleurCortex"]) && !empty($_POST["typeCortex"]) && !empty($_POST["descriptionCortex"]) && !empty($_POST["patine"]) && isset($_POST["descriptionPatine"]) && isset($_POST["numBac"])) {
     
    $faire = $_POST["faire"];
    $codePays = $_POST["codePays"];
    $codeDepartement = $_POST["codeDepartement"];
    $codeCommune = $_POST["codeCommune"];
    $numGite = $_POST["numGite"];
    $numEchantillon = $_POST["numEchantillon"];
     
            //prepa insert table ECHANTILLON     
            $anneePrelevement = $_POST["anneePrelevement"];
            $forme = $_POST["forme"];
            $trame = $_POST["trame"];
            $grain = $_POST["grain"];
            $opacite = $_POST["opacite"];
            $alterations = $_POST["alterations"];
            $inclusions = $_POST["inclusions"];
            $bioclastes = $_POST["bioclastes"];
            $texture = $_POST["texture"];
            $descriptionEchantillon = $_POST["descriptionEchantillon"];
            $dateCreaFicheE = $_POST["dateCreaFicheE"];
            $nomCreaFicheE = $_POST["nomIntervenant1"];
            $prenomCreaFicheE = $_POST["prenomIntervenant1"];
            $dateSaisieFicheE = $_POST["dateSaisieFicheE"];
            $prenomSaisieFicheE = $_POST["prenomIntervenant2"];
            $nomSaisieFicheE = $_POST["nomIntervenant2"];
     
            $ID_roche = $_POST["ID_roche"];
            $ID_couleur = $_POST["ID_couleur"];
        }
     
    $sql=SQLGetChamp("SELECT ID_gite FROM GITE a WHERE numGite='"  .$numGite. "' AND ('SELECT ID_pays FROM PAYS b WHERE a.ID_pays = b. ID_pays AND codePays='" . $codePays . "'') AND ('SELECT ID_departement FROM DEPARTEMENT c WHERE a.ID_departement = c. ID_departement AND codeDepartement='" . $codeDepartement . "'') AND ('SELECT ID_commune FROM COMMUNE d WHERE a.ID_commune = d. ID_commune AND codeCommune='" . $codeCommune . "'')");
    $gite = SQLGetChamp($sql) or die('Erreur SQL ! </br>'. $sql.'</br>'.mysql_error());
     
        echo '<p></p>'; 
        echo "$gite";
        echo '<p></p>';
    .....

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    C'est normal que la requête SQL dans ton 1er post soit totalement différentes de celle que tu mets actuellement (ci-dessus) ?

    Si les choses changent en cours de route, ça ne va pas être simple.

    Dans le code du 1er post, la requête SQL ne me semble pas comporter d'erreur.
    La seule chose que je ne trouve pas logique, c'est les noms des alias des tables.
    Des noms d'alias comme : a, b, c.
    D'ailleurs, j'ai beaucoup de mal à suivre à cause de ça, ça se peut qu'il y est erreur à ce niveau.


    C'est juste une parenthèse, mais c'est des truc qu'on apprend, c'est d'éviter (voire à proscrire) de nommer des choses (variables, alias, etc ...) avec des valeurs non intuitives, ça rend le code limite incompréhensible, ou ça oblige de remonter en amont (des fois beaucoup) pour le comprendre.
    Des truc comme var $a, $b, $c
    Ou $ var1, $var2, $var3

    Il est de loin préférable de donner des noms explicite en (total) rapport à ce que ça contient.

    Si une table s'appelle Pays, le plus simple et logique c'est de mettre comme nom d'alias (raccourci) p.
    Si une table s'appelle Gite, et bien on met comme alias g
    S'il y a 2 tables commençant par la même lettre, alors on met 2 lettres : pour codePays cp, pour codeCommune cc
    etc, etc ...
    Je t'assure qu'en procédant ainsi il sera nettement plus facile à suivre/comprendre la requête.

    De plus, toujours pour améliorer la lisibilité du code, il est (vachement) bon de faire des sauts de lignes, là aussi de manière logique.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "SELECT ID_gite
    FROM GITE a
    JOIN PAYS b ON a.ID_pays = b.ID_pays AND codePays = '" . $codePays . "'
    JOIN DEPARTEMENT c ON a.ID_departement = c.ID_departement AND codeDepartement = '" . $codeDepartement . "'
    JOIN COMMUNE d ON a.ID_commune = d.ID_commune AND codeCommune = '" . $codeCommune . "'
    WHERE numGite = '" . $numGite . "'";
    Fin de la parenthèse.


    Pour ce qui est du code actuel, je vois au moins une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... AND ('SELECT ID_pays ...
    Il ne devrait pas avoir d'apostrophe (ou simple quote) juste avant le SELECT (ou après la parenthèse).

    As tu essayé cette requête avec PhpMyAdmind ?
    Avec ces quotes de trop ça doit "planter" à mon sens.


    Puis ta 1ère requête était bien mieux avec les jointures de table.
    Cette 2ème requête c'est à priori la même sans les jointures.
    Je ne comprend pas pourquoi cela ?

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    RunCodePhp,

    Vraiment désolée, je teste les 2 requêtes en même temps et j'ai mélangé. C'est celle ci-dessous (la 1ère) qui fonctionne dans PhpMyadmin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT ID_gite FROM GITE a JOIN PAYS b ON a.ID_pays = b.ID_pays AND codePays='" . $codePays . "' JOIN DEPARTEMENT c	ON a.ID_departement = c.ID_departement AND codeDepartement='" . $codeDepartement . "' JOIN COMMUNE d ON a.ID_commune = d.ID_commune AND codeCommune='" . $codeCommune . "' WHERE numGite='" . $numGite . "'";
    Merci pour le conseil concernant les noms d'alias, je rectifie de suite.
    Pour les sauts de ligne, je pensais qu'il ne fallait pas en faire. C'est sûr que ça simplifie la vie. J'adopte de suite.
    Pour le simple quote juste avant le SELECT, je l'ai enlevé pour faire la requête dans PhpMyadmin. Je l'enlève aussi, selon tes conseils, dans le fichier de traitement de mon formulaire.
    Re-merci, je conserve la 1ère requête. Je re-teste avec tes conseils et je te tiens au courant.
    Très bonne soirée,
    Evelyne31

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    RunCodePhp,
    J'ai effectué toutes les modifications que tu m'as conseillées, je t'en remercie.
    Voici l'erreur que j'obtiens à présent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur SQL !
    SELECT ID_gite FROM GITE g JOIN PAYS p ON g.ID_pays = p.ID_pays AND codePays = '' JOIN DEPARTEMENT cd ON g.ID_departement = cd.ID_departement AND codeDepartement = '' JOIN COMMUNE cc ON g.ID_commune = cd.ID_commune AND codeCommune = '' WHERE numGite = ''
    No database selected
    Je ne comprends pas car j'ai en include en début de mon fichier de traitement l

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    ta condition me parait bizarre, tu fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( empty($_POST["codePays"]) && ... ){
        //Déclaration des variables et attribution de leurs valeur en fonction des $_POST['']
    }
    or si dans ton formulaire tu a renseigné le champ codePays alors toute t'a condition tombe à l'eau et donc tes variables ne sont pas initialisé et php aurait du te renvoyer une erreur du genre "$var is undeclared", si tu veux tester si une variable n'est pas vide c'est !empty() comme tu l'a fait à la fin de ta condition avec !empty($_POST["typeCortex"]).

    Pour ton erreur quel type de connexion à la base de donnée utilise tu ? Comme t'a dit précédemment RunCodePhp, fonctions mysql, fonction mysqli ou Objet MySQLi, PDO, ?

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

Discussions similaires

  1. Soucis avec une requête sur une table de 93 000 entrées
    Par lelectronique.com dans le forum Requêtes
    Réponses: 21
    Dernier message: 17/11/2012, 19h27
  2. Soucis sur une requête sql
    Par tryan dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2010, 21h10
  3. Pb sur une requête SQL (de champ vide)
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 11h12
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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