[PHP] "parse error, unexpected $end"

Discussion dans 'Web, design' créé par KAMI, 14 Mai 2007.

Statut de la discussion:
Fermée.
  1. Offline
    KAMI spim spam spoum
    alors bon voilà 2 jours que je me casse la tête sur ce code et que je ne trouve pas l'erreur... :beuh:

    Voici donc le code de ma page photovrac.php :

    Code:
    <? session_start(); ?>
    <head>
    <title>Ma galerie d'images !</title>
    <script type="text/javascript">
    <!--   
    // Ouvre l'image dans une popup
    function ouvrirImage(url, height, width) {
      window.open(url, '', 'height='+height+', width='+width +',toolbar=no,menubar=no,status=no,resizable=yes');
    }
    //-->
    </script>
    </head>
    <?php
    include('config_galerie.php');
    // on récupère le nombre d'image total
    $query = "select count(*) as nb from photos ";
    $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
    
    $val = mysql_fetch_array($result);
    $nb_images_tot = $val['nb'];
    
    // S'il n'y a aucune image, ce n'est pas la peine de continuer
    if (!$nb_images_tot) {
       echo "Il n'y a aucune image de référencée dans la base de données.";
    } else {
       // on récupère les paramètres passé sur l'url
       if ($_GET['image']){ 
          $image_debut = $_GET['image'];
       }else{
          $image_debut = 0;
         }
       $i = 0; // permet de savoir combien d'images on a mis sur la ligne;
    
       $query = "select * from photos limit $image_debut, $nb_images_page;";
       
       $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
       
    ?>
    <table width="100%" border="0">
      <?php 
       while ($val = mysql_fetch_array($result)) {
       
          if (!($i++%$nb_images_ligne))  echo "<tr>\n";
          echo "\n";
    ?>
        <td> <a href="javascript:ouvrirImage('<? echo $val['chemingrande']?>',<? echo $val['nb_hauteur']?>,
                                                                     <? echo $val['nb_largeur']?>);"> 
         <img src="<? echo $val['cheminpetite']; ?>"  />  </a> </td>  
         <?php
          if (!($i%$nb_images_ligne)) {
    	      echo "</tr>\n";
    	      }
       }
       
       if ($i%$nb_images_ligne) {
    	   echo "</tr>\n";
    	   }
    ?>
    
    <?php
     ///////////////////////////GESTION DE L'AFFICHAGE DES MINIATURE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
    ?>
    </table>
    <p style="text-align:center;"> 
      <?
    // on affiche maintenant la nagivation entre les pages
    
       if ($image_debut) {
         $image_prec = $image_debut - $nb_images_page;
    ?>
      <a href="?image=<? echo $image_prec; ?>"><<<&nbsp;Précédentes&nbsp;</a> 
      <?
       }
       
       $j = 0;
       
       while ( $j * $nb_images_page <= $nb_images_tot ) {
         if ( $j * $nb_images_page == $image_debut  ) {
           $m = $j+1;
          echo $m."&nbsp;";
          $j++;
         } else {
    ?>
      <a href="?image=<? echo $j * $nb_images_page; ?>"><? echo $j+1; ?>&nbsp;</a> 
      <?
            $j++;
         }
       
       }
       
       if ($image_debut + $nb_images_page <= $nb_images_tot) {
         $image_suiv= $image_debut + $nb_images_page;
    ?>
      <a href="?image=<? echo $image_suiv; ?>">Suivantes&nbsp;>>></a> 
      <?
       }
    }
    
    mysql_close();
    ?>
    </p>
    </body>
    </html>
    et l'erreur est la suivante :

    Code:
    Parse error: parse error, unexpected $end in C:\wamp\www\Site\photovrac.php on line 103
    Cette erreur signifie que je n'ai pas fermé une balise mais bon après 2 jours à passer mon temps de la trouver cette balise je hisse le drapeau blanc...

    Merci d'avance à tous.

    KAMI
    KAMI, 14 Mai 2007
    #1
  2. Offline
    Bartdude Touriste
    Après un premier coup d'oeil comme ca je vois pas non plus (mais bon si t'y a passsé 2 jours ca se comprend.

    question : y'a 1 ou 2 fois un tag <? , le "php" derrière ce tag n'est-il pas obligatoire

    remarque : vu que tu écris rarement plus d'une ou deux ligne avant de repasser en code PhP, je te conseillerais de RESTER dans du code php, et d'écrire ton HTML avec des echo. Sauf erreur le fait d'ouvrir et ferme le php ainsi sans arrêt ca ralenti l'exécution. De plus cela simplifiera selon moi pas mal la lecture. Je retourne essayer de trouver ton souci...
    Bartdude, 14 Mai 2007
    #2
  3. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    nan, il y a un paramètre dans php.ini qui permet de s'en passer.
    Il pourrait même encore réduire à : <img src="<?= $val['cheminpetite']; ?>" />
    Et p-e même se passer du ';' mais ça je suis pas sur.

    T'es sur du code de config_galerie.php ?
    Jereck, 14 Mai 2007
    #3
  4. Offline
    Sebulba Dieu
    Equipe GamerZ.be
    pas trouvé non plus, mais c super dur a lire il faut dire...
    Une remarque; l'ouverture "<?" est vieillie, tu devrais utiliser "<?php "
    Sebulba, 14 Mai 2007
    #4
  5. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Lignes 46-47 :

    <td> <a href="javascript:eek:uvrirImage('<? echo $val['chemingrande']?>',<? echo $val['nb_hauteur']?>,
    <? echo $val['nb_largeur']?>);">

    Pas de ';', essaie p-e en en mettant ?
    Jereck, 14 Mai 2007
    #5
  6. Offline
    Bartdude Touriste
    ok je demande car ca fait quand-même quelques années que j'ai pas fait de PhP (mais bon ca n'empêche pas d'essayer d'aider ;) )

    franchement, remet tout dans une seule balise PhP (en n'oubliant pas les caractères d'échappement si tu doit mettre des double-quotes autour d'une paramète HTML au sein d'un echo). ca devrait pas prendre super longtemps, et ca rendra la chose plus lisible...
    Bartdude, 14 Mai 2007
    #6
  7. Offline
    SkYlEsS Kawai
    Comment cela vieillie ? (Cf. ce test :))
    SkYlEsS, 14 Mai 2007
    #7
  8. Offline
    KAMI spim spam spoum
    Code:
    <?php session_start(); ?>
    <head>
    <title>Ma galerie d'images !</title>
    <script type="text/javascript">
    <!--   
    // Ouvre l'image dans une popup
    function ouvrirImage(url, height, width) {
      window.open(url, '', 'height='+height+', width='+width +',toolbar=no,menubar=no,status=no,resizable=yes');
    }
    //-->
    </script>
    
    </head>
    <?php
    include('config_galerie.php');
    // on récupère le nombre d'image total
    $query = "select count(*) as nb from photos ";
    $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
    
    $val = mysql_fetch_array($result);
    $nb_images_tot = $val['nb'];
    
    // S'il n'y a aucune image, ce n'est pas la peine de continuer
    if (!$nb_images_tot) {
       echo "Il n'y a aucune image de référencée dans la base de données.";
    } else {
       // on récupère les paramètres passé sur l'url
       if ($_GET['image']){ 
          $image_debut = $_GET['image'];
       }else{
          $image_debut = 0;
         }
       $i = 0; // permet de savoir combien d'images on a mis sur la ligne;
    
       $query = "select * from photos limit $image_debut, $nb_images_page;";
       
       $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
       
    
    echo('<table width="100%" border="0">'); 
       while ($val = mysql_fetch_array($result)) {
       
          if (!($i++%$nb_images_ligne))  {
    	      echo "<tr>\n";
    	      echo "\n";
              echo('<td> <a href="javascript:ouvrirImage('$val['chemingrande']','$val['nb_hauteur']','$val['nb_largeur'])'"><img src='$val['cheminpetite']'"/></a></td>');  
    	      }     
          if (!($i%$nb_images_ligne)) {
    	      echo ("</tr>\n");
    	      }
       }
       
       if ($i%$nb_images_ligne) {
    	   echo ("</tr>\n");
    	   }
    
     ///////////////////////////GESTION DE L'AFFICHAGE DES MINIATURE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
     
     
    echo('</table>');
    echo('<p style="text-align:center;">'); 
    // on affiche maintenant la nagivation entre les pages
    
       if ($image_debut) {
         $image_prec = $image_debut - $nb_images_page;
         echo('<a href="?image='$image_prec'"><<<&nbsp;Précédentes&nbsp;</a>');
       }
       
       $j = 0;
       
       while ( $j * $nb_images_page <= $nb_images_tot ) {
         if ( $j * $nb_images_page == $image_debut  ) {
           $m = $j+1;
          echo $m."&nbsp;";
          $j++;
         } else {
      echo('<a href="?image='echo $j * $nb_images_page;'"'$j+1'&nbsp;</a>');
            $j++;
         }
       
       }
       if ($image_debut + $nb_images_page <= $nb_images_tot) {
         $image_suiv= $image_debut + $nb_images_page;
      echo('<a href="?image='$image_suiv'">Suivantes&nbsp;>>></a>'); 
       }
    }
    
    mysql_close();
    echo('</p>');
    echo('</body>');
    echo('</html>');
    ?>
    
    Voilà j'ai modifié le code pour le mettre que dans une seule balise php, mais maintenant j'ai une erreur à la ligne 46 qui est

    Code:
    echo('<td> <a href="javascript:ouvrirImage('$val['chemingrande']','$val['nb_hauteur']','$val['nb_largeur'])'"><img src='$val['cheminpetite']'"/></a></td>'); 
    l'erreur est :
    Code:
    Parse error: parse error, unexpected T_VARIABLE in C:\wamp\www\Site\final.php on line 46
    A mon humble avis c'est une erreur de quote... Faut dir que j'ai vraiment du mal avec les doubles quotes et comme j'ai pas vraiment eu de cours (enfin si 1h de théorie et 2h de pratique du style afficher "Bonjour à l'écran") sur PHP, mysql je dois apprendre sur le tas comme on dit
    KAMI, 14 Mai 2007
    #8
  9. Offline
    SkYlEsS Kawai
    Code:
    echo('<td> <a href="javascript:ouvrirImage('.$val['chemingrande'].','.$val['nb_hauteur'].','.$val['nb_largeur'].')"><img src='.$val['cheminpetite'].'" /></a></td>');
    ;)
    SkYlEsS, 15 Mai 2007
    #9
  10. Offline
    Bartdude Touriste
    alors là y'a les quotes de ton echo, les quotes de ton attribut href et les quotes de tes paramètres javascript à imbriquer=> il va falloir passer par de l'échappement car on n'a que 2 types de quotes disponibles...

    Je dirais, sur base de ce que mon prédécesseur a mis (qui me semble manquer de quotes dans le passage de paramètres à la fonction javascript) :

    Code:
    echo([COLOR=Red]"[/COLOR]<td> <a href=[COLOR=Green]\"[/COLOR]javascript:ouvrirImage([COLOR=SandyBrown]'[/COLOR][COLOR=Red]"[/COLOR].  $val['chemingrande'].[COLOR=Red]"[/COLOR][COLOR=SandyBrown]'[/COLOR],[COLOR=SandyBrown]'[/COLOR][COLOR=Red]"[/COLOR].$val['nb_hauteur'].[COLOR=Red]"[/COLOR][COLOR=SandyBrown]'[/COLOR],[COLOR=SandyBrown]'[/COLOR][COLOR=Red]"[/COLOR].$val['nb_largeur'].[COLOR=Red]"[/COLOR][COLOR=SandyBrown]'[/COLOR])[COLOR=GREEN]\"[/COLOR]><img src='[COLOR=Red]"[/COLOR].$val['cheminpetite'].[COLOR=Red]"[/COLOR]' /></a></td>[COLOR=Red]"[/COLOR]);
    
    En rouge, les double quote qui définissent ta chaine passé en "echo" => il ne s'affichent pas dans le code HTML

    En vert, les quotes (avec backslash pour échappement) de l'attribut "href" => ils s'affichent dans le code HTML

    En espèce de jaune, les single quote servant à passer les paramètres de ta fonction javascript => Ils s'affichent dans le code HTML
    Bartdude, 15 Mai 2007
    #10
  11. Offline
    KAMI spim spam spoum
    Voilà j'ai réussi à débuger mon code, ce qui n'a pas été une mince affaire.

    enfin pour ceux que ça interesse je mets le code.

    config_galerie

    Code:
    <?php
    // config_galerie.php
    // Définition des variables globales de la galerie
    
    $nb_images_page = 16; // Nombre d'images par page
    $nb_images_ligne = 4;  // Nombre d'images par ligne
    
    
    // Ouverture des connexions à la base de données
    
    $host = "xxx"; // voir hébergeur
    $user = "xxx"; // vide ou "root" en local
    $pass = "xxx"; // vide en local
    $bdd = "xxx"; // nom de la BD
    
    
    mysql_connect($host,$user,$pass)
       or die("Impossible de se connecter");
    mysql_select_db($bdd)
       or die("Impossible de se connecter");
    ?>
    et la gestion du l'affichage :

    Code:
    <?php session_start(); ?>
    <head>
    <title>Ma galerie d'images !</title>
    <script type="text/javascript">
    <!--   
    // Ouvre l'image dans une popup
    function ouvrirImage(url, height, width) {
      window.open(url, '', 'height='+height+', width='+width +',toolbar=no,menubar=no,status=no,resizable=yes');
    }
    //-->
    </script>
    
    </head>
    <?php
    include('config_galerie.php');
    // on récupère le nombre d'image total
    $query = "select count(*) as nb from photos ";
    $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
    
    $val = mysql_fetch_array($result);
    $nb_images_tot = $val['nb'];
    
    // S'il n'y a aucune image, ce n'est pas la peine de continuer
    if (!$nb_images_tot) {
       echo "Il n'y a aucune image de référencée dans la base de données.";
    } else {
       // on récupère les paramètres passé sur l'url
       if ($_GET['image']){ 
          $image_debut = $_GET['image'];
       }else{
          $image_debut = 0;
         }
       $i = 0; // permet de savoir combien d'images on a mis sur la ligne;
    
       $query = "SELECT * FROM photos LIMIT $image_debut, $nb_images_page;";
       
       $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
       
    
    echo('<table width="100%" border="0">'); 
       while ($val = mysql_fetch_array($result)) {
       
          if (!($i++%$nb_images_ligne))echo "<tr>\n";
    	      echo "\n";
              echo('<td> <a href="javascript:ouvrirImage(\''.$val['chemingrande'].'\',\''.$val['nb_hauteur'].'\',\''.$val['nb_largeur'].'\')"><img src="'.$val['cheminpetite'].'""/></a></td>');  
    	      }     
          if (!($i%$nb_images_ligne)) {
    	      echo ("</tr>\n");
    	      }
       
       if ($i%$nb_images_ligne) {
    	   echo ("</tr>\n");
    	   }
    
     ///////////////////////////GESTION DE L'AFFICHAGE DES MINIATURE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
     
     
    echo('</table>');
    echo('<p style="text-align:center;">'); 
    // on affiche maintenant la nagivation entre les pages
    
       if ($image_debut) {
         $image_prec = ($image_debut - $nb_images_page);
         echo('<a href="?page=galerie&image='.$image_prec.'"><<<&nbsp;Précédentes&nbsp;</a>');
       }
       
       $j = 0;
       
       while ( ($j * $nb_images_page) <= $nb_images_tot ) {
         if ( ($j * $nb_images_page) == $image_debut  ) {
           $m = $j+1;
          echo $m."&nbsp;";
          $j++;
         } else {
      echo('<a href="?page=galerie&image="'.($j* $nb_images_page).'"'.($j+1).'&nbsp;</a>');
            $j++;
         }
       
       }
       if (($image_debut + $nb_images_page) <= $nb_images_tot) {
         $image_suiv= $image_debut + $nb_images_page;
      echo('<a href="?page=galerie&image='.$image_suiv.'">Suivantes&nbsp;>>></a>'); 
       }
    }
    
    mysql_close();
    echo('</p>');
    echo('</body>');
    echo('</html>');
    ?>
    KAMI, 15 Mai 2007
    #11
  12. Offline
    _gilles Elite
    J'ai eu exactement la même erreur tout à l'heure, et il s'est avéré que c'était lors de l'up du fichier sur le FTP, apparement le fichier n'avait pas été uploadé à 100%...

    Enfin, content que tu ai pu trouver solution à ton problème.
    _gilles, 3 Juin 2007
    #12
Statut de la discussion:
Fermée.