Redirection PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redirection PHP

par Ryle » 01 déc. 2006, 11:19

Ben non, au contraire, tu as ta réponse :)

Si ton script php ne commence qu'à la ligne 9, c'est que les 8 lignes précédentes ne sont pas du php mais un flux html, qui est donc envoyée immédiatement au navigateur.

Il n'est donc plus possible d'envoyer un entête (header) puisque des données ont déjà commencé à être envoyées :)

Pour pouvoir utiliser un header(), un session_start() ou un set_cookie() il faut absolument qu'aucune donnée ne soit envoyée au navigateur. Pas de balise html, pas de texte, pas d'espace ou de retour à la ligne... uniquement du php ! :)

Ton script doit donc commencer par <?php dès la ligne 0 (voire -1 ;)), et ne dois faire ni print, ni echo, ni se refermer ("?>") avant que tu ne place le header :)

par franckfi » 30 nov. 2006, 18:58

J'ai regardé la ligne 9 du fichier contact, et en fait, c'est le début du script php <?PHP

Je suis largué :(

par Ryle » 30 nov. 2006, 17:56

Par ailleurs elle nécessite qu'aucun code html n'ait été envoyé au navigateur avant son appel (que ce soit via un echo, un print, voire même un espace ou un retour à la ligne en dehors des balises <?php ?>
Regarde aux allentours de la ligne 9 du fichier contact.php :)

Par ailleurs, header est une fonction de type void, elle ne retourne donc rien, inutile donc d'essayer de récupérer une valeur retour dans ton $uploadinfo :)

Redirection PHP

par franckfi » 30 nov. 2006, 17:47

J’ai donc supprime l’instruction echo, effectivement c’est mieux (merci Ryle).
Modification :
$uploadinfo = '<p class="erreur">Upload Réussi</p>';

Par : $uploadinfo = header('Location: confirmation.html');

Et j’ai l’erreur suivante :
Warning: Cannot modify header information - headers already sent by (output started at k:\program files\easyphp1-8\www\site\contact.php:9)

par Ryle » 30 nov. 2006, 17:28

Si tu jette un coup d'oeil à la doc de la fonction header() tu verras qu'elle effectue simplement la redirection vers la page demandée. Il est donc inutile de faire un echo devant :) (et probablement source de problème)

Par ailleurs elle nécessite qu'aucun code html n'ait été envoyé au navigateur avant son appel (que ce soit via un echo, un print, voire même un espace ou un retour à la ligne en dehors des balises <?php ?> :)
<?php

...

header('Location: confirmation.html'); // redirection
exit(); // interrompt le code (inutile d'aller plus loin puisque l'on est redirigé :))
?>

par DocType » 30 nov. 2006, 17:25

As tu un message d'erreur ?
Ton script affiche t'il du texte avant le header ?

Redirection PHP

par franckfi » 30 nov. 2006, 17:24

Bonjour,

Je souhaiterai modifier un script de formulaire qui à la base confirme l’envoi du message par le biais des instructions suivantes:
$uploadinfo = '<p class="erreur">Upload Réussi</p>';

echo $uploadinfo;
echo '<p class="erreur">Formulaire envoyé; !</p>';

J’ai donc essayé de le modifier par une redirection
echo header('Location: confirmation.html');

Mais je crois que c’est la variable $uploadinfo qui me pose problème.

Je suis vraiment débutant en php, pourriez vous m’aider.

Merci d’avance.