Stocker une variable dans l'url [Fermé]

Signaler
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015
-
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
-
Bonsoir tous le monde,

Je suis en train d'améliorer un script, et j'ai besoin d'un conseil.
Dans une page d'inscription je transite mes messages d'erreurs dans l'URL. (je précise qu'il y a deux fichiers, 1 qui fait les vérifications, et un autre qui affiche le formulaire et les erreurs s'il y en a)

Dans mon fichier PHP j'ai donc ceci:
<?php
//...Variables....

if(empty($log_pseudo) OR empty($log_pass)) {
header('Location: monsite/register.php?erreur_message=Tous les champs....');
}

//.......Puis d'autre vérification avec chacune leur redirection et un message d'erreur différent(email non valide...) basé sur le même modèle que ci-dessus.
?>

Avez-vous des idées d'améliorations ? Comment faites-vous habituellement ?

22 réponses

Messages postés
2138
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
7 mars 2013
499
Bonjour,

Ma première idée serait de mettre plutôt un error_id comme champ, ainsi c'est plus dissimulé et ça te permet de faire une gestion d'erreur sans te soucier de la taille de l'url
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Merci NookZ pour ton avis.

Je ne comprends pas très bien comment tu procède, tu pourrais détailler un peu plus s'il te plait ?

L'idéal serait d'avoir un fichier php comme ceci:
if(...) {
$erreur_message = 'Tous les ...';
header('Location: register.php');

Puis dans l'autre page php qui contient le formulaire avoir quelque chose comme ça :
<p><?php echo $erreur_message; ?></p>


Mais ça n'est pas possible puisqu'il faut faire transiter la variable (elle ne se trouve pas dans le même fichier).

Dans tous les cas je devrais transiter le pseudo par l'URL pour éviter aux membres de le réécrire au cas où ils seraient tromper de mot de passe.
Messages postés
2
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 mars 2013

Je te conseillerais de passer tes variables en post plutôt qu'en Get,ca évitera que de petit malin modifie l'url
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
tu fais un fichier parametres.inc.php
dans lequel tu mets:
<?php
//array des messages d'erreur
$array_msg_err=array("1"=>"Tous les champs doivent être remplis","2"=>"Erreur pseudo","3"=>"Erreur mpd"); etc...
?>


au début de tes pages php tu mets
<?php
include('parametres.inc.php');
?>


tu transmets dans l'url ainsi:
header('Location: monsite/register.php?num_err=1'); //ou 2 ou 3 etc...


et pour afficher l'erreur dans register.php:

if(isset($_GET'num_err'])) && (is_int($_GET'num_err'])){
    //on verifie que c'est bien un nombre (sécurité !)
   $num_err=$_GET'num_err;
//affichage message erreur
echo $array_msg_err[$num_err];
}
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Merci doguo02 pour ta réponse,

Mais comment faits-tu ? Puisqu'il n'y aura pas de formulaire avec la méthode POST

Afficher uniquement un message d'erreur par l'URL risque-t-il de poser des problèmes de sécurité ?
Si la personne qui s'amuse à trafiquer l'URL met des chaines de caractères trop importantes je crois que la mémoire de son ordinateur va consommer énormément pour stocker tous les messages... Mais cela risque-t-il d'impacter également mon serveur ?

J'ai rapidement regarder le code source de Twitter et Facebook. Apparement pour afficher le pseudo dans les champs en cas d'erreurs, ils transitent les infos par l'URL (get)
Ex sur twitter : https://twitter.com/login/error?username_or_email=fzfef
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

J'ai une autre question. Comment faire transiter le pseudo marqué dans un champ.
Si je fait http://......?user_name=$user_name ça ne marche pas.

Je voudrais simplement lors du chargement de la page en cas d'erreur marqué le pseudo dans le champ dédié pour éviter à l'utilisateur de le réécrire une nouvelle fois.

Dans mon formulaire j'ai fait ça :
value="<?php echo htmlspecialchars($_GET['user_name']); ?>
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
je ne comprend pas tu dis:
Mais comment faits-tu ? Puisqu'il n'y aura pas de formulaire avec la méthode POST

et plus bas:
Je voudrais simplement lors du chargement de la page en cas d'erreur marqué le pseudo dans le champ dédié pour éviter à l'utilisateur de le réécrire une nouvelle fois.

Dans mon formulaire j'ai fait ça :
value="<?php echo htmlspecialchars($_GET['user_name']); ?>


donc tu as bien un formulaire.

tu peux faire ré-afficher tous les champs que tu veux en cas d'erreur il suffit de faire ceci:

<?php
//récup valeur si champ déja posté, sinon vide
if(isset($_POST['user_name'])){
$user_name=htmlspecialchars($_POST['user_name']);
}else{
$user_name="";
}

//idem pour tous tes champs
?>
//puis dans le formulaire:
<form name="form1" method="post" action="" >
<input type="text" name="user_name" value="<?php echo $user_name; ? />
etc...
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Merci Alain_42 pour ta réponse,

Le problème c'est que le formulaire ne se trouve pas dans la même page, que celle où se passe les vérifications. Je n'ai donc pas trouvé d'autres moyen que de passer par l'URL en faisant comme ceci :

if(un problème) {
header('Location: monsite/log?user_name = ?');
}

Je redirige donc vers ma page ou se trouve le formulaire avec des infos dans l'URL. Puis je les reprends avec GET.

Mais il y a également un problème ou je coince. Comment reprendre le pseudo que l'utilisateur à marqué. Si je fait ça, cela ne marche pas:

he....(.....log/?user_name = ' . $log_pseudo)

Y a-t-il la possibilité d'utiliser POST plusieurs fois ? C'est à dire, de la page du form vers la page de vérif, puis de la page de vérif vers la page du form, sachant que je suis obligé de renvoyer le membre vers la page du formulaire avec un header.

Merci pour ton aide
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
ha ok je pensait que tu avait le form et la verif dans la même page

L'avantage de tout mettre dans la même page c'est que tu peux facilement ré afficher la valeur déjà saisie en utilisant la méthode que je viens de te donner
Il suffit de faire la verif en début de page avant le form
par un
 if(isset($_POST['name_du_bt_submit']{  
  //tes verifs  


 //si tout bon tu fait un header vers la page suivante de ton site  

//si erreurs le formulaire sera réaffiché avec les valeurs déjà saisies  
//et les messages éventuels  
}


par contre si dans des pages différentes, tu peux faire du POST du formulaire vers la pge verif ,mais de verif => form c'est du GET par l'URL

ou passer par les variables de session php
//dans la page du formulaire  
<?php  
session_start();  
if(isset($_SESSION['user_name'])){  
   $user_name=$_SESSION['user_name'];  
}else{  
    $user_name=""  
}  

//idem pour les autres champs
//puis dans le formulaire:  
<form name="form1" method="post" action="" >  
<input type="text" name="user_name" value="<?php echo $user_name; ? />  


dans ta page verif
<?php  
session_start();  
if(isset($_POST['user_name'])){     
   $user_name=htmlspecialchars($_POST['user_name']); 
  //tu fais tes verifs   

  //puis on charge la variable de session  
  $_SESSION['user_name']=$user_name;  
}

//idem pour les autres champs
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Merci d'avoir répondu si vite,

Pour ne pas avoir de problème avec certaine de mes pages, je ne préfère pas utiliser de session. Je vais donc rester sur le GET.

En revanche comment fais-tu pour passer une variable dans l'url, puisque

log?user_name = ' . $log_name ne marche pas.
À savoir que $log_name = $_POST['log_name']
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
plus simplement, rajouter un valeur dans $_SESSION me semble le plus simple et le moins visible.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
est ce que dans la barre d'adresse tu vois bien
....log?user_name = le_pseudo_tapé
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Mais si je pars dans une session, il faudra bien que je fasse session_destroy dans ma page avec le formulaire non ?

Peux t-on activer plusieurs session pour un même site ? Cela ne pose-t-il pas de problème ?

Merci pour ton avis nagashima.
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

@Alain_42,

Non justement. Je vois rien : user_name =(il n y a rien après).
Et si je fait ça :

log?user_name=$log_pseudo') (donc avec le guillemet après pseudo) il m'affiche user_name=$log_pseudo.

En fait il n'execute pas le code.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
est ce que $log_name = $_POST['log_name'];

est bien avant la ligne header('Location: monsite/log?user_name ='.$log_name);
et tu as bien un input dont le name="log_name" ?
ou name="user_name" ?
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
je ne crois pas que tu puisse gérer plusieurs $_SESSION, par contre tu peux facilement créer une valeur dans ton tableau session
par exmple tu feras
$_SESSION['MonErreur'] = ta chaine d'erreur

lors du post

puis tu récupèrera la valeur dans ta nouvelle page
$err = $_SESSION['MonErreur'] 


il te suffira ensuite mettre à null cette valeur pour que l'erreur ne réapparaisse pas dans les autres pages (car faire un destroy de la session t'empêchera de justement gérer la session de ton utilisateur).
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Peux t-on activer plusieurs session pour un même site ?
Oui et non
En fait tu actives une session par utilisateur qui reste active tant qu'il n'a pas fermé son navigateur ou au bout d'un certain temps d'inactivité.
Donc sur ton serveur à un moment donné tu vas avoir plusieurs sessions si plusieurs utilisateurs connectés, mais elles se différencient par un ID de session (SSID) spécifique à chacun, stocké dans un cookie chez l'utilisateur.

par contre tu peux faire autant de variables de session que tu veux
$_SESSION['var1']
$_SESSION['var2']
etc...
même a plusieurs niveaux
$_SESSION['type1']['var1']
$_SESSION['type1']['var2']
$_SESSION['type2']['var1']
$_SESSION['type2']['var2']


Mais si je pars dans une session, il faudra bien que je fasse session_destroy dans ma page avec le formulaire non ?

NON surtout pas puisque c'est tout l'intérêt de pouvoir justement récupérer la valeur si la variable de session existe if(isset(....

par contre si tu n'en a plus besoin dans les pages suivantes tu peux faire session_destroy , si tout ok a la fin de la page verif
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

En effet ça marche, mais ce n'est pas optimal. Par exemple, si le membre va sur la page de login, il fait une erreur, il déclenche donc le système de session, puis il retourne sur la page home, puis il revient sur la page de login (c'est vrai que c'est farfelu, mais c'est possible). Resultat il va voir un message d'erreur alors qu'il n'a encore rien envoyé par le formulaire.
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
ce sont des exceptions à gérer de toi même, vu que tu connais la cause et l'effet, il te suffit maintenant de trouver le 'subterfuge' adéquate ^^
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
comme par exemple indiquer quelle était la page précédente, associer des identifiants à tes erreurs, etc.
.
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Mais y a t-il un moyen de faire passer une variable avec GET. Quelque chose comme ça par exemple :

log?user_name=$log_pseudo

Ça m'éviterais de gérer plusieurs possibilités , et le script chargera plus vite.

En tout cas merci pour l'aide que tu m'apportes.
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
tu peux rediriger avec la chaine que tu souhaite.

Par exemple si tu as fais un

<a href="/index.php?gerererr=<?php echo $var; ?>"


avec par exemple var =1 , lors de la lecture, si ton paramètre gerererr est à un, tu vérifies les erreurs dans ton tableau session, sinon non

J'ai un doute sur <?php echo $var; ?> ... je crois que le echo n'est pas necessaire mais je suis pas sur.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
si echo est nécessaire
ou un raccourci
<?=$var ?>
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
ok merci pour l'info =) (ca fait qq temps que j'ai pas tappé dans le php =p)
Messages postés
31
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
4 juillet 2015

Dsl, je vient juste de voir cette conversation. Le include me simplifie la vie et me permet ainsi de réduire drastiquement mon code. Je part finalement là dessus. Merci pour ton aide nagashima
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
16 février 2021
198
pas de soucis bonne continuation =)
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
il suffit de "charger" la variable de session correspondant à user_name que si pas d'erreur sur ce champ, donc c'est bien qu'il aura déja saisi qq chose non ?
et si ce champ est ok je ne vois pas pourquoi ensuite ça donnerait une erreur, et comment sans passer par le formulaire tu puisses atteindre la page login ?

sinon pour revenir a ta solution via l'url:

est ce que $log_name = $_POST['log_name'];

est bien avant la ligne header('Location: monsite/log?user_name ='.$log_name);
et tu as bien un input dont le name="log_name" ?
ou name="user_name" ?