Couper une boucle avec des includes

Couper une boucle avec des includes - PHP - Programmation

Marsh Posté le 22-12-2009 à 18:28:02    

Bonjour,
 
C'est marrant, ca doit être une question archibasique, mais j'ai jamais eu affaire à ce genre de problème...
Je veux faire un backoffice rapide.
Donc je check la session à chaque page pour savoir si l'utilisateur est connecté.
J'utilise un systeme classique d'inclusions selon le schéma header/contenu/footer.
La vérification de la permission se fait à chaque début de page par une condition if dans mon header.php.
 
Le problème c'est que la boucle if commence dans le header et se termine dans le footer.
 
Et ça, ça lui plait pas, au petit php. Il préférerait que je termine ma boucle avant la fin du header.php...
 
Donc ma question est simple : n'y a-t-il pas moyen de commencer une boucle dans le header, d'ouvrir des accolades, de faire toute ma merdouille dans ma page, puis de refermer les accolades lors du footer ?
 
Merci d'avance  :hello:

Reply

Marsh Posté le 22-12-2009 à 18:28:02   

Reply

Marsh Posté le 22-12-2009 à 18:37:53    

t'as essayer en fermant pas les balise PHP a la fin des fichiers
 
pas de '?>'
 

Reply

Marsh Posté le 22-12-2009 à 19:01:54    

Mmmh ca n'aurait aucun sens  :p  
De plus j'ai du code HTML dans mon header.php juste après le check en php. C'est pour le doctype, head, toussa...
 
Mais dis-moi, c'est possible de faire ça ou bien je suis pas censé le faire ?
Parce que si je referme les accolades dans mes fichiers inclus, d'un coup il m'exécute joyeusement mon code...
Ca veut bien dit que c'est ça qui l'ennuie... Et ya aucun gros code de oufzor hein, c'est super classique comme vérification...


Message édité par Pascal le nain le 22-12-2009 à 19:03:07
Reply

Marsh Posté le 22-12-2009 à 19:16:51    

c'est pas terrible ouai
et ton session_start() ne devrai pas etre dans ton header
par exemple : index.php

 
Code :
  1. <?php
  2. require_once 'header.php';
  3.  
  4. blabla
  5.  
  6. require_once 'footer.php';
 

apres je voi pa trop le coup du if geant,  qui di if dis else ,  donc sinon quoi ? il affche autre chose ?


Message édité par stealth35 le 22-12-2009 à 19:18:14
Reply

Marsh Posté le 22-12-2009 à 20:18:47    

La connexion utilisateur est représentée par une variable session $_SESSION['id']
 
Je veux que ma page ne soit accessible que si le visiteur est connecté.
 
Donc j'ai mon code :  
 

Code :
  1. if isset($_SESSION['id'])
  2. {
  3. ma page avec plein de trucs
  4. }
  5. else
  6. {
  7. //s'il n'est pas connecté
  8. header('location: vatefaire.php');
  9. }


 
Comme j'ai plein de page de ce genre à faire, je fais un header avec le IF et un footer avec le ELSE
 
Pourquoi ? C'est mal ?  :ange:


Message édité par Pascal le nain le 22-12-2009 à 20:22:32
Reply

Marsh Posté le 22-12-2009 à 21:01:28    

tu te compliques
 

Code :
  1. if(!isset($_SESSION['id']))
  2. {
  3.  header('location: vatefaire.php');
  4.  exit;
  5. }
  6.  
  7. //blabla

Reply

Marsh Posté le 22-12-2009 à 22:15:02    

C'est laid  [:ex-floodeur:4]  
 
Ya vraiment rien d'autre que "exit" ??
 
Ca me gène de casser le script comme ça...
Question de...propreté... d'éthique...  :whistle:  
 
Vraiment rien d'autre ? Mmmh  [:freedatoune]

Message cité 3 fois
Message édité par Pascal le nain le 22-12-2009 à 22:18:45
Reply

Marsh Posté le 22-12-2009 à 23:47:03    

je sais pas, on me critique bien parce j'utilise la bufferisation de sortie alors que dans les code source de certaine grosse lib c'est utilisé
 
dans les commentaires de la doc y'a plusieur exemple avec exit;

Reply

Marsh Posté le 23-12-2009 à 22:23:14    

Le exit() permet de forcer php à ne pas continuer d'interpréter le reste du script. Placer un exit() après chaque header() est une pratique recommandée, puisque tu n'as plus besoin du reste du script...
 
Et la bufferisation de sortie, c'est le bien.
Sans ça il devient lourd de faire un système de cache dans un code contenant des require et un tas d'objets qui crachent ce que bon leur semble.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 24-12-2009 à 12:35:13    

Pascal le nain a écrit :

C'est laid  [:ex-floodeur:4]  
 
Ya vraiment rien d'autre que "exit" ??
 
Ca me gène de casser le script comme ça...
Question de...propreté... d'éthique...  :whistle:  
 
Vraiment rien d'autre ? Mmmh  [:freedatoune]


tu fais la même chose mais avec des accolades qui se trouvent dans des fichiers différents et tu trouves ça laid ? :pt1cable:


---------------
oui oui
Reply

Marsh Posté le 24-12-2009 à 12:35:13   

Reply

Marsh Posté le 28-12-2009 à 02:32:19    

sinon si t'as php >= 5.3.0  tu peu utilisé "goto"
http://www.php.net/manual/fr/contr [...] s.goto.php

Message cité 1 fois
Message édité par stealth35 le 28-12-2009 à 02:32:27
Reply

Marsh Posté le 28-12-2009 à 11:35:01    

stealth35 a écrit :

sinon si t'as php >= 5.3.0  tu peu utilisé "goto"  
http://www.php.net/manual/fr/contr [...] s.goto.php


 
 :(

Reply

Marsh Posté le 28-12-2009 à 13:30:18    

Pascal le nain a écrit :

C'est laid  [:ex-floodeur:4]  
 
Ya vraiment rien d'autre que "exit" ??
 
Ca me gène de casser le script comme ça...
Question de...propreté... d'éthique...  :whistle:  
 
Vraiment rien d'autre ? Mmmh  [:freedatoune]


A la limite, tu peux toujours commencer par alimenter une variable en fonction du test, et la tester dans chaque include.
Ou mettre ton test dans ta page principale, et faire tes include en fonction :

Code :
  1. <?php
  2. if isset($_SESSION['id']) {
  3.   include ('header.php');
  4.   ...
  5.   include ('footer.php');
  6. }
  7. else {
  8.   header('location: vatefaire.php');
  9. }?>


Mais la solution du exit est quand même la meilleure...

Reply

Marsh Posté le 29-12-2009 à 12:04:48    

[troll]
Quand on veut faire propre on code en mvc
[/troll]

Reply

Marsh Posté le 29-12-2009 à 21:38:43    

Le mieux c'est quand même de faire :

Code :
  1. for ($i = 0; $i < 1024; ++$i) {
  2.  exit();
  3. }


 
Vous, ça ne vous fait peut-être rien, mais moi... ça m'exit for ! :D :D :D


Message édité par CyberDenix le 29-12-2009 à 21:39:05

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 30-12-2009 à 00:03:24    

il m'a fallu environ 1024 itérations pour comprendre la blague :o

Reply

Marsh Posté le 30-12-2009 à 20:52:09    

Pascal le nain a écrit :

C'est laid  [:ex-floodeur:4]  
 
Ya vraiment rien d'autre que "exit" ??
 
Ca me gène de casser le script comme ça...
Question de...propreté... d'éthique...  :whistle:  
 
Vraiment rien d'autre ? Mmmh  [:freedatoune]


Non exit c'est très bien. Si tu veux faire des choses à l'arret du script, utilise register_shutdown_function() etc.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

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