[PHP] "parse error, unexpected $end"

Statut
N'est pas ouverte pour d'autres réponses.

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
 

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...
 

Jereck

Α & Ω
Staff
Bartdude a dit:
question : y'a 1 ou 2 fois un tag <? , le "php" derrière ce tag n'est-il pas obligatoire
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 ?
 

Sebulba

Dieu
Staff
pas trouvé non plus, mais c super dur a lire il faut dire...
Une remarque; l'ouverture "<?" est vieillie, tu devrais utiliser "<?php "
 

Jereck

Α & Ω
Staff
Jereck a dit:
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.
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 ?
 

Bartdude

Touriste
Jereck a dit:
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 ?
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...
 

SkYlEsS

Elite
[Sebulba] a dit:
pas trouvé non plus, mais c super dur a lire il faut dire...
Une remarque; l'ouverture "<?" est vieillie, tu devrais utiliser "<?php "
Comment cela vieillie ? (Cf. ce test :))
 
1er
OP
KAMI

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
 

SkYlEsS

Elite
Code:
echo('<td> <a href="javascript:ouvrirImage('.$val['chemingrande'].','.$val['nb_hauteur'].','.$val['nb_largeur'].')"><img src='.$val['cheminpetite'].'" /></a></td>');
;)
 

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
 
1er
OP
KAMI

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>');
?>
 

_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.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut