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 invalide venant d'une requête SQL correcte [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut Requête invalide venant d'une requête SQL correcte
    Bonjour à tous,

    Voilà ma requête PHP... pouvez vous me dire en quoi elle est fausse???

    Merci beaucoup de votre aide... car je cale :s

    $sql="SELECT nom, prenom, telephone, datenaissance, nation_personne.nationalite, rue, numero, code_postal, ville, nation_domicile.pays
    FROM personnes as p, personnedomicile as pd, domiciles as d, nation as nation_domicile, nation as nation_personne
    where p.idpersonne=pd.idpersonne, d.iddomicile=pd.iddomicile, d.idnation=nation_domicile.idnation, p.idnation=nation_personne.idnation";


    S'il faut plus d'explication pcq à première vue la structure de la requête serait bonne... dites le moi et je vous expliquerais plus en détails.

    Merci encore

  2. #2
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    Hello,

    Il faut que tu fasses des jointures comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql="SELECT nom, prenom, telephone, datenaissance, nation_personne.nationalite, rue, numero, code_postal, ville, nation_domicile.pays
    FROM personnes as p
    LEFT JOIN personnedomicile as pd ON p.idpersonne=pd.idpersonne
    LEFT JOIN domiciles as d ON d.iddomicile=pd.iddomicile
    LEFT JOIN nation as nation_domicile ON d.idnation=nation_domicile.idnation
    LEFT JOIN nation as nation_personne ON p.idnation=nation_personne.idnation";
    @+
    Cadou

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup d'avoir regardé.

    J'ai donc utilisé les jointures comme tu me les as proposé. Cependant, il m'annonce toujours requête invalide.

    Je te joins ici l'ensemble de mon script : Si tu vois quelques chose qui manque. Parce que moi ça fais déjà 24h que je bloque sur cette requête.

    Merci encore...

    Script:
    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
     
    <html><head><title>Affichage de tous les membres</title></head>
    <body>
    <?php
     
    #utilisateur/serveur/mot de passe
    $db_user = $_SERVER['DB_USER'];
    $db="eheins_$db_user";                                             /*définition de la base de donnée*/
    $db_pass = $_SERVER['DB_PASS'];
    $db_host = 'localhost';
     
    #connexion à MySQL
    $link= mysql_connect($db_host, $db_user, $db_pass);
    if (! $link)
    die("Impossible de se connecter à MySQL");
     
    #sélection de la base de donnée
    mysql_select_db($db, $link)
    or die("Impossible d'ouvrir la base de donnée $db: ".mysql_error());
     
     
     
    #définition requête SQL
    $sql="SELECT nom, prenom, telephone, datenaissance, nation_personne.nationalite, rue, numero, code_postal, ville, nation_domicile.pays
    FROM personnes as p
    LEFT JOIN personnedomicile as pd ON p.idpersonne=pd.idpersonne
    LEFt JOIN domiciles as d ON d.iddomicile=pd.iddomicile
    LEFT JOIN nation as nation_domicile ON d.idnation=nation_domicile.idnation
    LEFT JOIN nation as nation_personne ON p.idnation=nation_personne.idnation";
     
    #exécuter la requête
    $result=mysql_query($sql) 
    or die ("Requête invalide");
     
    #affichage des résultats de la requête
    $num_rows = mysql_num_rows($result);
    print "Affichage des membres<br><br>";
    print "Il y a $num_rows membres.<P>";
     
    print "<table width=900 border=4 >\n";
    print "<tr><td>Nom</td><td>Prenom</td><td>Téléphone</td><td>Date de naissance</td><td>Nationnalité</td><td>Adresse</td><td>Numéro</td><td>Code postal</td><td>Ville</td><td>Pays</td></tr>";
    while ($get_info = mysql_fetch_row($result)){ 
    print "<tr>\n";
    foreach ($get_info as $field) 
    print "\t<td><b><font face=arial size=2/>$field</font></b></td>\n";
    print "</tr>\n";
    }
    print "</table>\n";
     
    mysql_close($link);
    ?>
    <form method="POST" action="pageprincipale.php">
    <input type="submit" value="Interface">
    </form>
    </body>
    </html>
    Voici, un autre essaie de ma part en incluant des variables... ça marche pas

    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
    <html><head><title>Affichage de tous les membres</title></head>
    <body>
    <?php
     
    #utilisateur/serveur/mot de passe
    $db_user = $_SERVER['DB_USER'];
    $db="eheins_$db_user";                                             /*définition de la base de donnée*/
    $db_pass = $_SERVER['DB_PASS'];
    $db_host = 'localhost';
     
    #connexion à MySQL
    $link= mysql_connect($db_host, $db_user, $db_pass);
    if (! $link)
    die("Impossible de se connecter à MySQL");
     
    #sélection de la base de donnée
    mysql_select_db($db, $link)
    or die("Impossible d'ouvrir la base de donnée $db: ".mysql_error());
     
    #Déclaration des variables
    $idpersonne=$_POST['idpersonne'];
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $telephone=$_POST['telephone'];
    $datenaissance=$_POST['datenaissance'];
    $idnation=$_POST['idnation'];
    $nationalite=$_POST['nationalite'];
    $rue=$_POST['rue'];
    $numero=$_POST['numero'];
    $code_postal=$_POST['code_postal'];
    $ville=$_POST['ville'];
    $iddomicile=$_POST['iddomicile'];
    $pays=$_POST['pays'];
     
     
    #définition requête SQL
    $sql="SELECT $nom, $prenom, $telephone, $datenaissance, nation_personne.$nationalite, $rue, $numero, $code_postal, $ville, nation_domicile.$pays
    FROM personnes as p
    LEFT JOIN personnedomicile as pd ON p.$idpersonne=pd.$idpersonne
    LEFt JOIN domiciles as d ON d.$iddomicile=pd.$iddomicile
    LEFT JOIN nation as nation_domicile ON d.$idnation=nation_domicile.$idnation
    LEFT JOIN nation as nation_personne ON p.$idnation=nation_personne.$idnation";
     
    #exécuter la requête
    $result=mysql_query($sql) 
    or die ("Requête invalide");
     
    #affichage des résultats de la requête
    $num_rows = mysql_num_rows($result);
    print "Affichage des membres<br><br>";
    print "Il y a $num_rows membres.<P>";
     
    print "<table width=900 border=4 >\n";
    print "<tr><td>Nom</td><td>Prenom</td><td>Téléphone</td><td>Date de naissance</td><td>Nationnalité</td><td>Adresse</td><td>Numéro</td><td>Code postal</td><td>Ville</td><td>Pays</td></tr>";
    while ($get_info = mysql_fetch_row($result)){ 
    print "<tr>\n";
    foreach ($get_info as $field) 
    print "\t<td><b><font face=arial size=2/>$field</font></b></td>\n";
    print "</tr>\n";
    }
    print "</table>\n";
     
    mysql_close($link);
    ?>
    <form method="POST" action="pageprincipale.php">
    <input type="submit" value="Interface">
    </form>
    </body>
    </html>

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    On peut avoir le message d'erreur exact stp?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    voilà le message d'erreur...

    Parse error: syntax error, unexpected T_STRING in /var/web/s072367/public_html/works/affichage_tous_membres.php on line 46

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Ta version avec variables ne fonctionne pas car tu fais un select sur des colonnes "variables"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Admettons que dans notre cas $POST['nom'] = 'test'
    $nom = $POST['nom'];
     
    SELECT $nom FROM ...
    Cela veut dire que tu veux sélectionner la colonne test. Ce genre d'utilisation est plus fréquente dans la clause WHERE

    Ensuite pour ta requête invalide, je suppose que tu as un PHPMyAdmin? Essaye ta requête via PHPMyAdmin et dis nous ce qu'il en est.
    Et plutot que de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    or die('Requete invalide');
    // Fait plutot
    or die (mysql_error());
    // Cela va te permettre d avoir un message d erreur bien plus explicite

    Si cela ne fonctionne toujours pas, peut tu nous donner un idée de ton schéma de BDD

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Je pense que tu as raison, je n'ai même pas regarder la requête sur MyphpMyADMIN... bref, je m'excuse, je tente de résoudre ce problème de requête et je viendrais vous retrouvez si je rencontre un autre problème mais lié au php cette fois... Merci encore...

    Ps: voilà mon schéma relationnel, si vous voyez quelques fautes. hésitez pas à me le dire. C'est tout de même un travail pour mon examen oral d'informatique...

    Merci à tous de votre aide.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Un petit conseil, utilise un programme autre pour faire tes schémas (par exemple mysql workbench : http://www.mysql.fr/products/workbench/)
    C'est gratuit et c'est bien plus facile a maintenir que ton fichier doc

    Au niveau de ta bdd je personnellement je vois quelques trucs à corriger

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Dis moi ce que tu vois que je devrais changer, je verrais s'il n'est pas trop tard (Parce que j'ai déjà encoder l'ensemble de la base de donnée.)

    ps: Merci pour le petit programme :d

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Deja purement syntaxiquement je trouve bizarre le nom de tes tables avec systématiquement le mot table dedans (mais bon c'est pas dramatique )

    Ensuite je ne vois pas l'intérêt des tables que tu dis de relation (Après si tu l'as fais comme ça c'est peut etre que c'est ce que l'on t'as appris et je ne voudrais pas influencé ton point de vue et sortir de ton cadre scolaire)

    Par exemple la table 'relationpersonnedomicile', j'aurais plutot inclus un iddomicile dans la table personne un peu comme tu fais entre la table 'tabledomicile' et 'tablenation', un idnation dans la table 'tabledomicile'

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Oui je comprend ce que tu veux dire, mais j'ai fais cela par facilité. car si 2 personnes cohabite ensemble, il me suffira alors, s'il change de domicile de changer l'iddomicile au deux personnes. Ce qui m'évitera ainsi de retaper deux fois la même adresse. (Je ne sais pas si mon explication est correcte pour toi, dis moi quoi, parce que c'est le débat que j'aurais devant mon prof )

    Pour l'hsistoire de table, mon prof m'a fait la remarque et je l'ai changer mais pas encore réadapter le schéma.

    Merci encore pour ton avis

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Voilà je t'ai fais un point de départ sous MySQL WorkBench pour t'expliquer comment je voyais ton projet

    A toi de faire le reste

    EDIT:
    Je viens de rajouter une image au cas où tu ne souhaite pas utilisé MySQL WorkBench qui te ferait apprendre un logiciel complémentaire et tu n'as peut etre pas le temps

    J'ai conserver un idnation dans chaque table ('personne' et 'domicile') en supposant qu'il pouvait etre différent. Dans le cas où il serait le meme, tu peux le supprimer de la table 'personne'
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup, je regarde et je vais voir ce que je peux faire... le changer complètement, risque d'être difficile maintenant... mais en tout cas, un grand merci du temps que tu m'as consacré

    J'aurais certainement encore besoin de ton aide dans la suite

    ps: petit souci avec ma requête toi qui me consacre du temps, peux tu me dire si tu vois quelques choses de louche.

    Car j'ai ouvert un post dans la section MySQL, il ignore ma question...

    voilà ce que j'ai poster:

    "
    Bonjour,

    Voilà j'ai un petit souci concernant une requête que PHPmyADMIN a du mal à reconnaitre.

    La voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT nom, prenom, telephone, datenaissance, nationpersonne.nationalite, rue, numero, code_postal, ville, nationdomicile.pays
    FROM personnes AS p
    LEFT JOIN personnedomicile AS pd ON p.idpersonne=pd.idpersonne
    LEFT JOIN domiciles AS d ON d.iddomicile=pd.iddomicile
    LEFT JOIN nations AS nationdomicile ON d.idnation=nationdomicile.idnation
    LEFT JOIN nations AS nationpersonne ON p.idnation=nationpersonne.idnation
    et le message d'erreur est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    requête SQL: Documentation [?]
     
    SELECT nom, prenom, telephone, datenaissance, nationpersonne.nationalite, rue, numero, code_postal, ville, nationdomicile.pays
    FROM personnes AS p
    LEFT JOIN personnedomicile AS pd ON p.idpersonne = pd.idpersonne
    LEFT JOIN domiciles AS d ON d.iddomicile = pd.iddomicile
    LEFT JOIN nations AS nationdomicile ON d.idnation = nationdomicile.idnation
    LEFT JOIN nations AS nationpersonne ON p.idnation = nationpersonne.idnation
    LIMIT 0 , 30
     
    MySQL a répondu:Documentation [?]
     
    #1054 - Unknown column 'nationpersonne.nationalite' in 'field list'
    Voilà, je pense donc qu'il ne reconnait pas mes alias. Savez-vous pourquoi?

    Merci beaucoup de votre aide
    "

  14. #14
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Pourrais tu faire un export de ta base mysql avec PHPMyAdmin ? (J'ai la fleme de la recréer )

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    voilà merci
    Fichiers attachés Fichiers attachés

  16. #16
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2004
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    C'est bien ce qui me semblait
    Ton erreur vient du fait que tu as laissé un accent sur le champ nationalité dans la tables 'nations'

    Tu devrais le supprimer Et ensuite ta requete fonctionne

    Ne jamais mettre d'accent ou autre caractère "bizarre" dans des noms de tables ou noms de champs

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Je te remercie énormément... Tu m'as été d'une aide précieuse.

    Bon courage pour la suite. Et encore merci... Je ferais certainement encore appel à toi...

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Voilà, l'affaire n'est pas finie, la requête est bien reconnue par php my admin, mais voilà le message d'erreur qui persiste en php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_STRING in /var/web/s072367/public_html/works/affichage_tous_membres.php on line 31
    je remet mon code qui devrait passer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql="SELECT nom, prenom, telephone, datenaissance, nationpersonne.nationalite, rue, numero, code_postal, ville, nationdomicile.pays
    FROM personnes as p
    LEFT JOIN personnedomicile as pd ON p.idpersonne=pd.idpersonne
    LEFt JOIN domiciles as d ON d.iddomicile=pd.iddomicile
    LEFT JOIN nations as nationdomicile ON d.idnation=nationdomicile.idnation
    LEFT JOIN nations as nationpersonne ON p.idnation=nationpersonne.idnation";
    Merci

  19. #19
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Le message d'erreur unexpected T_STRING ne vient pas de mysql mais de php.
    Il indique la ligne 31, il faut chercher une erreur de syntaxe sur cette ligne ou aux alentours.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup à tous... vous m'avez permis de régler un gros problème.

    Bonne continuation... Et encore merci!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] Problème à l'exécution d'une requête suppression basée sur une requête sélection
    Par Philippe1975 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 14/06/2013, 22h21
  2. Réponses: 9
    Dernier message: 19/12/2011, 17h11
  3. Réponses: 5
    Dernier message: 18/02/2009, 09h52
  4. Réponses: 1
    Dernier message: 13/02/2009, 10h13
  5. passer d'une requêtes SGL directe en une requête normale
    Par jenniferIUP dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/02/2009, 08h26

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