Aide ( erreur dans un requette PHp)

Eléphanteau du PHP | 25 Messages

29 nov. 2008, 20:51

bonjour les Zamis je viens solicité votre aide encore une fois

voila mon code actuelement...
<?php 

// Script par monkey D Akira ou D Boulon
// Tout droits rerservés
// www.Elysion.com

$colonne=0;//début du comptage des colonnes 
$ligne=0;//début du comptage des lignes 

echo '<table cellpadding=0 cellspacing=0 width="138"> 
  <tr> 
    <td width="100"><table width="" border="1" align=center cellpadding=0 cellspacing=0> 
      <tr align=center> 
        <td height="25" colspan=2><center><b>Ami(e)(S)</b></center></td> 
      </tr> 
      <tr valign=top> 
        <td width="110"><table width="100" height="" border="1"> 
          <tr>'; 
$info2 =  mysql_query("SELECT * FROM character_friends WHERE charId='".$_GET['charId']."'"); 
$nombr_result = mysql_num_rows($info2); 
if ($nombr_result) // si Character à des amis 
{ 
   while ($info=mysql_fetch_array($info2)) 
   { 
      echo '<td width="120">';//ouverture de la première colonne 
      echo '<b> 
      <center><img src="images/items/'.$info['item_id'].'.gif"/></center></b>'; 
      echo '</td>'; //fermeture 
     $colonne++; 
     if($colonne==10) //la colonne 3 est éteinte 
     { 
          $colonne=0;  // réinitialisation des colonnes 
          $ligne++;   //incrémentation des lignes 
          echo '</tr>';  //fermeture de la ligne en cours 
          if($ligne<1) echo '<tr>';  //ouverture de la prochaine ligne 
      } 
    } 
else // Si Character est un sans ami 
{ 
     echo '<td width="120">';//ouverture de la première colonne 
     echo "pas d'amis"; 
     echo '</td>'; //fermeture 
     echo '<tr>'; 
} 
echo'</tr></table></table></table>'; 
?>
il me fai une erreur assez amusante Parse error: syntax error, unexpected T_ELSE


merci de votre aide les Zamis

Eléphant du PHP | 451 Messages

29 nov. 2008, 21:27

Il manque un } avant ton else c'est pour ça.

Eléphanteau du PHP | 25 Messages

29 nov. 2008, 21:31

a oui c'es vrai je les ouvert 3 fois il faut que je le ferme 3 fois

erreur de debutant

Merci ça fais plus d'une heure que je cherche pour une erreur aussi kon.... j'aurai jamais pensé que ca venais de ça.. lol

Merci quand meme

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

30 nov. 2008, 11:04

En matière d'indentation, les goûts sont multiples et variés,
chacun étant persuadé d'avoir LA méthode idéale ;
le nombre de débats (trolls ?) sur ce sujet en témoigne. :roll:

Pour ma part, j'utilise une méthode que j'appliquais quand je codais en Pascal, C et C++
qui, à défaut d'être la meilleure (je ne participe pas à cette quête d'un Graal plus qu'hypothétique),
présente l'avantage de prévenir les problèmes d'accolades tel que celui que tu viens de rencontrer.

Pour exemple, ce genre de code est pour moi une aberration :
function machin() {
if ($condition) {
action();
}
return $valeur;
}
Voici ma façon de faire :
function machin()
{ if ($condition)
     { action();
     }
  return $valeur;
}
Les règles que j'ai choisi d'appliquer :
- accolades ouvrante et fermante à la verticale l'une de l'autre.
- position des accolades relative à l'opérateur qui les commande (if, while, for, etc.)
- léger retrait des instructions contenues dans une paire d'accolades

D'aucuns trouveront certainement des inconvénients à cette méthode. :roll:
Elle n'en apporte pas moins l'avantage de prévenir toute erreur d'accolade,
tant l'indentation de celles-ci est visuelle et immédiatement explicite.

Voici ce que cela donnerait avec ton code :
if ($nombr_result) // si Character à des amis 
   { while ($info=mysql_fetch_array($info2)) 
           { echo '<td width="120">';//ouverture de la première colonne 
             echo '<b><center><img src="images/items/'.$info['item_id'].'.gif"/></center></b>'; 
             echo '</td>'; //fermeture 
             $colonne++; 
             if ($colonne==10) //la colonne 3 est éteinte 
                { $colonne=0;  // réinitialisation des colonnes 
                  $ligne++;   //incrémentation des lignes 
                  echo '</tr>';  //fermeture de la ligne en cours 
                  if ($ligne<1)
                     echo '<tr>';  //ouverture de la prochaine ligne 
                } 
           } 
   } // L'ACCOLADE MANQUANTE
   else // Si Character est un sans ami 
   { echo '<td width="120">';//ouverture de la première colonne 
     echo "pas d'amis"; 
     echo '</td>'; //fermeture 
     echo '<tr>'; 
   }
// suite du code

Eléphant du PHP | 422 Messages

30 nov. 2008, 11:29

Ou alors, utiliser un éditeur qui marque surligne l'accolade fermante quand on est sur l'accolade ouvrante.

Autre truc que je trouve aberrant : avoir tellement de niveaux d'imbrications dans un script qu'on ne sait plus à quelle { correspond une }
La mémoire à court terme humaine est capable de gérer une dizaine d'informations simultanément. Si tu as des if imbriqués, 3 niveaux représentent 2^3=8 cas à gérer et 4 niveaux 2^4= 16.
Donc, je demande à mes équipes d'appliquer la règle : pas plus de trois niveaux imbriqués (chaque règle ayant ses exceptions bien sûr). Au-delà, il faut soit découper la partie pour en faire une fonction à part, soit modifier la structure du code. Un exemple : au lieu d'écrire

Code : Tout sélectionner

function x() { if (condition1) { xxx if (condition2} { yyyy } } }
On peut améliorer la lisibilité en écrivant :

Code : Tout sélectionner

function x() { if (not condition1) {return;} xxx if (not condition2) {return;} yyy }