[PHP] Problème avec ce code :

Résolu
Bonjour....
J'ai un problème dans ce code PHP, on me renvoie une erreur à la ligne de dessin du tableau, si quelqu'un pouvait m'aider ça serait super !!!
<html>
<head>
<title>Liste des produits</title>
</head>
<body>
<?
$bd="LaFleur_version2";
$user="root";
$password="";  
$cnx = odbc_connect( $bd , $user, $password );
if( ! $cnx ) echo "Impossible de se connecter";
else
{
$requete= "SELECT pdt_image, pdt_ref, pdt_designation, pdt_prix 
FROM produit, categorie
WHERE categorie.cat_libelle='$categorie'
AND produit.pdt_categorie = categorie.cat_code;";

$result=odbc_exec( $cnx , $requete );

while (odbc_fetch_into( $result , $ligne ) ){
echo"<TR><TD>"<img src="../images/'.$ligne[0].'".jpg">"</TD><TD>".$ligne[1]."</TD><TD>".$ligne[2]."</TD><TD>".$ligne[3]."</TD></TR>"};
}
?>
</body>
</html>

--
Plus tu pedales moins vite...
...Moins t'avance plus vite !!

11 réponses

Résumé de la discussion

Un développeur rencontre une erreur PHP lors de l'affichage d'un tableau des produits via ODBC, la requête reliant produit et catégorie et la récupération des lignes posant problème. Les difficultés évoquées incluent une concaténation complexe et des guillemets mal placés, l'absence de balises HTML fermées et une variable '$categorie' non définie, entraînant des parse errors et des sorties incomplètes. Des propositions suggèrent de simplifier l echo des lignes, d'échapper correctement les chaînes et de veiller à fermer les balises HTML, tout en vérifiant la définition de la variable '$categorie'. La recommandation principale est d'ajouter avant la requête la ligne '$categorie = $_POST['categorie'];' et de s'assurer que la balise <table> est présente pour un affichage correct.</table>

Bobot (l’IA à votre service)
  1. Contributeur
    Salut,

    Remplace ton tableau par celui-ci :
    while (odbc_fetch_into( $result , $ligne ) ){
    echo '<TR><TD><img src="../images/'.$ligne[0].'.jpg"></TD><TD>'.$ligne[1].'</TD><TD>'.$ligne[2].'</TD><TD>'.$ligne[3].'</TD></TR>'};
    }
    

    @+
    0
    1. Pour commencer merci quand même pour ton aide...
      Mais ça ne marche pas non plus il me dit :
      Parse error: parse error, expecting `','' or `';'' in c:\program files\easyphp1-8\www\version2\produits.php on line 22
      La ligne 22 est celle dessinant le tableau et produits.php le nom du fichier contenant tout ce code..
      Merci
      0
  2. Salut,

    Dans ta ligne :
    echo"<TR><TD>"<img src="../images/'.$ligne[0].'".jpg">"</TD><TD>".$ligne[1]."</TD><TD>".$ligne[2]."</TD><TD>".$ligne[3]."</TD></TR>"};
    


    on dirait bien que tu t'emmêles les pinceaux avec les " et les '... De plus, y a un } qui ne sort de nulle part.
    Essaie de mettre ça plutôt :
    echo '<TR><TD><img src="../images/'.$ligne[0].'.jpg"></TD><TD>'.$ligne[1].'</TD><TD>'.$ligne[2].'</TD><TD>'.$ligne[3].'</TD></TR>';
    


    Ca devrait marcher mieux.
    Sinon, donne-nous au moins l'erreur qu'il te renvoie ;)

    Au passage, tu n'as pas ouvert de balises <table>, donc je ne garantis pas l'affichage correct sur le navigateur ;)

    Bonne chance,

    Xavier
    0
    1. Contributeur
      Et après relecture il me semble que la variable $ligne n'est pas définie
      0
    2. Maintenant il me dit que j'ai un problème a la ligne 26, c'est celle avec </body>, l'erreur qu'il me renvoie est :
      Parse error: parse error in c:\program files\easyphp1-8\www\version2\produits.php on line 26
      Merci
      0
    3. @Erdnaxodbc_fetch_into( $result , $ligne )

      Je ne connais pas l'interfaçage php/odbc, mais j'ai pensé que cette ligne définissait $ligne comme le tuple suivant de $result, non ?
      0
    4. @NezEnMoinsRajoute un } juste avant ?>
      C'est celui du else qui n'est pas fermé.
      0
    5. @XavierOk merci j'ai fait l'abruti j'avais pas vu merci beaucoup et maintenant il me renvoie : Notice: Undefined variable: categorie in c:\program files\easyphp1-8\www\version2\produits.php on line 17
      La ligne 17 correspond a la ligne :
      AND produit.pdt_categorie = categorie.cat_code;";

      Merci beaucoup les gras vous êtes géniaux...
      0
  3. Mais j'ai quand même l'impression que mon problème vient de la ligne du dessus a savoir :
    WHERE categorie.cat_libelle='$categorie'

    Si un de vous deux pouvait m'aider ça serait formidable...
    Merci
    0
    1. Effectivement, ta variable $categorie n'a pas l'air d'être définie...
      Elle vient d'où ? D'un formulaire ?

      Essaie de faire
      echo $categorie;

      en haut de ta page, voir ce que ça affiche...

      Si elle vient d'un formulaire passé en POST, alors il faut l'initialiser de la façon suivante :
      $categorie = $_POST['categorie'']
      (ou $_GET['categorie] si c'est une variable passée en GET )
      0
  4. Il me marque qu'elle n'est pas définie...
    J'ai deux fichier php..
    Le premier qui s'exécute d'abord :
    <html>
    <head>
    <title>menu</title>
    <script>
    function afficherProduits(categ)
    	{
    	document.choixCateg.categorie.value = categ;
    	document.choixCateg.submit();
    	}
    </script>
    </head>
    <body>
    <h2>Sté Lafleur</h2>
    <p><a href="logo.htm" target="page">Accueil</a>
    <hr>
    <u><b>Nos produits</b></u>
    <?
    	$bd="LaFleur_version2";
    	$user="root";
    	$password="";  
    	$cnx = odbc_connect( $bd , $user, $password );
    	if( ! $cnx ) echo "Impossible de se connecter";
    		else
    		{
    		$requete='select * from categorie;';
    		$result=odbc_do( $cnx , $requete );
    		while (odbc_fetch_into($result, $ligne))
    			{
    			echo '<p><a href="javascript:afficherProduits(\''.$ligne[0].'\')">'.$ligne[1].'</a>';
    			}
    		}
    ?>
    <form name="choixCateg" action="produits.php" target="page" method="post">
    <input type="hidden" name="categorie">
    </form>
    </body>
    </html>


    et le second fichier php est plus haut dans le post..
    C'est en fait un site internet utilisant du php qui récupère des données dans une base de donnée Access, la connexion est faite avec un driver ODBC..
    Mon site internet est composé de 2frames (a gauche: menu et a a droite: logo) dans la frame de gauche il me récupère les différentes catégories de fleurs que j'ai dans la base de données et quand je clique dessus (c'est la que mon erreur arrive) il devrait apparaitre un tableau récuperant diverses informations sur les différents produits de cette catégorie..
    Comment je peux déclarer $categorie ??
    Merci

    --
    Plus tu pedales moins vite...
    ...Moins t'avance plus vite !!
    0
    1. OK je vois.
      Dans ton deuxième fichier, celui qui exécute la requête.
      Juste avant ta ligne
      $requete="blabla";

      Rajoute la ligne :
      $categorie = $_POST['categorie'];


      Allez, cette fois-ci c'est la bonne :)

      Xavier
      0
    2. @XavierIl ne me sors aucune erreur mais rien ne s'affiche, c'est peut-être due au fait que je n'ai pas mis les balises <Table> et </Table> ??
      On doit pas etre loin du but....
      Merci quand même...
      0
  5. s'il vous plait aider moi on y est presque...
    Merci d'avance...
    0
    1. Ben t'as essayé avec les <table> ?
      J'attends ta réponse, moi...

      Et si rien ne s'affiche, affiche le code source (html) de ta page et copie-le ici...
      Sinon, il va falloir s'assurer que ta requête renvoie bien un résultat.
      Pour ça, tente de l'afficher (echo $requete; ), puis lance-la directement dans ta base de données voir si il en sort quelque chose.
      0
    2. @XavierTu as mon code source de produits.php là :
      <html>
      <head>
      <title>Liste des produits</title>
      </head>
      <body>
      <?
      $bd="LaFleur_version2";
      $user="root";
      $password="";  
      $cnx = odbc_connect( $bd , $user, $password );
      if( ! $cnx ) echo "Impossible de se connecter";
      else
      {
      $categorie = $_POST['categorie'];
      $requete= "SELECT pdt_image, pdt_ref, pdt_designation, pdt_prix 
      FROM produit, categorie
      WHERE categorie.cat_libelle='".$categorie."'
      AND produit.pdt_categorie = categorie.cat_code;";
      
      $result=odbc_exec( $cnx , $requete );
      
      while (odbc_fetch_into( $result , $ligne ) ){
      echo '<TR><TD><img src="../images/'.$ligne[0].'.jpg"></TD><TD>'.$ligne[1].'</TD><TD>'.$ligne[2].'</TD><TD>'.$ligne[3].'</TD></TR>';
      }
      }
      ?>
      </body>
      </html>


      Lorsque je saisi :
      echo $requete;

      il m'affiche :
      SELECT pdt_image, pdt_ref, pdt_designation, pdt_prix 
      FROM produit, categorie
      WHERE categorie.cat_libelle='".$categorie."'
      AND produit.pdt_categorie = categorie.cat_code;

      Et quand j'exécute la requète sous access il me trouve aucun résultat probablement car il ne comprend pas à quoi correspond : ".$categorie."
      Merci de ton aide...
      0
  6. Xaaavvvvviiieeeerrrrr...... s'il te plait......
    0
    1. up up up
      0
      1. Contributeur
        Salut,

        Et si tu met :

        WHERE categorie.cat_libelle='.$categorie.'

        Cela change quelque chose ?
        0
    2. ça ne change rien mais est-ce que la requète comprend d'où sort '$categorie' ?? dans la première page php.. ???
      est-ce que ma liaison est bien faite ???
      Merci
      0
      1. Contributeur
        mais est-ce que la requète comprend d'où sort '$categorie' ??

        Pour le savoir, écris juste en dessous de $categorie = $_POST['categorie']; :
        echo $categorie;
        0
        1. ouais c bon la valeur qui s'affiche de $categorie est celle que j'attend dans la requete.. D'où vient le problème alors ??
          Peut-etre du fait que je n'ai pas mit de balise <TABLE> ?? Comment et où les mettre stp... ??
          Merci
          0
        2. Contributeur
          @NezEnMoinsJuste avant ton while, tu écris echo '<table>'; et à la fin de ton while (après le } ) tu écris echo '</table>';
          0
      2. ça ne marche toujours pas... :'(
        Est-ce que mon tableau est rempli correctement ??
        Parce que mon écran est blanc et ne me renvoie aucune erreur...
        0
        1. Contributeur
          En fait, euh lol, j'ai le même problème, alors si t'as trouvé une solution, ben ce serait cool de partager... :D

          Merci ;)
          0
        2. @ErdnaxBein en fait le problème venait du fait que ma requète n'était pas reconnue par le code php.. en modifiant ma requete, miracle, ça marche.. Voilou A+
          0