[PHP] Problème de session/redirection
Résolu/Fermé
A voir également:
- [PHP] Problème de session/redirection
- Easy php - Télécharger - Divers Web & Internet
- L'url suivante, censée aboutir à un article, donne lieu à une redirection indiquant que la page n'a pas été trouvée. retrouvez la page recherchée. reportez le titre de l’article et son auteur. - Forum Microsoft Edge / Internet Explorer
- Estelle vient de verrouiller sa session d’ordinateur. que peut-on dire ? ✓ - Forum Windows
- Retour a la ligne php ✓ - Forum PHP
- Facebook session expirée ✓ - Forum Facebook
10 réponses
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
14 janv. 2008 à 22:46
14 janv. 2008 à 22:46
Bonsoir,
pour les contenu de tes apppels à header(), tu devrais tenter de mettre un L majuscule et un espace APRES les deux points (:)
Bref, remplacer les :
par des
C'est important car ça va faire partie du protocole HTTP, en fait.
Et puis si ça marche toujours pas, au lieu d'un "header...", fais un "echo 'blablabla'" pour être sûr de l'endroit où la programme s'oriente.
Raph
pour les contenu de tes apppels à header(), tu devrais tenter de mettre un L majuscule et un espace APRES les deux points (:)
Bref, remplacer les :
header("location:script.php");
par des
header("Location: script.php");
C'est important car ça va faire partie du protocole HTTP, en fait.
Et puis si ça marche toujours pas, au lieu d'un "header...", fais un "echo 'blablabla'" pour être sûr de l'endroit où la programme s'oriente.
Raph
Merci, Raph, pour ta réponse.
J'ai modifié le code comme tu l'indiques, mais ça ne donne rien de plus. Par contre, je ne suis pas sûre d'avoir compris où je devais placer le echo. J'ai fait fait coimme ça :
Mes pages restent blanches.
Domi
J'ai modifié le code comme tu l'indiques, mais ça ne donne rien de plus. Par contre, je ne suis pas sûre d'avoir compris où je devais placer le echo. J'ai fait fait coimme ça :
<?php session_start(); //cas où le champ nom a été rempli if(!empty($_POST['nom_client'])){ // Cas où il y a erreur de saisie sur le nom if(!eregi('#^[^-][[:alpha:]-][^-]+$#',$_POST['nom_client']) OR !eregi('[^0-9.^()[]$+*|/\{}]',$_POST['nom_client']){ $_SESSION['err_nom_invalide'] = "Veuillez entrer un nom valide"; header("Location: commande_restau.php"); echo "blibli"; exit(); } // cas où tout est bon else { $_SESSION['err_nom_invalide'] = ""; header("Location: ttt_restau.php"); echo "blublu"; exit(); } } // sinon, cas où le champ nom n'a pas été rempli else{ $_SESSION['err_nom_abs'] = "Veuillez entrer votre nom"; header("Location: commande_restau.php"); echo "blabla"; exit(); } ?>
Mes pages restent blanches.
Domi
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
15 janv. 2008 à 11:04
15 janv. 2008 à 11:04
En fait, les echo, c'est fait pour remplacer les "header(...)" de manière à voir quelque chose affiché vu qu'avec un header, tu ne vois rien.
Mais en l'état actuel de ton code, comme tu ne vois rien, c'est que les instructions header(...) ne sont jamais éxécutées!
Tu as enlevé l'affichage des erreurs ?
En fait, je viens de mettre le code sur un serveur et ça plante. Juste une bête erreur de parenthèse...
Je te remets le code sans erreur (et sans les "echo()") :
Mais en l'état actuel de ton code, comme tu ne vois rien, c'est que les instructions header(...) ne sont jamais éxécutées!
Tu as enlevé l'affichage des erreurs ?
En fait, je viens de mettre le code sur un serveur et ça plante. Juste une bête erreur de parenthèse...
Je te remets le code sans erreur (et sans les "echo()") :
<?php session_start(); //cas où le champ nom a été rempli if(!empty($_POST['nom_client'])){ // Cas où il y a erreur de saisie sur le nom if(!eregi('#^[^-][[:alpha:]-][^-]+$#',$_POST['nom_client']) OR !eregi('[^0-9.^()[]$+*|/\{}]',$_POST['nom_client'])){ $_SESSION['err_nom_invalide'] = "Veuillez entrer un nom valide"; header("Location: commande_restau.php"); exit(); } // cas où tout est bon else { $_SESSION['err_nom_invalide'] = ""; header("Location: ttt_restau.php"); exit(); } } // sinon, cas où le champ nom n'a pas été rempli else{ $_SESSION['err_nom_abs'] = "Veuillez entrer votre nom"; header("Location: commande_restau.php"); exit(); } ?>
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
15 janv. 2008 à 12:05
15 janv. 2008 à 12:05
Tes expressions régulières me paraissent un peu étranges, tu les as testées ?
C'est toi qui les as faites ?
Raph
C'est toi qui les as faites ?
Raph
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ta correction. C'est bon, plus de pages blanches ! J'ai mis du temps à trouver cette fichue parenthèses qui manquait !
Pour les regex : il y a un problème. Isolés dans un petit script, ça semblait fonctionner, mais là, ça ne marche plus. Même quand je rentre un nom valide, je suis renvoyée au formulaire ("commande_restau.php").
Le 1er regex : '#^[^-][[:alpha:]-][^-]+$#'
Je l'ai trouvé sur un forum de commentcamarche. Il permet d'accepter un tiret à l'intérieur d'une chaîne de caractères, mais pas au début, ni à la fin.
Le 2e regex : '[^0-9.^()[]$+*|/\{}]'
Je l'ai créé moi-même. Il interdit les chiffres et certains caractères spéciaux.
Qu'est-ce qui te semble bizarre ?
Est-ce qu'on utilise autre chose habituellement, pour tester un champ nom ou prénom ?
J'ai une autre question :
Je veux tester aussi le champ prénom.
J'écris mon code comme ça (j'exclus pour le moment les regex) :
Dans mon fichier commande_restau.php, en dessous de l'input du nom, j'écris :
et en-dessous de l'input du prénom, je mets :
de façon à ce que les messages d'erreur s'affichent juste au-dessous des champs appropriés. Ca marche pour le champ nom, mais pas pour le champ prénom. C'est-à-dire que quand je laisse vides les 2 champs, le message s'affiche bien sous le champ nom, mais pas sous le champ prénom.. Où est l'errer ?
Domi
Pour les regex : il y a un problème. Isolés dans un petit script, ça semblait fonctionner, mais là, ça ne marche plus. Même quand je rentre un nom valide, je suis renvoyée au formulaire ("commande_restau.php").
Le 1er regex : '#^[^-][[:alpha:]-][^-]+$#'
Je l'ai trouvé sur un forum de commentcamarche. Il permet d'accepter un tiret à l'intérieur d'une chaîne de caractères, mais pas au début, ni à la fin.
Le 2e regex : '[^0-9.^()[]$+*|/\{}]'
Je l'ai créé moi-même. Il interdit les chiffres et certains caractères spéciaux.
Qu'est-ce qui te semble bizarre ?
Est-ce qu'on utilise autre chose habituellement, pour tester un champ nom ou prénom ?
J'ai une autre question :
Je veux tester aussi le champ prénom.
J'écris mon code comme ça (j'exclus pour le moment les regex) :
<?php session_start(); //cas où le champ nom a été rempli if(!empty($_POST['nom_client'])){ $_SESSION['err_nom_invalide'] = ""; header("Location: ttt_commande.php"); exit(); } // sinon, cas où le champ nom n'a pas été rempli else{ $_SESSION['err_nom_abs'] = "Veuillez entrer votre nom"; header("Location: commande_restau.php"); exit(); } //cas où le champ prenom a été rempli if(!empty($_POST['prenom_client'])){ $_SESSION['err_prenom_invalide'] = ""; header("Location: ttt_commande.php"); exit(); } // sinon, cas où le champ prenom n'a pas été rempli else{ $_SESSION['err_prenom_abs'] = "Veuillez entrer votre prénom"; header("Location: commande_restau.php"); exit(); } ?>
Dans mon fichier commande_restau.php, en dessous de l'input du nom, j'écris :
<? if(isset($_SESSION['err_nom_abs'])){ echo "<span style='color:red'>".$_SESSION['err_nom_abs']."</span><br />"; } ?>
et en-dessous de l'input du prénom, je mets :
<? if(isset($_SESSION['err_prenom_abs'])){ echo "<span style='color:red'>".$_SESSION['err_prenom_abs']."</span><br />"; } ?>
de façon à ce que les messages d'erreur s'affichent juste au-dessous des champs appropriés. Ca marche pour le champ nom, mais pas pour le champ prénom. C'est-à-dire que quand je laisse vides les 2 champs, le message s'affiche bien sous le champ nom, mais pas sous le champ prénom.. Où est l'errer ?
Domi
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
15 janv. 2008 à 16:31
15 janv. 2008 à 16:31
Le soucis, c'est que tu fais la redirection dès que tu constates une erreur, donc s'il y a 2 erreurs, seule la première est pris en compte.
Ce qu'il faudrait faire :
Les regexps que tu as sont vraiment pas terribles. En plus, tu mets des # (dièses) pour délimiter la regexp dans une fonction eregi, alors que c'est prévu pour preg_match uniquement.
L'expression régulière n°1 (#^[^-][[:alpha:]-][^-]+$# ) signifie (si on utilise preg_match et non pas eregi :
- début de ligne (^)
- suivi d'un caractère qui peut être n'importe quoi sauf un tiret [^-]
- suivi de un caractère alphabétique ou tiret [[:alpha:]-]
- suivi de n'importe quels caractères sauf tiret
- suivi de fin de ligne ($)
Un truc qui marche avec cette expression régulière alors que ça ne te convient pas : $a@:;::
Si tu veux un nom/prénom qui ne commence ni ne se termine par un tiret (-) :
preg_match('#\A:alpha:[[:alpha:]-]*:alpha:\Z#',$prenom)
1- utilisation de preg_match (donc les dièses qui entourent l'expression régulière sont considérés comme délimiteurs)
2- début de chaîne de caractère (\A)
3- un caractère alphabetique :alpha:
4- des caractères alphabétiques ou tiret [[:alpha:]-]*
5- un caractère alphabétique :alpha:
6- fin de chaîne de caractères
Pour le nom du client, que veux-tu de plus que pour le prénom ?
- des espaces
- des apostrophes
- toujours s'assurer qu'on commence et qu'on termine par une lettre
preg_match("#\A:alpha:[[:alpha:]-' ]*:alpha:\Z#",$nom)
et voilà.
Raph
Ce qu'il faudrait faire :
<?php session_start(); // Cas où le champ nom n'a pas été rempli if(empty($_POST['nom_client'])){ $_SESSION['err']['nom_abs'] = "Veuillez entrer votre nom"; } if(empty($_POST['prenom_client'])){ $_SESSION['err']['prenom_abs'] = "Veuillez entrer votre prénom"; } if ($_SESSION['err']) { # dans ce cas il y a au moins une erreur header("Location: commande_restau.php"); exit; } $_SESSION['err_nom_invalide'] = ""; header("Location: ttt_commande.php"); exit(); ?>
Les regexps que tu as sont vraiment pas terribles. En plus, tu mets des # (dièses) pour délimiter la regexp dans une fonction eregi, alors que c'est prévu pour preg_match uniquement.
L'expression régulière n°1 (#^[^-][[:alpha:]-][^-]+$# ) signifie (si on utilise preg_match et non pas eregi :
- début de ligne (^)
- suivi d'un caractère qui peut être n'importe quoi sauf un tiret [^-]
- suivi de un caractère alphabétique ou tiret [[:alpha:]-]
- suivi de n'importe quels caractères sauf tiret
- suivi de fin de ligne ($)
Un truc qui marche avec cette expression régulière alors que ça ne te convient pas : $a@:;::
Si tu veux un nom/prénom qui ne commence ni ne se termine par un tiret (-) :
preg_match('#\A:alpha:[[:alpha:]-]*:alpha:\Z#',$prenom)
1- utilisation de preg_match (donc les dièses qui entourent l'expression régulière sont considérés comme délimiteurs)
2- début de chaîne de caractère (\A)
3- un caractère alphabetique :alpha:
4- des caractères alphabétiques ou tiret [[:alpha:]-]*
5- un caractère alphabétique :alpha:
6- fin de chaîne de caractères
Pour le nom du client, que veux-tu de plus que pour le prénom ?
- des espaces
- des apostrophes
- toujours s'assurer qu'on commence et qu'on termine par une lettre
preg_match("#\A:alpha:[[:alpha:]-' ]*:alpha:\Z#",$nom)
et voilà.
Raph
Bonsoir, Raph,
Merci pour tes explications. Elles sont limpides.
En fait, j'ai encore un petit soucis. Voici la dernière version de mon code :
Dans le fichier formulaire, j'ai aussi rajouté :
à la fin de chaque affichage de variable, pour obtenir place nette quand je fais un rafraîchissement.
Mon problème, c'est que quand je rentre des infos valides, je n'arrive plus à accéder à mon fihcier ttt_commande.php. je retombe toujours sur commande_restau1.php.
Je ne comprends pas ce qui cloche.
Domi
Merci pour tes explications. Elles sont limpides.
En fait, j'ai encore un petit soucis. Voici la dernière version de mon code :
<?php session_start(); $nom=$_POST['nom']; $prenom=$_POST['prenom']; // Cas où le champ nom n'a pas été rempli if(empty($_POST['nom_client'])){ $_SESSION['err']['nom_abs'] = "Veuillez entrer votre nom"; } //sinon, cas où le champ nom comporte des erreurs elseif(!preg_match("#\A:alpha:[[:alpha:]-' ]*:alpha:\Z#",$nom)){ $_SESSION['err']['nom_inv'] = "Veuillez entrer un nom valide"; } // Cas où le champ prénom n'a pas été rempli if(empty($_POST['prenom_client'])){ $_SESSION['err']['prenom_abs'] = "Veuillez entrer votre prénom"; } //sinon, cas où le champ prenom comporte des erreurs elseif(!preg_match('#\A:alpha:[[:alpha:]-]*:alpha:\Z#',$prenom)){ $_SESSION['err']['prenom_inv'] = "Veuillez entrer un prénom valide"; } if ($_SESSION['err']) { # dans ce cas il y a au moins une erreur header("Location: commande_restau1.php"); exit; } header("Location: ttt_commande.php"); exit(); ?>
Dans le fichier formulaire, j'ai aussi rajouté :
unset($_SESSION['err']['nom_abs']);
à la fin de chaque affichage de variable, pour obtenir place nette quand je fais un rafraîchissement.
Mon problème, c'est que quand je rentre des infos valides, je n'arrive plus à accéder à mon fihcier ttt_commande.php. je retombe toujours sur commande_restau1.php.
Je ne comprends pas ce qui cloche.
Domi
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
15 janv. 2008 à 23:53
15 janv. 2008 à 23:53
Le soucis, c'est que tu utilises une fois $_POST['nom'] et l'autre fois $_POST['nom_client'], c'est ça qui cloche.
Fais bien attention à tous les noms de champs/variables car sinon tu vas t'emmeler les pinceaux ! ;-)
Raph
Fais bien attention à tous les noms de champs/variables car sinon tu vas t'emmeler les pinceaux ! ;-)
Raph
Ouh là là !!! J'étais un peu fatiguée hier soir !
C'est sûr, ça marche drôlement mieux comme ça !
Merci encore pour toutes tes contributions et pour ta réactivité.
Domi
C'est sûr, ça marche drôlement mieux comme ça !
Merci encore pour toutes tes contributions et pour ta réactivité.
Domi
Bonjour,
j'ai un peu le même code que Azurlikeas, à ceci près que mon dernier if contient des écho.
Il s'en suit enfin un else {header('location:inscription.php')}
Comme le header suit des echo, il ne fonctionne donc pas, faudrait-il que je supprime tous les echo, quitte à mettre sur une autre page toute cette partie et faire un header(location') vers cette partie pour que mon header('location.php')soit pris en compte?
quoi qu'il en soit mon header suivra un else.
voici mon code:
merci pour votre aide!
j'ai un peu le même code que Azurlikeas, à ceci près que mon dernier if contient des écho.
Il s'en suit enfin un else {header('location:inscription.php')}
Comme le header suit des echo, il ne fonctionne donc pas, faudrait-il que je supprime tous les echo, quitte à mettre sur une autre page toute cette partie et faire un header(location') vers cette partie pour que mon header('location.php')soit pris en compte?
quoi qu'il en soit mon header suivra un else.
voici mon code:
//idem date naissance if (!isset($_POST['naissance']) or empty($_POST['naissance'])) $_SESSION['erreur']['naissance']='<p class="erreur">Merci de renseigner votre date de naissance.</p>'; else { $_SESSION['form']['naissance']=ctype_digit($_POST['naissance']); } // sinon si toutes les valeurs sont bonnes alors ecris "ok" vérifie mais ne montre pas le formulaire à re-remplir! if (empty($_SESSION['erreur'])) { echo '<p class="pas_erreur">Bienvenue '.$_POST['pseudo'].'. Votre inscription est maintenant effectuée. Vous pourrez acceder au forum, laisser des commentaires et poster vos séances. Vérifiez vos entrées ci-dessous</p>'; echo '<form> <fieldset> <legend>Vérification des données:</legend> <label for="pseudo">Nom d\'utilisateur</label> <input type="text" name="pseudo" id="pseudo" value="'.$_POST['pseudo'].'"/> <br /> <label for="mail">Votre email</label> <input type="email" name="mail" id="email" value="'.$_POST['mail'].'"/> <br /> <label for="pass">Mot de passe</label> <input type="text" name="pass" id="mot de passe" value="'.$_POST['pass'].'"/> <br /> <label for"naissance">Date de naissance</label> <input type="text" name="date" id="date" value="'.$_POST['naissance'].'"/> <br /> </fieldset> </form> <p class="bouton_formulaire"> <a href="http://loleran.free.fr"><input type="submit" value="naviguer" title="continuer"/></a> <a href="http://loleran.free.fr/principale/inscription.php"><input type="submit" value="recommencer!" title="retour inscription"/></a> </p>'; //on vide variables de session $_SESSION['erreur']='';$_SESSION['form']=''; } else {header('Location:inscription.php'); exit;} ?>
merci pour votre aide!