Est-ce normal d'avoir 200 lignes de code pour en afficher 4 ?

Est-ce normal d'avoir 200 lignes de code pour en afficher 4 ? - PHP - Programmation

Marsh Posté le 15-04-2004 à 11:09:30    

Hello,
 
voilà je suis en train de faire un « petit » script pour gérer des cours et leur numéro (première partie d'un exercice), voilà le résultat :
 
http://masterjul.homeip.net/tp_sql/gest_cours.php
 
Et voilà... le code :
http://masterjul.homeip.net/tp_sql/source_cours.php
 
Soit un peu plus de 200 lignes (avec les commentaires et le HTML certes). Je précise avant de voir arriver les vautours que le but n'est pas pour le moment de faire du code W3C compliant mais les remarques sont les bienvenues, quand même.
 
Ma question est surtout de savoir si l'on ne pas simplifier ce code ou c'est une taille normale. Et puis s'il y a des erreurs à la con, je veux bien des remarques aussi !
 
Je travaille en registe_global à off et error_reporting E_ALL. :p
 
Merci !
 
EDIT 17 AVRIL :  
 
Je viens de pondre la gestion des centres, préparez-vous psychologiquement avant de regarder le code :  
 
http://masterjul.homeip.net/tp_sql/gest_centres.php  
http://masterjul.homeip.net/tp_sql/source_centres.php


Message édité par Master_Jul le 17-04-2004 à 11:14:21

---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 15-04-2004 à 11:09:30   

Reply

Marsh Posté le 15-04-2004 à 11:52:30    

Tu pourrais virer tous ces echo et taper le code HTML en brut avec juste des echo ici et là pour afficher les données, ça me semble mieux et beaucoup plus lisible (pis tu te ferais pas chier avec l'échappement de quotes).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 15-04-2004 à 12:17:06    

Ce serait bien de te mettre d'accord avec toi-même : soit tu utilise le ' soit tu utilise le " pour les chaînes PHP, mais évite de mélanger les deux, quitte à mettre des caractères d'échappement à l'intérieur. Parceque c'est passablement illisible.

Reply

Marsh Posté le 15-04-2004 à 12:40:49    

Bon, pour ce qui est du nombre de ligne de code, c'est pas evident de te répondre, je ne sais pas s'il y a des choses superflues...
 
Sinon voici comment moi je procède (mais bon, chacun sa méthode) :
 

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2.   <html>
  3.   <head>
  4.   <title>Gestion des cours</title>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6.   <link href="tp_sql.css" rel="stylesheet" type="text/css">
  7.   <script type="text/javascript" language="javascript">
  8.   var confirmMsg  = 'Êtes-vous sûr(e) de vouloir supprimer ';
  9.   </script>
  10.   <script src="libraries/functions.js" type="text/javascript" language="javascript"></script>
  11.   </head>
  12.  
  13.   <body background="images/fond1.gif">
  14.   <div align="center">
  15.     <p class="police_std_titre">GESTION DES COURS</p>
  16.  
  17.   <?PHP
  18.  
  19.   //Paramètres de connexion à la base MySQL  
  20.  
  21.   require 'connexion.inc.php';
  22.  
  23.   //Connexion  
  24.   $connex = connex_base();
  25.   if (!$connex)
  26.   {
  27.      echo "Connexion à la base impossible, réessayez plus tard.";
  28.      exit;
  29.   }
  30.  
  31.   /*********************************************************\  
  32.     Fontion pour tester la présence d'un cours dans la base   
  33.     Test basé sur le numéro du cours                         
  34.   \*********************************************************/
  35.  
  36.   function presence_cours($cours)
  37.   {
  38.      $sql= "SELECT cours FROM cours WHERE cours=$cours";
  39.      $req= mysql_query($sql) or die('Erreur SQL : '.$sql.'<br>'.mysql_error());
  40.      $line = mysql_fetch_array($req);
  41.      
  42.      if($line)
  43.      {
  44.         return false;
  45.      }
  46.      else return true;
  47.     }
  48.  
  49.   // On extrait les variables passées dans l'URL  
  50.   extract($_GET,EXTR_OVERWRITE);
  51.  
  52.   // Les variables sont définies histoire de coder proprement  
  53.   if(!isset($action)) $action=null;
  54.     if(!isset($cours_existant_value)) $cours_existant_value=null;
  55.     if(!isset($tri)) $tri=null;
  56.    
  57.  
  58.   /******************\  
  59.     GESTION DU TRI                   
  60.   \******************/
  61.  
  62.   if($tri=='intitule')
  63.     $order_by="ORDER BY intitule";
  64.   else
  65.     $order_by="ORDER BY cours";
  66.  
  67.   /********************\  
  68.     AJOUT D'UN COURS                       
  69.   \********************/
  70.  
  71.   if($action=='ajouter')
  72.   {
  73.      
  74.      extract($_POST,EXTR_OVERWRITE);
  75.      
  76.      if(presence_cours($cours))
  77.      {
  78.         $intitule=strtoupper(trim($intitule));
  79.        
  80.         $sql= "INSERT INTO cours VALUES ($cours,'$intitule')";
  81.         $req= mysql_query($sql) or die('Erreur SQL : '.$sql.'<br>'.mysql_error());
  82.        
  83.         if(!$req) echo "Echec de l'insertion.";
  84.        } else
  85.      {
  86.         echo '<p class="header_table">Le  cours '.$cours.' existe d&eacute;j&agrave; !</p>';
  87.         $cours_existant_value=$intitule;
  88.      }
  89.      
  90.   }
  91.  
  92.  
  93.   /*************************\  
  94.     MODIFICATION D'UN COURS                       
  95.   \*************************/
  96.  
  97.   elseif($action=='modifier_valide')
  98.   {
  99.      extract($_POST,EXTR_OVERWRITE);
  100.      $intitule=strtoupper(trim($intitule));
  101.      
  102.      $sql= "UPDATE cours SET cours=$cours,intitule='$intitule' WHERE cours='$cours_mod'";
  103.      $req= mysql_query($sql) or die('Erreur SQL : '.$sql.'<br>'.mysql_error());
  104.      
  105.      if(!$req) echo "Echec de la modification.";
  106.     }
  107.  
  108.   /*************************\  
  109.     SUPPRESSION D'UN COURS                       
  110.   \*************************/
  111.  
  112.   elseif($action=='supprimer')
  113.   {
  114.      $sql= "DELETE FROM cours WHERE cours=$cours";
  115.      $req= mysql_query($sql) or die('Erreur SQL : '.$sql.'<br>'.mysql_error());
  116.      
  117.      if(!$req) echo "Echec de la suppression.";
  118.        
  119.   }
  120.  
  121.   /************************\  
  122.     CREATION DE LA LISTE                       
  123.   \************************/
  124.  
  125.   $sql= "SELECT * FROM cours $order_by";
  126.   $req= mysql_query($sql) or die('Erreur SQL : '.$sql.'<br>'.mysql_error());
  127.  
  128.  
  129.   // Entête du tableau  
  130. ?>
  131. <table width="60%"  border="0" align="center" bgcolor="#FFFFFF">
  132.    <tr bgcolor="#4E76A4" class="header_table">
  133.      <td><div align="center"><a href="gest_cours.php" class="header_table">N&deg;</a></div></td>
  134.      <td><div align="center"><a href="gest_cours.php?tri=intitule" class="header_table">Intitul&eacute;</a></div></td>
  135.      <td><div align="center">Modif.</div></td>
  136.      <td><div align="center">Suppr.</div></td>
  137.    </tr>
  138. <? 
  139.   // Compteur pour couleurs alternées  
  140.   $i=0;
  141.  
  142.   while($line = mysql_fetch_array($req))
  143.   {
  144.      // La couleur de fond de la ligne change une fois sur deux  
  145.      
  146.      if($i%2!=0) $bgcolor='#9FBED0'; else $bgcolor='#C2D6E2';
  147.        $i++;
  148.      echo '    <tr bgcolor="'.$bgcolor.'" class="police_std">'."\n";
  149.      
  150.      // Si l'on est en train de modifier une valeur  
  151.      if($action=='modifier' && $cours_mod==$line['cours'])
  152.      {
  153. ?>
  154. <form name="modif_cours_form" method="post" action="gest_cours.php?action=modifier_valide&cours_mod=<?=$cours_mod?>">
  155.  <td>
  156.   <input name="cours" type="text" size="3" value="<?=$line['cours']?>">
  157.  </td>
  158.  <td>
  159.   <input name="intitule" type="text" size="35" value="<?=$line['intitule']?>">
  160.  </td>
  161.  <td colspan="2">
  162.   <div align="center">
  163.   <input type="submit" name="Submit" value="Modifier ce cours">
  164.   </div>
  165.  </td>
  166. </form>
  167. <?
  168.      } else


 
++

Reply

Marsh Posté le 15-04-2004 à 12:44:15    

Sinon j'ai aussi l'impression que tout est mélangé ... tu devrais peut etre séparer les differentes choses dans plusieurs fichiers, et faire des includes ... (ajout, suppression, edition etc...)
 
++

Reply

Marsh Posté le 15-04-2004 à 13:56:16    

Nouvelle version, suivant vos conseils :
 
http://masterjul.homeip.net/tp_sql/source_cours.php
 
Sinon Dj YeLL, je dois tout faire en un seul fichier, et je ne saurai de toute façon pas trop comment dispatcher les tâches dans d'autres fichiers, à part 3 requêtes SQL tout reste assez « collé » à la page.


Message édité par Master_Jul le 15-04-2004 à 13:57:45

---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 15-04-2004 à 13:56:40    

ça va pas marcher ton lien :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 15-04-2004 à 13:58:10    

drasche a écrit :

ça va pas marcher ton lien :D


 
Je viens de m'en appercevoir en le collant dans le premier post. :D


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 15-04-2004 à 14:00:45    

Y'a 3 lignes de code qui ne servent à rien :
 
if(!$req) echo "Echec de la modification.";  
 
On ne peut pas les atteindre...


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 15-04-2004 à 14:14:00    

Euh ... si tu mettais ton code dans un TXT on pourrait peut etre le lire ... parceque la, on ne verra que le HTML (c'est tout l'interet du PHP d'ailleurs) :)
 
++
 
 
Edit : OUPS, j'aurais mieux fait de cliquer avant de parler :D


Message édité par Dj YeLL le 15-04-2004 à 14:44:56
Reply

Marsh Posté le 15-04-2004 à 14:14:00   

Reply

Marsh Posté le 15-04-2004 à 14:36:42    

Si c'est le nombre de ligne qui te tracasse, oui y a moyen de faire plus court.
 
Par exemple, remplace :

Code :
  1. if($tri=='intitule')
  2. $order_by="ORDER BY intitule";
  3. else
  4. $order_by="ORDER BY cours";


Par

Code :
  1. $order_by = 'ORDER BY '.($tri == 'intitule' ? $tri : 'cours');


Tu peux appliquer ça plusieurs fois dans ton code (ça marche aussi pour return...).
 
Et les commentaires façon entête sont un peu gros, il veut mieux expliquer au début du fichier ce que tu vas faire et ensuite commenter le minimum (des noms explicites pour les variables et fonctions suffisent souvent).
 
Enfin, ce n'est que mon avis. ;)


Message édité par kalex le 15-04-2004 à 14:59:31
Reply

Marsh Posté le 15-04-2004 à 14:57:22    

"Est-ce normal d'avoir 200 lignes de code pour en afficher 4 ?"
 
moi je vois pas de pertinence dans le rapport entre le nombre du ligne du code source et le nombre de ligne en sortie.

Code :
  1. <?php while(1) echo "toto<br>"; ?>


Reply

Marsh Posté le 15-04-2004 à 15:06:43    

Pourtant il y en a ... de la pertinence à cette question ...
 
C'est pas le fait d'avoir 200 lignes de code pour en afficher 4 qui importe ici ....
 
C'est d'avoir 200 lignes de code alors qu'on pourrait peut-etre en avoir 100 ...
 
On appelle ça de l'optimisation ...
 
Suivant ton exemple, si je te met :
 
echo "t";
echo "o";
echo "t";
echo "o";
 
Tu crois pas qu'il serait plus interessant de le transformer en echo "toto"; ?
 
Donc oui, sa question est pertinente :D
 
CQFD
 
++

Reply

Marsh Posté le 15-04-2004 à 15:07:55    

disons que la formulation du titre du topic est erronée.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 15-04-2004 à 19:18:48    

kalex a écrit :

Si c'est le nombre de ligne qui te tracasse, oui y a moyen de faire plus court.
 
Par exemple, remplace :

Code :
  1. if($tri=='intitule')
  2. $order_by="ORDER BY intitule";
  3. else
  4. $order_by="ORDER BY cours";


Par

Code :
  1. $order_by = 'ORDER BY '.($tri == 'intitule' ? $tri : 'cours');


Tu peux appliquer ça plusieurs fois dans ton code (ça marche aussi pour return...).
 
Et les commentaires façon entête sont un peu gros, il veut mieux expliquer au début du fichier ce que tu vas faire et ensuite commenter le minimum (des noms explicites pour les variables et fonctions suffisent souvent).
 
Enfin, ce n'est que mon avis. ;)


 
Je n'ai pas très bien compris comment marchait cette syntaxe, j'ai essayé de trouver des trucs sur Google à « syntaxe courte » mais je n'ai rien trouvé. Enfin si, juste le echo court.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 00:11:25    

Master_Jul a écrit :


 
Je n'ai pas très bien compris comment marchait cette syntaxe, j'ai essayé de trouver des trucs sur Google à « syntaxe courte » mais je n'ai rien trouvé. Enfin si, juste le echo court.

ça s'apelle opérateur ternaire et ça sert à remplacer un if. en gros ça s'écrit condition ? action_si_vrai : action_si_faux


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-04-2004 à 01:26:57    

C'est bien ça. ;)  
La doc (voir en bas) :
http://www.unixtech.be/docs/php-fr [...] rison.html

Reply

Marsh Posté le 16-04-2004 à 11:35:47    

Ok merci ! En fait j'avais du mal à comprendre à cause du $tri, j'aurai mieux compris comme ça :
 
$order_by = 'ORDER BY '.($tri == 'intitule' ? 'intitule' : 'cours'); :)


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 12:49:25    

Master_Jul a écrit :

Ok merci ! En fait j'avais du mal à comprendre à cause du $tri, j'aurai mieux compris comme ça :
 
$order_by = 'ORDER BY '.($tri == 'intitule' ? 'intitule' : 'cours'); :)


c'est pas de l'optimisation ça... ni pour la machine, et surtout pas pour le lecteur...

Reply

Marsh Posté le 16-04-2004 à 12:53:08    

Surtout si l'intitulé est $tri = "Bienvenue dans la 1ère partie de notre courcernant la symbiose incorrecte entre les lapins géants d'Afrique du Sud et la tourtelle à 3 patte du Corridor Argenté"...
 
:D

Reply

Marsh Posté le 16-04-2004 à 13:06:55    

mysql_close();  
 
Tu peux le faire bien avant la fin de la page ! Tout le monde fait la même erreur

Reply

Marsh Posté le 16-04-2004 à 15:16:20    

JagStang a écrit :


c'est pas de l'optimisation ça... ni pour la machine, et surtout pas pour le lecteur...

Pour le lecteur, je veux bien (et encore c'est pas parce qu'on le voit rarement en php que ce n'est pas extrêmement utile, justement pour alléger la syntaxe), mais pour la machine si ! Même si ici, les deux manières de faire sont si rapides qu'on ne verra jamais la différence.


Message édité par kalex le 16-04-2004 à 15:17:41
Reply

Marsh Posté le 16-04-2004 à 15:21:56    

aucune différence à mon sens. PHP étant un language interprété, puis le résultat de celui-ci envoyé via un média instable comme internet, ce genre d'"optimisation" s'apparente  _vraiment_ à de l'enc**age de mouche.
 
a+

Reply

Marsh Posté le 16-04-2004 à 15:24:24    

et sinon une petite question conne, au début j'avais fait
 
//modif
if {}
//ajout
if {}
// suppr
if {}
 
Et après, je me suis dit que je pouvais mettre d'un point de vu plus "logique" des elseif mais est-ce que celà change quelque chose du point de vu du code et de sa rapidité/façon d'éxécution ?  
 
À priori, je ne vois pas de différence si je ne termine pas la série de elseif par un else, ce dont je n'ai pas besoin ici.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 15:27:29    

attend c'est du PHP là. c'est pas comme si ce code devait être exécuté des milliards de fois...
 
c'est clair que des if c'est plus long. mets un switch si tu veux.
 
Mais ça reste de l'optimisation à 2 balles je m'excuse... Le gars devra de toute façon attendre quelques ms avant de recevoir la page par le réseau.

Reply

Marsh Posté le 16-04-2004 à 15:53:12    

JagStang a écrit :

aucune différence à mon sens. PHP étant un language interprété, puis le résultat de celui-ci envoyé via un média instable comme internet, ce genre d'"optimisation" s'apparente  _vraiment_ à de l'enc**age de mouche.
 
a+

Tu dois pas aimer Perl toi ? ;)
Non, ça permet souvent d'ogmenter la lisibilité et la simplicité du code.
Je préfère faire :

Code :
  1. do_func(($var == 'ok' ? TRUE : FALSE), $var2, $var3);


Que :

Code :
  1. if($var == 'ok')
  2. do_func(TRUE, $var2, $var3);
  3. else
  4. do_func(FALSE, $var2, $var3);


C'est peut-être con pour toi, mais pour moi c'est plus clair et logique. Et surtout je ne vais dire à personne, que ne pas faire comme moi est stupide...
 
De plus que PHP soit un langage interprété est plutôt une bonne chose pour ce genre de truc...

Reply

Marsh Posté le 16-04-2004 à 16:07:03    

Je viens de tranposer un return et ça fait quand même beaucoup plus propre [:mlc] :
 
Avant :
 
if($line)
{
return false;
}
else return true;
 
Après :
 
return ($line) ? false : true;


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 16:13:55    

Le code est mis à jour et je pense pour ainsi dire bouclé, merci à vous. :jap:
 
http://masterjul.homeip.net/tp_sql/source_cours.php


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 16:28:35    

Master_Jul a écrit :

Je viens de tranposer un return et ça fait quand même beaucoup plus propre [:mlc] :
 
Avant :
 
if($line)
{
return false;
}
else return true;
 
Après :
 
return ($line) ? false : true;
 


 
encore mieux. remplace  
 
return ($line) ? false : true;
 
par  
 
return ($line) ;
 

Reply

Marsh Posté le 16-04-2004 à 16:30:23    

Ça ne serait pas plutôt return(!$line); ?


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 16:31:25    

oui bien vu. Alors ça marche ?

Reply

Marsh Posté le 16-04-2004 à 16:32:33    

Impéc, merci. :jap:  
 
Bon, je vais passer au gros morceau, la gestion des centres.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 16-04-2004 à 16:43:03    

Ça commence à devenir bien propre tout ça. ;)
Encore un enculage de mouches :D :
return (!mysql_fetch_array($req));

Reply

Marsh Posté le 17-04-2004 à 11:12:04    

Je viens de pondre la gestion des centres, préparez-vous psychologiquement avant de regarder le code :
 
http://masterjul.homeip.net/tp_sql/gest_centres.php
http://masterjul.homeip.net/tp_sql/source_centres.php
 
Déjà, je ne vais faire qu'une fonction pour le changement de date, en utilisant un second argument.


Message édité par Master_Jul le 17-04-2004 à 11:13:51

---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed