Redirection de page après formulaire - PHP - Programmation
Marsh Posté le 11-01-2007 à 09:18:59
Il ne faut jamais envoyer quelque chose au client avant de toucher aux headers, c'est logique. Pour ça, il y a l'output buffering qui permet de tout stocker dans un buffer. Ou alors coder proprement D'abord tester les données, et suivant le résultat inclure le code HTML à générer.
Accessoirement, tu utilises un header Location, qui va utiliser un '302 Permanently Moved', ce qui n'est pas conseillé, suivant la recommendation HTTP 1.1. Il faut utiliser un 303 See Other, valide après une requête POST. De plus, l'url doit être absolue :
Code : |
Marsh Posté le 11-01-2007 à 09:29:13
Merci pour les infos. Enfait J'ai compris le principe qu'il ne fallais rien envoyer avant que ce soit redirigé, mais là, je dois tester si les données sont valides. Si elles y sont j'accède à ma page (le reste du code), soit je redirige vers redir.php. Donc je suis obligé de mettre quelque chose avant le header().
Citation : <html> |
Puisque je fais un test avant l'éventuel redirection, comment puis-je faire ?
Marsh Posté le 11-01-2007 à 10:05:45
tease_party a écrit : mais là, je dois tester si les données sont valides. Si elles y sont j'accède à ma page (le reste du code), soit je redirige vers redir.php. Donc je suis obligé de mettre quelque chose avant le header(). |
C'est qu'il y a un défaut de conception... Dès qu'on envoie quelque chose (un simple <html> suffit), les headers sont envoyés, donc on ne peut plus y toucher. Le truc pas normal , c'est que t'affiche un <html>, alors que tu ne sais pas encore si les données sont valides ou pas, donc problème
On peut reformuler tout ça en :
Code :
|
Marsh Posté le 11-01-2007 à 10:26:10
Ah oui j'avais pas vue ca comme ca . Enfait j'avais testé en mettant le HTML après le php, mais ca ne fonctionnait pas non plus. J'avais lu sur le net que c'était à cause de l'utilisation du echo dans mon if. Seulement, même avec ta solution, le truc ne fonctionne pas:
Citation : |
Citation : Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root1'@'localhost' (using password: NO) in /var/www/ouverture.php on line 2 |
Es que ca serai pas du à l'erreur générée par le mauvais login ou mdp ? Puisque le message: Warning: mysql_connect() [func... est écrit automatiquement peut être que sa écrit dans le header, et du coup sa fait pas la redirection . Es qu'il existe un moyen de ne pas afficher ce message d'erreur ?
Sinon je ne comprend pas car il n'y a absolument rien devant le <?php, même pas un saut de ligne, un caractère ... rien
Marsh Posté le 11-01-2007 à 10:27:47
Et voilà L'erreur cause l'envoi des headers Là on rentre dans la gestion des erreurs plus complexe :
Marsh Posté le 11-01-2007 à 10:44:30
Bon alors là c'est la merde, j'ai regardé sur le net je trouve rien pour désactiver les messages "warning" de mysql. Le code est compliqué à mettre en oeuvre pour dégager le message qui me gène ?
Marsh Posté le 11-01-2007 à 12:31:32
raaa... au lieu de chercher à ne pas afficher les erreurs, cherche plutôt à les résoudre... ici c'est juste un soucis d'autorisation d'accés à ta bdd... résoud ça et tu n'auras plus de soucis
sinon pour désactiver le revois d'erreurs 2 soluces.... :
1 - tu as accés au serveur, et tu peux modifier son fichier d'initialisation... ben tu modifie la ligne error reporting il me semble...
2 - tu fais un ini_set sur justement l'error reporting.. voir ICI
Ce que j'ais pour la phase de test :
Code :
|
Pour ma phase en prod :
Code :
|
Marsh Posté le 11-01-2007 à 09:08:14
Salut,
Je dois me connecter à mon compte via un formulaire. Quand les données entrées ne sont pas valide j'aimerai que l'utilisateur soit redirigé vers une autre page. Seulement, j'ai l'erreur suivante:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root1'@'localhost' (using password: NO) in /var/www/ouverture.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /var/www/ouverture.php:2) in /var/www/ouverture.php on line 6
Donc la première est normale, puisque le login est mauvais OK, mais la deuxième j'ai du mal à piger. Il me dit que quelque chose à déjà était envoyé dans le header. Voici le code:
<html>
<?php $connexion = mysql_connect($_POST["serveur"], $_POST["utilisateur"], $_POST["password"]);
if ($connexion>0)
echo "<br />Connection effectuee le <font color=\"orange\"><b>".date("d/m/y - H:i:s" )."</b></font>";
else
header("location: redir.php" );
exit;?>
<head>...
Si je met la redirection avant tout forcément elle fonctionne, mais dans mon cas précis je suis obligé de vérifier si les données entrées dans le formulaire sont bonnes. Donc comment pourrais-je faire pour vérifier les données et rediriger si celles ci ne sont pas bonnes ?