Php header

Résolu/Fermé
headsplinter - 3 févr. 2010 à 14:33
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 5 févr. 2010 à 09:17
Bonjour,

j'ai créé un formulaire dans une page html et l'action lorsque l'utilisateur clique sur valider est d'executer une page php.
Dans cette page php je souhaite avant toute chose vérifier que tous les champs sont bien remplies et que le pseudo n'est pas deja utilisé, dans le cas contraire, je souhaite recharger la page formulaire.
Voila mes codes php qui font ces vérifications :

if( empty($Pseudo) or empty($password) or empty($password_conf) {
header("Location: http://127.0.0.1/form_inscription.html");
} else {}

Ce code n'est pas bon apparemment mais je ne vois pas ou est l'erreur, lorsque je supprime cette partie, j'ai un problème avec le code suivant :

if(mysql_num_rows($result) != 0)
{
echo "Ce pseudo existe deja";
header("Location: http://127.0.0.1/form_inscription.html");
}
else...

Or voila le message d'erreur que j'obtiens lorsque j'entre un pseudo qui existe deja :

Ce pseudo existe deja
Warning: Cannot modify header information - headers already sent by (output started at C:\Users\Fnac\Desktop\site\ftp\accueil_connecte.php:121) in C:\Users\Fnac\Desktop\site\ftp\accueil_connecte.php on line 189



Merci de m'éclairer si vous le pouvez.
A voir également:

10 réponses

Bonjour
if( empty($Pseudo) or empty($password) or empty($password_conf) {
Il te manque une parenthèse ) juste avant l'accolade {

echo "Ce pseudo existe deja";
header("Location: http://127.0.0.1/form_inscription.html");

Ceci ne peut pas marcher. Quand tu fais ton premier echo qq chose, le serveur envoie d'abord les en-têtes HTTP puis ce qu'il y a dans l'echo. Tu ne peux pas demander à renvoyer un autre header après, c'est le protocole HTTP qui est comme ça : d'abord le header, puis les données. D'ailleurs dans ton cas ça ne veut pas dire grand chose, tu demandes à la fois d'afficher quelque chose et de changer de page
0
Merci beaucoup pour ta reponse rapide.
Oui en fait avant de mettre le header j'avais mis le echo pour voir si ma boucle marchait bien, ensuite j'ai rajouter le header, j'aurai du alors supprimer le echo.

Merci encore
0
Par contre j'ai toujours un problème, je fais mes deux vérifications dans une seule boucle :
if(mysql_num_rows($result) != 0 or empty($Pseudo) or empty($password) or empty($password_conf))
{
header("Location: http://127.0.0.1/form_inscription.html");
}
else

Mais le coup du header ne marche toujours pas , il me dit qu'il ne peut pas recharger le header, qu'un header a deja été envoyé. JE pense que je ne met pas le code la ou il faut. Je l'ai mis dans <body> peut etre qu'il faut que je mette ces vérifications dans <head> non? Je ne sais pas trop comment s'utilise header.
0
Tu ne peux mettre ce code ni dans le body, ni dans le head. Comme j'ai essayé de te l'expliquer plus haut, dès que tu as envoyé le moindre octet au client (dès le premier echo ou le premier caractère en dehors des balises PHP) tu ne peux plus envoyer de header HTTP. Donc plus de session_start(), setcookie() ni de header()
Tu dois mettre ce code avant tout envoi de données au client.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup pour ces explications.
désolé pour ma noobitude lol je progresse petit a petit
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
3 févr. 2010 à 18:18
juste un petit ajout. Il est en effet normalement impossible de renvoyer des headers HTTP quand on a commencé à envoyer le contenu de la page.

cependant, apache a un parametre permettant d'activer le buffer de sortie, qui permet de modifier les headers alors que l'envoi de la page vers le buffer a commencé. mais cette methode de programmation n'est pas propre car le bon fonctionnement de la page dépendra trop des reglages du serveur.

Bonne journée
0
Alors s'il est impossible d'envoyer des headers quand on a commencer a afficher le contenu de la page, comment puis-je vérifier que mon utilisateur a rempli tous les champs du formulaires avant de charger la page d'après? Il faut que je fasse cette vérification dans la page formulaire?

Merci de m'aider
0
en fait c'est bon j'ai enfin compris ce que tu voulais dire, j'ai mis tout mon code php pour vérifier que les champs étaient bien remplis juste entre la balise <html> et la balise <head>. Et les headers fonctionnent très bien.

Merci de ton aide
0
Non, tu n'as pas dû tout comprendre. Il fallait le faire AVANT la balise <HTML>. Ça n'est pourtant pas compliqué, avant TOUT envoi de données au client. donc avant <HTML>
Ça marche quand même grâce à la bufferisation dont parlait Nabla's sans doute. Mais comme il le dit, Le bon fonctionnement de ta page dépend trop des réglages du serveur. Cette page risque de ne plus marcher si ton hébergeur touche à ce réglage, ou si tu changes d'hébergeur.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
5 févr. 2010 à 09:17
la balise <head> c'est le header HTML

la reponse http complete, ca ressemble plutoto a ca:

HTTP/1.0 200 OK
Date : Sat, 15 Jan 2000 14:37:12 GMT Server : Microsoft-IIS/2.0
Content-Type : text/HTML
Content-Length : 1245
Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT


<html>
<HEAD>
BLABLALBA
<HEAD>

<body>
blabla
</body>
</html>


en gras je t'ai mis le header http, et en italique le header html
consultes :
https://www.commentcamarche.net/informatique/technologies/26181-protocole-http-principe-de-fonctionnement/
fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol
0