Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SOS debutant : bloque sur header location

23 réponses
Avatar
Ben74
Bonjour à tous

je débute en php et je dois, suite à un formulaire d'authentification,
rediriger un visiteur vers une URL
j'ai essayé avec header("location:....) et ça ne fonctionne pas
voici le code


// connexion à la base de données
$db = mysql_connect ('xxxx' , 'yyyyy' , 'zzzzz') or die ( ' Erreur de
connexion '.mysql_error());
mysql_select_db('uuuuuuuu', $db) or die('Erreur de
sélection'.mysql_error());

// vérification des données du formulaire
$sql = "Select * from Users where NOM_US='".$nom."' and PRE_US='".
$prenom."'";
$result = mysql_query($sql) or die("Query failed");
$valide = false;
while ($line = mysql_fetch_assoc($result))
{
$valide = true;
}
mysql_free_result($result);
if($valide == true)
{
////////////////// c'est là que ça plante ////////////////////////
header("Location: test.php");
}
else
{
echo("BAD CHOICE !");
return false;
}
/ Fermeture de la connexion
mysql_close($db);


pouvez vous m'indiquer une piste ?
merci d'avance

BV

10 réponses

1 2 3
Avatar
Emmanuel Petit
Il est préférable de créer un buffer de sortie pour utiliser la fonction
header. En effet, il ne faut pas que des données aient été déjà envoyés
au navigateur par le script.
pour ce faire, voici la méthode que j'utilise:
En toutdébut de votre page php utilisez la fonction suivante:

//début de session
ob_start();

dans votre script à la ligne précédent votre function header :
//rediriger
ob_end_clean();
header("Location: test.php");




Enfin a la fin de votre script :

//vider le buffer
ob_end_flush();

Ca marche très bien dans tous mes scripts, mais si vous n'avez pas
compris, faites le moi savoir.
Bonne chance....



Avatar
Olivier Miakinen

je débute en php et je dois, suite à un formulaire d'authentification,
rediriger un visiteur vers une URL
j'ai essayé avec header("location:....) et ça ne fonctionne pas


Ah, « ça ne fonctionne pas ». Mais parmi les zillions de façons
possibles de « ne pas fonctionner », quelle est la tienne ?

Par exemple :
1) Rien ne s'affiche.
2) Tu as un message d'erreur (lequel ?).
3) Les « é » sont transformés en « é ».
4) Ton écran explose.
5) Tes toasts sont trop grillés.
6) Le script tourne pendant une minute sans résultat.
7) Ta femme t'a quitté.
8) etc.

Vu que tu utilises la fonction header (avec comme paramètre un truc
interdit par la noreme HTTP, mais passons...), as-tu déjà lu la FAQ ?

http://faqfclphp.free.fr/#rub2.11
http://faqfclphp.free.fr/#rub2.12

voici le code


Sans une description de la façon dont « ça ne fonctionne pas », c'est un
peu inutile.

Avatar
Ben74
On 23 juil, 10:21, Emmanuel Petit wrote:
Il est préférable de créer un buffer de sortie pour utiliser la fonction
header. En effet, il ne faut pas que des données aient été déjà envoyés
au navigateur par le script.
pour ce faire, voici la méthode que j'utilise:
En toutdébut de votre page php utilisez la fonction suivante:

//début de session
ob_start();

dans votre script à la ligne précédent votre function header :
//rediriger
ob_end_clean();

header("Location: test.php");




Enfin a la fin de votre script :

//vider le buffer
ob_end_flush();

Ca marche très bien dans tous mes scripts, mais si vous n'avez pas
compris, faites le moi savoir.
Bonne chance....


je vais essayer ! même si j'avoue ne pas tout saisir, je vais
également aller regarder l'aide PHP pour en savoir plus
sur la notion de buffer
merci bq pour votre reponse, je vous tiens au courant pour vous dire
si cela fonctionne




Avatar
Ben74
On 23 juil, 10:36, Olivier Miakinen <om+ wrote:



je débute en php et je dois, suite à un formulaire d'authentification,
rediriger un visiteur vers une URL
j'ai essayé avec header("location:....) et ça ne fonctionne pas


Ah, « ça ne fonctionne pas ». Mais parmi les zillions de façons
possibles de « ne pas fonctionner », quelle est la tienne ?

Par exemple :
1) Rien ne s'affiche.
2) Tu as un message d'erreur (lequel ?).
3) Les « é » sont transformés en « é ».
4) Ton écran explose.
5) Tes toasts sont trop grillés.
6) Le script tourne pendant une minute sans résultat.
7) Ta femme t'a quitté.
8) etc.

Vu que tu utilises la fonction header (avec comme paramètre un truc
interdit par la noreme HTTP, mais passons...), as-tu déjà lu la FAQ ?

http://faqfclphp.free.fr/#rub2.11http://faqfclphp.free.fr/#rub2.12

voici le code


Sans une description de la façon dont « ça ne fonctionne pas », c'est un
peu inutile.



Bonjour
j'aime le coté sarcastique du message....
quand je dis que ca ne fonctionne pas c'est que j'ai un écran vide
maintenant concernant l'interdiction et la norme, je débute, je sais
que j'ai encore
pleind e choses à lire et à découvrir, mais l'euphorie du débutant à
fait que je me suis
lancé sur des lignes de codes pour tester
désolé de ne pas respecter les cadres et les standards

BV


Avatar
Olivier Miakinen

Ah, « ça ne fonctionne pas ». Mais parmi les zillions de façons
possibles de « ne pas fonctionner », quelle est la tienne ?


j'aime le coté sarcastique du message....


;-)

quand je dis que ca ne fonctionne pas c'est que j'ai un écran vide


C'est déjà une indication, et même plusieurs :
- tu n'as pas de message d'erreur ;
- et le navigateur n'affiche rien.

Mais même dans ce cas là tu devrais commencer par regarder le code HTML
généré (View/Page source) car il y a sûrement des choses à voir.

maintenant concernant l'interdiction et la norme, je débute, je sais
que j'ai encore
pleind e choses à lire et à découvrir, mais l'euphorie du débutant à
fait que je me suis
lancé sur des lignes de codes pour tester
désolé de ne pas respecter les cadres et les standards


En quelques mots, le header("Location: ...") ne devrais jamais servir à
rien d'autre qu'à rediriger d'un site vers un autres, et pas entre deux
pages du même site. D'ailleurs il devrait toujours y avoir une URL
absolue (du genre http://www.example.com/test.html) et jamais une URL
relative (telle que test.html).

Par ailleurs, merci de ne rien citer de plus que ce qui est utile quand
tu réponds à un message sur usenet. Quelques lignes de citations en
plus, et ton article aurait été refusé par la modération pour citation
excessive.

Cf. <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/&gt;.


Avatar
Ben74
On 23 juil, 10:21, Emmanuel Petit wrote:
Il est préférable de créer un buffer de sortie pour utiliser la fonction
header. En effet, il ne faut pas que des données aient été déjà envoyés
au navigateur par le script.
pour ce faire, voici la méthode que j'utilise:
En toutdébut de votre page php utilisez la fonction suivante:

//début de session
ob_start();

dans votre script à la ligne précédent votre function header :
//rediriger
ob_end_clean();

header("Location: test.php");




Enfin a la fin de votre script :

//vider le buffer
ob_end_flush();

Ca marche très bien dans tous mes scripts, mais si vous n'avez pas
compris, faites le moi savoir.
Bonne chance....


J'ai essayé mais ca ne marche pas
toujours une page blanche




Avatar
Bruno Desthuilliers
(snip)
En quelques mots, le header("Location: ...") ne devrais jamais servir à
rien d'autre qu'à rediriger d'un site vers un autres, et pas entre deux
pages du même site.


Chapitre et verset, s'il te plait ?

Moi, ce que je vois dans la rcf, c'est:

14.30 Location

The Location response-header field is used to redirect the recipient
to a location other than the Request-URI for completion of the
request or identification of a new resource. For 201 (Created)
responses, the Location is that of the new resource which was created
by the request. For 3xx responses, the location SHOULD indicate the
server's preferred URI for automatic redirection to the resource. The
field value consists of a single absolute URI.

Location = "Location" ":" absoluteURI

Qui ne dit en rien que l'URI doivent appartenir à un autre domaine - au
contraire, cf la partie sur le code 201, ainsi que cet autre extrait:

9.5 POST
(...)
If a resource has been created on the origin server, the response
SHOULD be 201 (Created) and contain an entity which describes the
status of the request and refers to the new resource, and a Location
header (see section 14.30).


qui pour ce que j'en comprend implique au contraire qu'il est non
seulement autorisé mais dans certaines circonstances *recommandé*
d'utiliser un header Location avec une URI pointant sur le même domaine.

nb : http://www.faqs.org/rfcs/rfc2616


D'ailleurs il devrait toujours y avoir une URL
absolue (du genre http://www.example.com/test.html) et jamais une URL
relative (telle que test.html).


Là par contre on est d'accord. C'est d'ailleurs documenté dans la doc PHP.

http://fr.php.net/manual/en/function.header.php

Avatar
Olivier Miakinen
(snip)
En quelques mots, le header("Location: ...") ne devrais jamais servir à
rien d'autre qu'à rediriger d'un site vers un autres, et pas entre deux
pages du même site.


Chapitre et verset, s'il te plait ?


« La vie trépidante des livreurs de machine à laver », par John Gallet.

Quelques numéros de chapitre et verset se trouvent ici :
http://groups.google.fr/groups/search?q=livreur+author%3AGallet

Moi, ce que je vois dans la RFC, c'est:

[...]

qui pour ce que j'en comprend implique au contraire qu'il est non
seulement autorisé mais dans certaines circonstances *recommandé*
d'utiliser un header Location avec une URI pointant sur le même domaine.


J'avoue que j'ai fait un raccourci. Mais je ne me sentais pas le
courage de me lancer dans de longs développements au sujet de ces
cas de requêtes POST, vu que je suis persuadé qu'un débutant complet
tel que Ben74 (il le dit lui-même) n'est *pas* dans ce cas de figure.

Le jour où il sera suffisamment avancé pour être dans le cas que
tu soulignes, alors il aura lui-même compris les tenants et les
aboutissants du header("Location: ...") et il ne servira plus à rien
de le mettre en garde contre le « header("Location: test.php"); » !


Avatar
Kali

qui pour ce que j'en comprend implique au contraire qu'il est non
seulement autorisé mais dans certaines circonstances *recommandé*
d'utiliser un header Location avec une URI pointant sur le même domaine.




Bonjour !

Heu, pouvez-vous m'expliquer la différence entre une URL et une URI
s'il-vous-plaît ? Car j'ai beau regarder sur Google, j'avoue ne pas
comprendre le truc, bien qu'il y ait l'air d'y avoir une différence non
négligeable....

Je vous remercie d'avance ;-)


Avatar
Bruno Desthuilliers
(snip)
En quelques mots, le header("Location: ...") ne devrais jamais servir à
rien d'autre qu'à rediriger d'un site vers un autres, et pas entre deux
pages du même site.
Chapitre et verset, s'il te plait ?



« La vie trépidante des livreurs de machine à laver », par John Gallet.

Quelques numéros de chapitre et verset se trouvent ici :
http://groups.google.fr/groups/search?q=livreur+author%3AGallet



Tu m'excusera, mais entre les opinions personnelles de John (avec tout
le respect que j'ai pour lui) et la RCF, il y a une marge. La référence,
jusqu'à preuve du contraire, c'est la RFC.

(snip)
qui pour ce que j'en comprend implique au contraire qu'il est non
seulement autorisé mais dans certaines circonstances *recommandé*
d'utiliser un header Location avec une URI pointant sur le même domaine.


J'avoue que j'ai fait un raccourci. Mais je ne me sentais pas le
courage de me lancer dans de longs développements au sujet de ces
cas de requêtes POST,


Ce qui n'était pas forcément nécessaire.
<OP>
Outre ton problème effectif (

vu que je suis persuadé qu'un débutant complet
tel que Ben74 (il le dit lui-même) n'est *pas* dans ce cas de figure.


Non, il est dans le cas de figure d'une redirection après un login. Que
la redirection soit ou non la meilleure solution dans ce cas est une
question ouverte - et à laquelle il n'y a probablement pas de réponse
absolue puisque ça dépend aussi de l'architecture applicative. En tout
état de cause, ce n'est AMHA pas une raison (bien au contraire) pour lui
présenter comme vérité d'évangile un avis personnel qui contredit le
standard.

mes deux centimes.



1 2 3