: comment inclure un target dans un HEADER LOCATION .... ?? [PHP] - Programmation
Marsh Posté le 08-11-2001 à 11:52:02
top.location.href="..." je crois...
Marsh Posté le 08-11-2001 à 12:07:55
Sinon, impossible avec le header location ?
Marsh Posté le 08-11-2001 à 12:13:58
pas à ma connaissance, mais bon ma connaissance en html/javascript est relativement limitée
va tj faire un tour sur www.allhtml.com
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
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]
Marsh Posté le 08-11-2001 à 15:42:34
antp a écrit a écrit : top.location.href="..." je crois... |
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 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
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
Marsh Posté le 09-11-2001 à 15:12:07
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 ) mais je n'ai pas vu le besoin d'avoir un header...
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
ce que je veux savoir ? tout, j'ai meme pas capte ce que faisais la fonction ...
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
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.
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.
Mouais... il faut une variable globale et tout... je suis sûr que ça va merder qq part
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()
voila je règles mon problème en 3 lignes.
[edtdd]--Message édité par ethernal--[/edtdd]
Marsh Posté le 10-11-2001 à 14:42:10
t'as vraiment l'air tordu en effet
sinon, bon je pense avoir compris le principe des ob_ ...
je testerai
merci de ton aide
Marsh Posté le 08-11-2001 à 11:46:57
me revoila
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
merci d'avance ...
au pire, comment le faire en javascript ... meme si je ne suis pas forcement partisan de cette solution ...
---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391