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 :

requete non reconnue


Sujet :

PHP & Base de données

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut requete non reconnue
    Bonsoir

    C'est encore moi

    J'ai un bug avec le script suivant :

    Code php : 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
    $db = mysql_connect('localhost','root','');
    mysql_select_db('projet',$db);
     
    $sql = "'SELECT num_cli,cat,vol,comp,num_pan_a, PANIER_AVIONref_a, TARIF_AVION.ref_a,quantite,montant,date_c,date_f,date_d FROM TARIF_AVION,PANIER_AVION WHERE num_cli='".mysql_real_escape_string($num_cli)."'AND PANIER_AVION.ref_a=TARIF_AVION.ref_a'";
     
    $req = mysql_query($sql) or die('Erreur SQL ! '.$sql.' '.mysql_error());
     
    echo "<div align=\"center\"><center> <table border=\"1\">";
    $i=0;
    while($data = mysql_fetch_array($req) AND $data['num_cli']=$num_cli)
     
    {
    echo  "<tr>";
    echo "<td>";
    echo " Commande numéros :" ;
    echo "</td> ";
    echo "<td>";
    echo $data['num_pan_a'];
    echo "</td> ";
    echo "</tr>";
     
    }
     
    echo " </table> </center></div>";
    mysql_close();


    Voici le message d'erreur :

    Erreur SQL ! 'SELECT num_cli,cat ,vol ,comp , num_pan_a, PANIER_AVIONref_a, TARIF_AVION.ref_a, quantite, montant, date_c, date_f, date_d FROM TARIF_AVION , PANIER_AVION WHERE num_cli LIKE'2'AND PANIER_AVION.ref_a=TARIF_AVION.ref_a' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''SELECT num_cli,cat ,vol ,comp , num_pan_a, PANIER_AVIONref_a, TARIF_AVION.ref_a' at line 1
    Ici je dispose d'un numéro de client extérieur à la base .

    J'en m'en sert pour :

    - retrouver toutes les commandes que le client a passé
    - je doit toute les afficher dans un tableau ( seulement le numéros de la commande pour le moment pour simplifier )

    Je pense à un problème d'affichage au niveau du while ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    dans la chaine sql tu as mis ça : PANIER_AVIONref_a.
    Remplaces par PANIER_AVION.ref_aEnsuite je te conseille de faire plutôt tes jointures dans la clause FROM que de dans la clause WHERE.

    Ton while n'a aucun sens : tu filtres déjà tes données dans le sql sur $num_cli, en conséquence tes données correspondront de fait à ton $num_cli.

    Et une dernière chose : relis-toi encore et encore.
    Tu sais, les messages d'erreurs sont utiles pour aider au débogage.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Le message d'erreur indique que l'erreur est "near 'SELECT..." c'est à dire juste au début de la requête.

    Et en relisant ton code, tu trouves facilement l'erreur :
    Tu as une apostrophe qui traîne après le guillemet d'ouverture !

    Prend l'habiture d'aérer ton code et notamment l'écriture des requêtes, en écrivant les jointures tel que le préconise la norme SQL depuis 1992 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = "
    	SELECT num_cli, cat, vol, comp, num_pan_a, -- de quelle table viennent ces colonnes ?
    	PANIER_AVION.ref_a, 
    	TARIF_AVION.ref_a, 
    	quantite, montant, date_c, date_f, date_d -- de quelle table viennent ces colonnes ?
    	FROM TARIF_AVION
    	INNER JOIN PANIER_AVION ON PANIER_AVION.ref_a = TARIF_AVION.ref_a
    	WHERE num_cli = '".mysql_real_escape_string($num_cli)."'
    ";
    C'est pas plus agréable à lire comme ça ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut
    Bonsoir

    J'ai vérifier ce tu as dis et j'ai toujours un bug , c'est plus une erreur de requete elle bonne j'ai un warning pour toutes les lignes de mon tableau

    " Warning , machintruc .... ligne XXX "

    - le "PANIER_AVION.ref_a" je l'ai balayé en appelant le "PANIER_AVION.*" car j'ai besoin de toutes les infos des lignes qui m’intéresse

    - exact le while n'as aucun intérêt car je ne prend qu'une partie , j'ai pensé mettre un foreach mais après je ne sais pas comment le faire marcher

    - tu veux dire quoi par faire une jointure en le FROM ???

    - la requête et bonne puisque testée dans le SGBD PHPMYADMIN

    Voici le code acutel que j'ai changé avec en rouge les zone ou je ne sais pas quoi mettre :

    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
    $db= mysql_connect('localhost','root','');
    mysql_select_db('projet',$db);
    
    $sql = "'SELECT PANIER_AVION.*, TARIF_AVION.* FROM TARIF_AVION , PANIER_AVION WHERE num_cli='".mysql_real_escape_string($num_cli)."' AND PANIER_AVION.ref_a=TARIF_AVION.ref_a'";
    
    $req = mysql_query($sql)  ; 
    
    echo "<div align=\"center\"><center> <table border=\"1\">";
    
    $data=mysql_fetch_assoc($req); // ici je dois mettre un assoc  array ou rows ????
    
    foreach ($... as $data['num_pan_a']) // ici je ne suis pas d'accord avec la boucle , je désire afficher uniquement les lignes qui concernent le client , si client numéros 17 alors afficher les lignes ou num_cli = 17 , le reste ne nous interesse pas 
    
    {
    echo "<tr>";
    echo "<td>";
    echo " Commande numéros :" ;
    echo "</td> ";
    echo "<td>";
    echo $data['num_pan_a'];
    echo "</td> ";
    echo "</tr>";
    
    ... // les autres informations désirés  , comme la quantité de billet commandé ou le montant 
    
    }
    
    echo " </table> </center></div>";
    mysql_close();

    La je sèche complétement au niveau de l'affichage avec l'aide d'une boucle

    Encore merci d'avance

    PS : désolé j'ai posté en même temps

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Tu es sûr que tu n'as plus d'erreur SQL ? Je vois toujours les apostrophes en trop au début et à la fin de la requête !

    Et évite la guerre des étoiles ! Sur ce plan, ta première requête était meilleure !

    Par contre, tu ne connais toujours pas les jointures !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu devrais te rapprocher d'un truc comme ça :
    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
    <?php
     
    $db = mysql_connect('localhost','root','');
    mysql_select_db('projet', $db);
     
    // vérifies bien que $num_cli est défini avant le traitement
     
    $sql =
    "  SELECT
          PANIER_AVION.*,
          TARIF_AVION.*
       FROM
          TARIF_AVION INNER JOIN PANIER_AVION ON TARIF_AVION.ref_a = PANIER_AVION.ref_a
       WHERE
          PANIER_AVION.num_cli = '".mysql_real_escape_string($num_cli)."'";
     
    $exec = mysql_query($sql) or die(mysql_error());
     
    ?>
    <div align="center">
       <center>
          <table border="1">
             <thead>
                <tr>
                   <th>En-tête 1</th>
                   <th>En-tête 2</th>
                   <th>En-tête 3</th>
                </tr>
             </thead>
             <tbody>
                <?php while($row = mysql_fetch_assoc($exec)): ?>
                <tr>
                   <td><?php echo $row['num_pan_a']; ?></td>
                   <td><?php echo $row['nom']; ?></td>
                   <td><?php // ici tu mets d'autres colonnes ?></td>
                </tr>
                <?php endwhile; ?>
             </tbody>
          </table>
       </center>
    </div>
    Essayes de déporter la mise en page dans le CSS au lieu de trainer des attributs ou des balises relatives à la mise en forme
    Et prends le temps de lire les liens du collègue CinePhil

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut
    Ah voila ca marche avec le INNER JOIN est c'est dix fois mieux , j'ai lu la doc de cinphil , ca sert

    Merci

    Cependant un erreur persiste avec cette requête :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "SELECT param1, param2, param3 .... 
    	    FROM TARIF_BATEAU_CLI, TARIF_BATEAU_VEC , TRAJET_BATEAU ,PANIER_BATEAU
    		WHERE PANIER_BATEAU.ref_tar_cli IN (SELECT TARIF_BATEAU_CLI.ref_tar_cli FROM TARIF_BATEAU_CLI)
    		AND PANIER_BATEAU.ref_tar_vec IN ( SELECT TARIF_BATEAU_VEC.ref_tar_vec FROM TARIF_BATEAU_VEC)
    		AND PANIER_BATEAU.ref_traj IN ( SELECT TRAJET_BATEAU.ref_traj FROM SELECT TRAJET_BATEAU)
    		AND WHERE num_cli = '".mysql_real_escape_string($num_cli)."'";

    et aussi celle ci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql="SELECT param1, param2, param3 .... 
    FROM TARIF_BATEAU_CLI, TARIF_BATEAU_VEC, TRAJET_BATEAU
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_tar_cli = TARIF_BATEAU_CLI.ref_tar_cli
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_tar_vec = TARIF_BATEAU_VEC.ref_tar_vec
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_traj = TRAJET_BATEAU.ref_traj
    WHERE num_cli = '".mysql_real_escape_string($num_cli)."'";

    J'ai lu que on ne peut pas faire plusieur INNER JOIN à la suite des autres ?

    Ou alors LEFT ou RIGHT JOIN ?

    Merci d'avance

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    J'ai lu que on ne peut pas faire plusieur INNER JOIN à la suite des autres ?
    Hein ? !
    Où as-tu lu ça ?

    Citation Envoyé par tanaka59 Voir le message
    Cependant un erreur persiste avec cette requête :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "SELECT param1, param2, param3 .... 
    	    FROM TARIF_BATEAU_CLI, TARIF_BATEAU_VEC , TRAJET_BATEAU ,PANIER_BATEAU
    		WHERE PANIER_BATEAU.ref_tar_cli IN (SELECT TARIF_BATEAU_CLI.ref_tar_cli FROM TARIF_BATEAU_CLI)
    		AND PANIER_BATEAU.ref_tar_vec IN ( SELECT TARIF_BATEAU_VEC.ref_tar_vec FROM TARIF_BATEAU_VEC)
    		AND PANIER_BATEAU.ref_traj IN ( SELECT TRAJET_BATEAU.ref_traj FROM SELECT TRAJET_BATEAU)
    		AND WHERE num_cli = '".mysql_real_escape_string($num_cli)."'";
    Encore des jointures d'il y a 20 ans !

    et aussi celle ci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql="SELECT param1, param2, param3 .... 
    FROM TARIF_BATEAU_CLI, TARIF_BATEAU_VEC, TRAJET_BATEAU
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_tar_cli = TARIF_BATEAU_CLI.ref_tar_cli
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_tar_vec = TARIF_BATEAU_VEC.ref_tar_vec
    INNER JOIN PANIER_BATEAU ON PANIER_BATEAU.ref_traj = TRAJET_BATEAU.ref_traj
    WHERE num_cli = '".mysql_real_escape_string($num_cli)."'";
    Et là tu mélange les jointures anciennes et modernes ! Bref, c'est le bordel tes requêtes !

    Si tu fais plusieurs jointures sur la même table, tu dois utiliser des alias. En plus je te conseille d'en utiliser systématiquement dès que tu as plus d'une table dans la requête. Ça facilite la lecture de la requête et t'évite de recopier X fois le nom de chaque table.

    Si tu donnes la structure de tes tables, une expression claire de ce que tu cherches à obtenir et éventuellement un petit jeu de données et le résultat attendu, ce sera plus facile de t'aider.

    Quelle erreur obtiens-tu ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Choix critère de la requete non reconnu
    Par ragus77 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 02/06/2013, 14h39
  2. requete non reconnu
    Par tanaka59 dans le forum Access
    Réponses: 2
    Dernier message: 02/02/2011, 11h09
  3. [WD14] Requete non reconnue
    Par WDKyle dans le forum WinDev
    Réponses: 12
    Dernier message: 16/01/2010, 17h00
  4. Réponses: 3
    Dernier message: 30/04/2008, 09h58
  5. Réponses: 5
    Dernier message: 13/02/2006, 14h59

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