Pour éviter ce message d'avertissement, il existe une technique simple : la redirection, qu'on pourrait appeler dans le cas présent "le rafraîchissement forcé". En effet, une fois qu'un visiteur quelconque enverra un formulaire, nous allons, avant de traiter le contenu de ce dernier, rafraîchir la page où le formulaire a conduit le visiteur (celle qui est indiquée dans
<form action="">
), ce qui aura pour effet de "contourner" le message d'avertissement : le principe est aussi simple que cela.
Il existe plusieurs méthodes pour rediriger un visiteur : en HTML, en Javascript, et bien sûr en PHP. Nous ne verrons que cette dernière, les autres étant réservées à des situations précises.
En PHP, il n'existe aucune fonction toute faite pour rediriger. Mais nous pouvons utiliser à bon escient la fonction
header()
, dont le rôle est d'envoyer au navigateur des "en-têtes http". Rassurez-vous, elle est déjà toute préparée ; nous allons juste utiliser une syntaxe bien précise de cette dernière, qui est :
Code : PHP1
2
3 | <?php
header('Location: monFichier.php');
?>
|
Faites toujours bien attention à ne jamais oublier le Location:
, sinon vous pourriez avoir de belles surprises. Notez aussi que vous n'êtes pas non plus forcés de coller les deux points au mot, ni de mettre un espace après ; ce sont juste des habitudes que j'ai prise.
Mais cette fonction est un peu capricieuse, surtout de la façon dont nous nous en servons. En effet, il faut retenir trois choses, qui seront vraiment déterminantes dans la suite de ce tuto.
- D'une, la fonction header()
est allergique à tout code HTML. En d'autres termes, elle fonctionne de la même façon que set_cookie()
: il ne faut placer aucun code HTML ni aucun texte avant son utilisation (pour plus de précisions, lisez la description de la fonction header()
que fournit la documentation). Il faudra donc l'utiliser au début de nos scripts.
- Deuxièmement, nous devrons toujours placer un exit;
juste après son utilisation. En effet, lorsque PHP lit le script, il voit la fonction header()
et se dit : "Je retiens qu'après l'exécution totale du script, il faudra que je redirige notre visiteur sur telle page". Ainsi, en plaçant un exit;
juste après, nous précisons à PHP que le script s'arrête là, et qu'il ne faut pas regarder ce qui suit.
- Pour finir, en redirigeant, la fonction header()
va vider les variables $_POST
et $_FILES
qui constituent notre formulaire. Pour éviter de perdre ces informations, nous allons les sauvegarder dans des variables de session (par exemple, $_SESSION['sauvegarde']
et $_SESSION['sauvegardeFILES']
) avant la redirection, et les "réinjecter" ensuite dans d'autres variables. Pour éviter que vous n'ayez à changer toute la structure de vos fichiers, nous allons appeler ces variables $_POST
et $_FILES
.
Petite parenthèse au passage : vous vous demandez sûrement pourquoi j'introduis ici $_FILES
, alors que, pourtant, c'est bien $_POST
qui contient notre formulaire. En fait, $_FILES
a comme contenu des informations relatives aux éventuelles images envoyées avec le formulaire. Vous pouvez revoir ce chapitre si vous ne vous en souvenez plus.
Afin que tout soit bien clair dans vos esprits, voici un petit schéma qui résume ces trois points et la façon de les appliquer à nos codes. Lisez-le bien, il résume presque à lui seul tout le tuto, ou du moins la partie théorique.