PHP + pause + redirect

Bonjour,
J’ai un petit souci de débutant…
Dans un formulaire j’ai if ($success){ echo '<p class="feedback yay">All is well, your e&ndash;mail has been sent.</p>';}qui renvoie proprement un message.

Je souhaite en plus, après quelques secondes, être redirigé vers l’index de mon site.
Mais je n’y arrive pas.
J’ai cherché, en vain…
J’ai tenté d’insérer ça dans mon PHPheader("Refresh: 10; URL=http://site" );mais ça me donne cette erreur :Warning: Cannot modify header information - headers already sent by (output started at /var/www/home/contact/contact.php:9) in /var/www/home/contact/contact.php on line 45Surement évident pour vous… pas pour moi :smt005
Ce serait sympa si vous pouviez me filer un coup de main pour régler ce souci de débutant…
J’ai lu consciencieusement cette page php.net/manual/en/function.header.php mais je n’y vois pas plus clair !
J’ai peur de passer plusieurs jours là dessus sans votre aide :confused:

Je crois avoir un début de piste[code]echo ’';[/code]Pourriez-vous me dire ce que vous en pensez ?

Le plus souvent, tu as une redirection en Javascript :

<script type="text/javascript"> function redirect(url) { window.location=url; } setTimeout("redirect(turlututuchapeaupointu.html)",1300); // Facultatif, ça permet d'avoir le temps de lire le message </script>

Sinon, une méthode que je n’ai pas encore eu l’occasion d’essayer, et qui me paraît beaucoup plus propre (Plus de détails) :

[code]<?php
ob_start();
?>
… blablabla …

<?php header('Refresh: 3; url=ta_page'); ob_flush(); ?>[/code]

Merci PH`,
Mais ça ne fonctionne pas… Je ne m’y prend pas bien surement !

Par contre cette commande fonctionne bien[code]if ($success){
echo ‘

All is well, your e–mail has been sent.

’;
echo ’';
}[/code](je suis pas peu fier :laughing: mon premier PHP !)

Il me reste la pause à insérer, mais je n’y arrive pas… Le message (All is well, your e-mail has been sent.) apparait une micro-seconde et je suis redirigé…

J’ai essayé avec la commande “sleep(10)”, j’ai essayé de l’insérer un peu partout… Pas d’effet !

EDIT : Pas pause, mais sleep (désolé)

EDIT2 : La page avec le formulaire reste affichée le nombre de secondes prévue dans la commande “sleep”, mais pas le message (All is well…) !

Je l’ai :smiley: :smiley: :smiley: Trop cool…

[code]if ($success){
echo ‘

All is well, your e–mail has been sent.

’;

flush(); // affichage du résultat du code php 1
sleep(5); //repos 5 secondes

echo ’';
}[/code]
Il fallait rajouter “flush”…

La fonction header doit être appelée avant toute écriture dans la page.
Dans ce message il te dis qu’avant ton appel à la fonction header tu as déjà écris et cette écriture ce fait dans le fichier contact.php à la ligne 45.

Tout ceci est logique. Ta page a déjà commencé à être envoyée. La première chose envoyée c’est l’entête. Tu peux pas le modifié une fois envoyé.

[quote=“MisterFreez”]Tout ceci est logique. Ta page a déjà commencé à être envoyée. La première chose envoyée c’est l’entête. Tu peux pas le modifié une fois envoyé.[/quote] Oui, c’est ce que j’ai fini par comprendre en lisant et relisant les manuels et forums… Merci.

J’aurai du commencer par ça avant de poster, mais j’étais un peu perdu…
Je suis comme Dr House, j’ai besoin d’avoir des interlocuteurs pour trouver la solution… :laughing: :laughing: :laughing:

Euh, ce serait pas plutôt :

[quote=“lol”]Je suis comme Dr House, j’ai besoin de charcuter mes patients jusqu’à trouver la bonne solution… :laughing: :laughing: :laughing:[/quote] :question:

Euh, ce serait pas plutôt :

[quote=“lol”]Je suis comme Dr House, j’ai besoin de charcuter mes patients jusqu’à trouver la bonne solution… :laughing: :laughing: :laughing:[/quote] :question:[/quote]Je ne suis pas assez bon charcutier… Pauvre “code” ! :wink:

tu as le même genre de choses qui arrivent quand tu utilises des sessions (avec session_start, session_regenerate_id, etc etc etc …). Pour ce qui est des sessions, mettre ces méthodes au tout début de ton code est suffisant.

Si tu le souhaites tu peux aussi passer par une balise meta il me semble ( la voila : ), qui ira se placer dans le head de ton code html si je me rappelle bien. Ca evite de sortir le js si tu n’en as besoin que pour ça, et te permet éventuellement de te faire un template pour toutes les pages qui auront besoin d’une redirection.

Si je ne me trompe pas session_start() (et dérivé), c’est différent. Celle-ci doit se trouver en toute première instruction avant quoi que ce soit d’autre. Alors que header() se place avant la première écriture (premier echo, print, print_r,…).

Ensuite en effet header ne fait que manipuler les entêtes HTML.

oui sans doute, pour le coup je n’ai jamais eu à manipuler de headers via php et vu le message d’erreur (très familier pout le coup :stuck_out_tongue:) je pensais que c’était pareil

[quote=“Hoshin”]Si tu le souhaites tu peux aussi passer par une balise meta il me semble ( la voila : ), qui ira se placer dans le head de ton code html si je me rappelle bien.[/quote] Merci je regarderais ça. :smt006
Je ne suis pas un fan du js (je le bloque systématiquement quand je navigue… et le débloque si nécessaire), mais j’ai trouvé une solution qui fonctionne (trop content de n’avoir passé qu’une 1/2 journée là-dessus…) :mrgreen:

le js peut être très pratique dès lors que tu veux des pages avec beaucoup d’interactions. Mais si ce n’est pas le cas effectivement …
En ce moment je suis en stage pour une société qui développe un pilote de plateforme de services façon “travail collaboratif”, le jour ou le JS est hs on s’en rend compte :stuck_out_tongue:

le premier truc a faire avec le JS serait de tester si le navigateur client le gère, sinon le site qui en utilise beaucoup sera inexploitable.

Ou s’assurer qu’il n’est pas possible de faire la même chose sans JS :slightly_smiling:

toutafay.

gros besoin d’asynchrone donc difficile de se passer d’ajax à priori et il faut que ce qui permet de faire tourner le truc soit présent sur la plupart des navigateurs sans grosse intervention de l’utilisateur aussi.

Le JS est plus interopérable que les applet java ou flash qui nécessite une installation supplémentaire. Le problème c’est quand on veut faire de l’accessibilité (pour les malvoyants par exemple).