[PHP][Resolu] Sortir du php proprement

Sortir du php proprement [PHP][Resolu] - PHP - Programmation

Marsh Posté le 30-07-2005 à 01:29:12    

Bonsoir a tous.
Je debute en php et j'ai une question un peu particuliere. Voici le code suivant pour exemple :
 
exemple.php :
 
<html>
<body>
<?
 $test1 = 1;
 $test2 = 2;
 $test3 = 3;
 
 if ( $test1 == 1 )
     { print "test1 est bien a 1";
       if ( $test2 == 2 )
           { print "test2 est bien a 2";  
             if ( $test3 == 3 )
                 { print "test3 est bien a 3";  
                   // traitement
                 }
             else
                 { print "Erreur ! test3 n'est pas a 3 !";
                 }
           }
       else
           { print "Erreur ! test2 n'est pas a 2 !";
           }
     }
 else
     { print "Erreur ! test1 n'est pas a 1 !";
     }
?>  
</body>
</html>
 
 
Ne trouvez vous pas ce code completement illisible ? Meme moi j'ai du mal a m'y retrouver, alors j'imagine que vous devez bien scruter a qui appartiennent les else pour savoir ce qui se passe si...etc...
 
Faisant pas mal de C, pour ecrire un code propre j'aurai plutot ecrit ceci, qui fait exactement la meme chose mais est largement plus lisible :
 
<html>
<body>
<?
 $test1 = 1;
 $test2 = 2;
 $test3 = 3;
 
 if ( $test1 != 1 )
     { print "Erreur ! test1 n'est pas a 1 !";
       return;
     }
 print "test1 est bien a 1";
 
 if ( $test2 != 2 )
     { print "Erreur ! test2 n'est pas a 2 !";
       return;
     }
 print "test2 est bien a 2";  
 
 if ( $test3 != 3 )
     { print "Erreur ! test3 n'est pas a 3 !";
       return;
     }
 print "test3 est bien a 3";  
 
 // traitement
?>  
</body>
</html>
 
 
Seulement voila, vous avez peut etre deviné mon probleme ! Lorsque j'utilise la methode ci dessus, le </body></html> n'est pas renvoyé au navigateur...
 
Meme probleme si je met exit a la place de return. Il n'existe pas une commande pour arreter d'interpreter la zone php mais sans couper ce qu'il y a derriere ?
 
Des idées ?
 
Merci a tous.


Message édité par nlc le 30-07-2005 à 13:24:41
Reply

Marsh Posté le 30-07-2005 à 01:29:12   

Reply

Marsh Posté le 30-07-2005 à 01:47:06    

edit: j'ai rien dit il est trop tard mon cerveau est en compote.


Message édité par WhatDe le 30-07-2005 à 01:55:55
Reply

Marsh Posté le 30-07-2005 à 01:48:03    

Ok, tu repondras demain alors ;) Bonne nuit !


Message édité par nlc le 30-07-2005 à 01:57:50
Reply

Marsh Posté le 30-07-2005 à 09:35:08    

Reply

Marsh Posté le 30-07-2005 à 09:38:20    

Sinon, tu mets ça dans une fonction.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 30-07-2005 à 10:31:37    

+1 pour sielfried, tu créés une function dans l'entête de ta page ou pendant le traitement puis tu appelles cette fonction

Reply

Marsh Posté le 30-07-2005 à 11:36:17    

Code :
  1. <?php require('test.php'); ?>
  2. [...]
  3. <body>
  4. <?php
  5.   process_tests();
  6. ?>
  7. </body>
  8. </html>


 
fichier test.php :

Code :
  1. <?php
  2.   function test1() {
  3.     if($test1 == 1) {
  4.       echo 'test1 est bien a 1';
  5.       return true;
  6.    
  7.     } else {
  8.  
  9.       echo 'Erreur ! test1 n'est pas a 1 !';
  10.       return false;
  11.     }
  12.   }
  13.   function test2() {
  14.     if($test2 == 2) {
  15.       echo 'test2 est bien a 2';
  16.       return true;
  17.    
  18.     } else {
  19.  
  20.       echo 'Erreur ! test2 n'est pas a 2 !';
  21.       return false;
  22.     }
  23.   }
  24.   function test3() {
  25.     if($test3 == 3) {
  26.       echo 'test3 est bien a 3';
  27.       return true;
  28.    
  29.     } else {
  30.  
  31.       echo 'Erreur ! test3 n'est pas a 3 !';
  32.       return false;
  33.     }
  34.   }
  35.   function process_tests() {
  36.     if(test1()) {
  37.       if(test2()) {
  38.         if(test3()) {
  39.          
  40.           // Traitement
  41.         }
  42.       }
  43.     }
  44.   }
  45. ?>


 
C'est déjà plus lisible... Maintenant je connais pas la nature de tes tests, à voir s'ils sont similaires ou pas, si on peut utiliser une fonction générique au lieu de ces immondes trois fonctions de test :D

Reply

Marsh Posté le 30-07-2005 à 12:32:30    

En fait mon exemple etait juste là pour illustrer le probleme.
Donc si je comprends bien, y'a pas de commande pour stopper l'interpretation php sans couper ce qu'il se trouve derriere.
 
J'ai bien noté qu'on peut faire un die( .... ), mais c'est vraiment pas beau, car il faudrait mettre ca a chaque test defaillant. Et puis dans mon cas j'ai juste </body></html>, mais dans des pages plus complexes il peut y avoir beaucoup plus...


Message édité par nlc le 30-07-2005 à 12:44:32
Reply

Marsh Posté le 30-07-2005 à 12:44:04    

Ben tu peux toujours mettre le html correspondant dans une variable php, genre $endoutput, et faire die($erreur . $endoutput) quand ça foire. C'est pas forcément super joli mais c'est assez pratique pour pouvoir faire du "or die" sans couper la fin du html à chaque fois.
 
Sinon dans ton cas tu peux toujours ruser assez facilement, tu fais  

Code :
  1. do {
  2.    ...
  3. } while (false);

et tu fais des break là où ça te chante.
 
Pas magnifique non plus je sais, mais ça marche. [:spamafote]  
 
Et si vraiment tu veux pas de tout ça, t'as les fonctions.


Message édité par sielfried le 30-07-2005 à 12:46:28

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 30-07-2005 à 12:48:20    

eh ben tu mets tout dans une fonction, comme ca le return quitte la fonction, comme en C ...
 
<?
 function main() {
   $test1 = 1;  
   ...
   // traitement
 }
?>  

Reply

Marsh Posté le 30-07-2005 à 12:48:20   

Reply

Marsh Posté le 30-07-2005 à 12:48:36    

Effectivement c'est une astuce possible.
 
Mais j'avoue etre etonné du fait que stopper php par un return, un exit ou un die ne fasse pas que stopper l'interpretation de tout ce qui se trouve entre <? et ?> en laissant tranquille le reste.
 
 
 
 

Reply

Marsh Posté le 30-07-2005 à 12:54:26    

mcjoedassin a écrit :

eh ben tu mets tout dans une fonction, comme ca le return quitte la fonction, comme en C ...
 
<?
 function main() {
   $test1 = 1;  
   ...
   // traitement
 }
?>


 
Et bien fait c'est bien ce que j'ai fait, par intuition, et j'appelle la fonction juste apres sa declaration :
 
<?
 function main() {
   $test1 = 1;  
   ...
   // traitement
 }
 
 main();
?>
 
Ca evite de faire un fichier a part quand la page n'est pas complexe.
Je crois que je vais me resigner a utiliser cette methode, car je vois qu'il n'existe pas de solution pour sortir du php, mais uniquement de la partie interpretation, en laissant tranquille ce qu'il y a derriere.

Reply

Marsh Posté le 30-07-2005 à 13:03:46    

je crois que php5 implémente un système d'exceptions (cf.
http://fr2.php.net/manual/fr/language.exceptions.php)
...

Reply

Marsh Posté le 30-07-2005 à 13:24:14    

Merci pour vos lumieres, je ferai systematiquement une fonction main(), et donc tout le code sera dedans.
A+

Reply

Sujets relatifs:

Leave a Replay

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