[PHP] : comment inclure un target dans un HEADER LOCATION .... ??

: comment inclure un target dans un HEADER LOCATION .... ?? [PHP] - Programmation

Marsh Posté le 08-11-2001 à 11:46:57    

:hello:  
 
me revoila :D  
 
bon, j'effectue un header location (en fonction d'un cookie mais c'est HS) et ca marche comme il faut ...
 
seul soucis ;) : mon site a des frames partout et la page ou s'effectue le header est dans la frame la plus basse alors que j'aimerais que le header pointe vers la frame la plus haute ...
 
d'ou mon titre : tout est dans le titre :D  
 
merci d'avance ...
 
au pire, comment le faire en javascript ... meme si je ne suis pas forcement partisan de cette solution ...
 
 :ange:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 08-11-2001 à 11:46:57   

Reply

Marsh Posté le 08-11-2001 à 11:52:02    

top.location.href="..." je crois...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-11-2001 à 12:07:55    

Sinon, impossible avec le header location ?


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 08-11-2001 à 12:13:58    

pas à ma connaissance, mais bon ma connaissance en html/javascript est relativement limitée :D
va tj faire un tour sur www.allhtml.com


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-11-2001 à 14:22:53    

oups j'ai mal lu la question on dirait ;)
tu parles de frames html, pas de frames php  :pt1cable:  
 
enfin, le reste est pour info alors ;)
 
Avant un header, on ne peut rien envoyer et c'est bien là le problème ;)
 
Heureursement, il existe une fonction miracle que j'ai cherché pendant des mois : ob_start();
cette fonction permet de stocker tout ce qui est envoyé à l'utilisateur dans une variable système.
Ensuite, si tu décides de faire un header(); tu vides la variable à la poubelle.
si tu décides d'afficher, tu envoise cette variable au client.
c'est hyper pratique !!
 
exemple :
<?
session_start();
ob_start(); //stocke au lieu d'envoyer
?>
<HTML><HEAD></HEAD>
<BODY>
 
<?
include("header.php" );
include("menus.php" )
 
//-----------------------------------------------------------
//ci-après le contenu d'une page inclue de réception d'un formulaire
$erreur="";
if ($nom="" ) $erreur="entrer le nom";
if ($prenom="" ) $erreur="entrer le prénom";
 
if ($erreur!="" )  
  echo erreur;
  return;
else
  //vide la variable et n'envoie rien à l'utilisateur
  ob_end_clean();
  //insertion dans BD et autres opérations
  //redirrige la page
  Header("Location:mapage.php" );
// fin de la page inclue
//------------------------------------------------
 
--------------
 
include("footer.php" );
?>
 
</BODY>
</HTML>
 
<?
ob_end_flush(); //envoie tout à l'utilisateur
?>
 
Je m'en sers comme tu vois pour afficher des messages d'erreur dans mes frames php, plutôt que de les afficher séparément.

 

[edtdd]--Message édité par ethernal--[/edtdd]

Reply

Marsh Posté le 08-11-2001 à 15:42:34    

antp a écrit a écrit :

top.location.href="..." je crois...  




 
 :jap: merci, ca marche
par contre, c'est pas "propre" ... on vois nettement le debut de la page se charger puis le chargement de la pge vers laquelle je redirige ... :(
 

ethernal a écrit a écrit :

oups j'ai mal lu la question on dirait ;)
tu parles de frames html, pas de frames php  :pt1cable:  
 
enfin, le reste est pour info alors ;)
 
Avant un header, on ne peut rien envoyer et c'est bien là le problème ;)
 
Heureursement, il existe une fonction miracle que j'ai cherché pendant des mois : ob_start();
cette fonction permet de stocker tout ce qui est envoyé à l'utilisateur dans une variable système.
Ensuite, si tu décides de faire un header(); tu vides la variable à la poubelle.
si tu décides d'afficher, tu envoise cette variable au client.
c'est hyper pratique !!
 
exemple :
<?
session_start();
ob_start(); //stocke au lieu d'envoyer
?>
<HTML><HEAD></HEAD>
<BODY>
 
<?
include("header.php" );
include("menus.php" )
 
//-----------------------------------------------------------
//ci-après le contenu d'une page inclue de réception d'un formulaire
$erreur="";
if ($nom="" ) $erreur="entrer le nom";
if ($prenom="" ) $erreur="entrer le prénom";
 
if ($erreur!="" )  
  echo erreur;
  return;
else
  //vide la variable et n'envoie rien à l'utilisateur
  ob_end_clean();
  //insertion dans BD et autres opérations
  //redirrige la page
  Header("Location:mapage.php" );
// fin de la page inclue
//------------------------------------------------
 
 
--------------
 
include("footer.php" );
?>
 
</BODY>
</HTML>
 
<?
ob_end_flush(); //envoie tout à l'utilisateur
?>
 
Je m'en sers comme tu vois pour afficher des messages d'erreur dans mes frames php, plutôt que de les afficher séparément.  
 
 




 
j'ai rien comrpis chef :D  
je vais faire un tour chez php.net pour essayer de mieux cerner ca ... par contre, si tu pouvais un peu plus m'expliquer ca serait genial :)


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 09-11-2001 à 15:12:07    

:hello:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 09-11-2001 à 15:29:23    

bien sur ;)
que puis je t'expliquer plus en détail ?
 
Au fait, a quoi te sert ton header(); ? j'ai parcouru ton site (génial la 206 WRC :D) mais je n'ai pas vu le besoin d'avoir un header...

Reply

Marsh Posté le 10-11-2001 à 03:24:59    

le header me sert pour mon boulot, pas mon micro site perso ;)
 
www.mgel.fr
 
que des frames partout :crazy:  
 
ce que je veux savoir ? tout, j'ai meme pas capte ce que faisais la fonction ... :D


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 10-11-2001 à 14:09:00    

sympa le site du boulot ;)
 
Explications des fonctions :
ob_start(): intercepte TOUT ce qui est envoyé au visiteur (cad toute les instructions <? echo "..." ?> ou "<HTML> <HEAD>" hors des balises php) et le stock qq part dans une variable.
 
ob_end_flush(): envoit tout ce qu'il a stocké.
 
ob_end_clean(): vide tout ce qu'il a stocké et n'envoit rien au visiteur.
 
 
Exemple d'utilisation (à lire si tu as pas déjà mal de tête):
c'est partiiii... je te préviens ça va être long ;) et en plus je suis un tordu comme tu vas t'en rendre compte :lol: :D
 
Prérequis:
Avant un header() tu ne peux rien envoyer au client, sinon tu obtiens une erreur (c'est logique).  
 
le fonctionnement de mon site test ;) :
- Dans le site, il y a pleins de frame-php (des tableaux avec des includes de pages).  Tout est géré à partir de la page "index.php" qui contient la mise en page de tout le site.
Toutes les urls du site ressemblent à index.php?menu=xxxx&ssmenu=xxxx.  Cela détermine l'affichage d'un menu spécifique et l'inclusion d'UNE page php centrale.
exemple : index.php?menu=doc&ssmenu=php affichera d'une part dans le menu "Documentation" en gras et le sous menu "PHP" en gras aussi, et d'autre part affichera la frame php centrale "php_info.html" qui contient le texte intéressant.
 
- je voudrais afficher des messages d'erreur à la suite d'un formulaire mal completé.  Je voudrais également que ces messages d'erreurs soient affichés dans la partie "contenu" de mes frames-php. Bha oui c'est plus beau...
 
Dans une page "index.php?menu=inscription&ssmenu=MAJ", j'ai un formulaire dont le ACTION est "index.php?menu=inscription&ssmenu=post".  Derrière ce nom se cache la page "inscription_post.php".
 
- La page "insciption_post.php" : si tout est correct on enregistre dans la BD et on redirige avec un header() vers la page précédente (pour éviter divers problèmes)
Si il y a des erreurs, il faut les afficher dans la page frame php centrale.
 
Problème :
Puisque je fais appel dans ton formulaire à "index.php?menu=inscription&ssmenu=post", j'envoies déjà les tags html, head, body, et la frame-php de menu avant d'arriver à la partie de test des données envoyées... :(  
 
Solution 1.  
Tu mets directement le nom de la page à exécuter lors de l'envoi du formulaire dans le action de ce formulaire (ici "inscription_post.php" ).  
Tu fais tes tests et tu rediriges avec un header soit à une page d'affichage d'erreur genre "index.php?menu=insciption&ssmenu=erreur" à laquelle tu fais passer ces messages d'erreur, soit tu rediriges vers la page précédente si tout est ok.  
 :sol: Il me faudra coder les messages d'erreur avec urlencode() et tout... pfff... bof je laisse tomber. (mais ça serait la meilleure solution je pense)
 
Solution 2.
Tu remplaces les echo "..." par une fonction qui stocke tout dans une variable de façon à n'envoyer qqch au client que lorsque tu es sûr qu'il n'y a pas de header à faire.
S'il y a une erreur, tu vas tout afficher, messages d'erreurs compris.  
S'il y a un header, tu vides ta variable et tu fais le header.
 :sol: Mouais... il faut une variable globale et tout... je suis sûr que ça va merder qq part :D
 
Solution 3.
Tu as pas envie de faire ta propre fonction de stockage des infos envoyées à l'utilisteur.  Tu préfères utiliser une fonction php toute faites qui gerera tout pour toi: "ob_start()"
 
ob_start(), ob_end_flush(), ob_end_clean()
 :sol: voila je règles mon problème en 3 lignes.

 

[edtdd]--Message édité par ethernal--[/edtdd]

Reply

Marsh Posté le 10-11-2001 à 14:09:00   

Reply

Marsh Posté le 10-11-2001 à 14:42:10    

t'as vraiment l'air tordu en effet :D  
 
sinon, bon je pense avoir compris le principe des ob_ ...
 
je testerai :)
 
merci de ton aide :hello:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Sujets relatifs:

Leave a Replay

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