Requête invalide : You have an error in your SQL syntax

Discussions à propos de MySQL, des autres bases de données existantes, et du langage SQL.

Modérateur : Modérateurs

johnvsk2
Membre
Membre
Messages : 38
Inscription : lun. 09 juil. 2007, 8:26

Requête invalide : You have an error in your SQL syntax

Messagepar johnvsk2 » jeu. 28 août 2008, 12:43

Bonjour,

Voilà, j'aimerais améliorer une interface de recherche en donnant la possiblité à l'utilisateur, après une première recherche, de sélectionner les enregistrements à afficher.

Il s'agit des trois codes sources (bruts pour les tests):

1. liste.php
2. affiche.php
3. myfetcharray.php

Le premier fait une sélection et affiche la sélection via une formulaire de case à cochées.
Le second récupére les valeurs numériques via un tableau tabcase et ensuite tente d'afficher la sélection en appelant le Troisième.
Le troisième est appelé via include ("myfetcharray.php"); par le fichier affiche.php

Quelle est le souci ?
Le souci est que l'affiche ne fonctionne qu'une seule fois puis, un message d'erreur s'affiche :

Requête invalide : 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 '' at line 1

Question : Si la requête ne respecte pas la syntaxe, pourquoi elle est executée au moins une fois ?
Le problème se situe donc au niveau du troisième fichier.


Peut-être un bon indice ? :
Le troisième fichier est appelé dans une boucle for ...


Voici 3 codes sources :

1. liste.php

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>



        <h4 align='center'> Liste des articles de la table accessoire</h4>
        <form id="form1" name="form1" method="post" action="affiche.php">
          <p>
            <?
            //Les différents champs
            //num,modele,acc,ref,remarque,pu
           
      // connexion au serveur de base de données
      $connexion = mysql_connect("localhost","$user","$password");
      mysql_select_db("DB");
      

      //Liste des enregistrements de articles_info   
      $requete = "SELECT * FROM accessoires;";

      $resultat = mysql_query($requete);

            echo "  <table bgcolor='#DDDDDD' align='center' border='1' width='70%' cellspacing='0'>
        <tr align='center'><td>&nbsp;</td><td><font color='#003399'>NUMERO</font></td><td><font color='#003399'>MODELE<font></td><td><font color='#003399'>ACCESSOIRES</font></td><td><font color='#003399'>REFERENCE</font></td><td><font color='#003399'>REMARQUE</font></td><td><font color='#003399'>PRIX UNITAIRE</font></td></tr>
        <font face='arial'>
        ";

      // un test permet de vérifier si il y a un résultat
      if ($tableau = mysql_fetch_array($resultat))
         {
         //une boucle parcourt le tableau $tableau
            //Les différents champs
            //num,modele,acc,ref,remarque,pu
         Do
            {
            $num = $tableau["num"];
            $modele = $tableau["modele"];
            $acc = $tableau["acc"];
            $ref = $tableau["ref"];
                $remarque = $tableau["remarque"];
                $pu = $tableau["pu"];
   
      
            echo "<tr><td><input type='checkbox' name='tabcase[]' value='$num'>
                </td><td>$num</td><td>$modele</td><td>$acc</td><td>$ref</td><td>$remarque</td><td>$pu</td>";
            }
         While ($tableau = mysql_fetch_array($resultat));
         }
         else
            {
            echo "Aucun résultat pour $requete";
            }

      //Fermeture de la connexion
      mysql_close();
        echo "</td></tr></table>";
      ?>
          </p>
          <p>
            <input type="submit" name="submit" id="submit" value="Valider" />
          </p>
        </form>

    </body>
</html>


2. affiche.php :



Code : Tout sélectionner

<?

      
      
      //vérifier si au moins un article a été coché
      $tableau = $_POST["tabcase"];
      $nb = count($tableau);
      
      if ($nb == 0)
         {
         echo "<p>Aucun article sélectionné !</p>";
         }
      else
         {
         echo "<p>$nb article(s)sélectionné(s).</p><p>NUMEROS : ";

         
         //boucle de récupération des éléments du tableau tabcase
         for ($nbi=0; $nbi < $nb; $nbi++)
            {
            $num = $tableau[$nbi];

            //echo "$num ";
            



                                                               // include("info.php");
                                                              include("myfetcharray.php");


            }


         }
      


      ?>


3. myfetcharray.php :

Code : Tout sélectionner

<?

$connexion = mysql_connect("localhost","$user","$password");
mysql_select_db("DB");

$requete = "SELECT * FROM accessoires WHERE num=$num";
$resultat = mysql_query($requete);

//
// EXEMPLE : $result = mysql_query('SELECT * FROM table WHERE 1=1');
//


if (!$resultat) {
    die('Requête invalide : ' . mysql_error());
}
else
{




    //    $total=0;
       if ($tableau = mysql_fetch_array($resultat))
          do
           {

            // num, modele, acc, ref, remarque, pu

             $num = $tableau["num"];
             $modele = $tableau["modele"];
             $acc = stripslashes($tableau["acc"]);
             $ref = $tableau["ref"];
             $remarque = $tableau["remarque"];
               $pu = $tableau["pu"];
               //$total = $total + $pu;
               
               echo "<br>$num - $modele - $acc - $ref - $remarque - $pu";

              }
          while ($tableau=mysql_fetch_array($resultat));

}
mysql_close();
?>
Dernière édition par johnvsk2 le ven. 29 août 2008, 14:19, édité 2 fois.

johnvsk2
Membre
Membre
Messages : 38
Inscription : lun. 09 juil. 2007, 8:26

Re: Requête invalide : You have an error in your SQL syntax

Messagepar johnvsk2 » jeu. 28 août 2008, 12:59

Info supplémentaire :

Quelle est la durée de vie de tabcase ?
On dirait qu'après la 1ère requête $num n'existe plus ? :/

Bien à vous.
John.

Avatar de l’utilisateur
dexmon
Gourou
Gourou
Messages : 793
Inscription : sam. 18 juin 2005, 9:55
Localisation : /usr/local/apache
Contact :

Re: Requête invalide : You have an error in your SQL syntax

Messagepar dexmon » jeu. 28 août 2008, 17:15

Utilisez les balises CODE pour mettre en forme le code pour qu'on y voit plus clair. :wink:

Code : Tout sélectionner

$result = mysql_query('SELECT * WHERE 1=1');


dans ce code vous faite un select vers quoi ?
vous avez pas oublier le FROM table ??

Code : Tout sélectionner

$result = mysql_query('SELECT * FROM ta_table WHERE 1=1');


Placez un or die(mysql_error()) sur la requête.

Code : Tout sélectionner

$result = mysql_query('SELECT * FROM ta_table WHERE 1=1') or die(mysql_error());
ImageUNIX foreverImage
Avant toute demande de support, vérifiez votre fichier error.log Apache.
----------------------------------------

johnvsk2
Membre
Membre
Messages : 38
Inscription : lun. 09 juil. 2007, 8:26

Re: Requête invalide : You have an error in your SQL syntax

Messagepar johnvsk2 » ven. 29 août 2008, 12:20

Bonjour,

Je fais un SELECT * FROM accessoires..... (table accessoires)

Bien à vous.

johnvsk2
Membre
Membre
Messages : 38
Inscription : lun. 09 juil. 2007, 8:26

Re: Requête invalide : You have an error in your SQL syntax

Messagepar johnvsk2 » ven. 29 août 2008, 14:22

Que pensez-vous de la syntaxes des requêtes ?

Le premier fichier : $requete = "SELECT * FROM accessoires;";
Le troisième fichier : $requete = "SELECT * FROM accessoires WHERE num=$num";
Dans le premier, il y a un point-virgule, le troisième non.

Test :
-------
Pour le troisième fichier, cela revient du pareil au même, avec ou sans point virgule après $num.


J'insiste sur le fait que le troisième fichier execute au moins une fois la requête et affiche donc une première ligne.
Dès qu'il y a une deuxième ligne, cela provoque une erreur.

Requête invalide : 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 '' at line 1

La seule idée qui me vienne à l'esprit est le respect d'ouverture et fermeture de session Mysql ? Qu'en pensez-vous ?
Contrairement aux "apparences", je débute...

Bien à vous.
John.

johnvsk2
Membre
Membre
Messages : 38
Inscription : lun. 09 juil. 2007, 8:26

Re: Requête invalide : You have an error in your SQL syntax

Messagepar johnvsk2 » ven. 29 août 2008, 14:54

Nouveau test :
-----------------

Dans le fichier myfetcharray.php,

Je modififie :

if (!$resultat) {
echo "$num";
die('Requête invalide : ' . mysql_error());

}

en

if (!$resultat) {
echo "test : -->$num<--<br>";
die('Requête invalide : ' . mysql_error());

}

Le message d'erreur devient alors le suivant :


3 article(s)sélectionné(s).

NUMEROS :



9 - champ2 - champ3- référence - aucune - 1.2
test : --><--
Requête invalide : 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 '' at line 1

Ce qui confirme que la variable $num n'existe plus.

Bien à vous.
John.


Revenir vers « SQL »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité