Stocker une variable dans l'url

Fermé
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 - 7 mars 2013 à 21:38
 Utilisateur anonyme - 11 mars 2013 à 10:04
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 ?
A voir également:

22 réponses

Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 15:17
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.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
7 mars 2013 à 21:40
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
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
Modifié par Daniel6 le 7/03/2013 à 21:54
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.
0
doguo02 Messages postés 2 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 7 mars 2013
7 mars 2013 à 22:02
Je te conseillerais de passer tes variables en post plutôt qu'en Get,ca évitera que de petit malin modifie l'url
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
7 mars 2013 à 22:08
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];
}
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
7 mars 2013 à 22:24
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
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
7 mars 2013 à 23:03
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']); ?>
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 mars 2013 à 14:34
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...
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 14:43
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
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 8/03/2013 à 15:04
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
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 15:07
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']
0
Utilisateur anonyme
8 mars 2013 à 15:15
plus simplement, rajouter un valeur dans $_SESSION me semble le plus simple et le moins visible.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 mars 2013 à 15:17
est ce que dans la barre d'adresse tu vois bien
....log?user_name = le_pseudo_tapé
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 15:20
@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.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 mars 2013 à 15:36
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" ?
0
Utilisateur anonyme
8 mars 2013 à 15:25
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).
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 mars 2013 à 15:30
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
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 15:33
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.
0
Utilisateur anonyme
8 mars 2013 à 15:42
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 ^^
0
Utilisateur anonyme
8 mars 2013 à 15:43
comme par exemple indiquer quelle était la page précédente, associer des identifiants à tes erreurs, etc.
.
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 15:46
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.
0
Utilisateur anonyme
8 mars 2013 à 15:54
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.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 mars 2013 à 16:00
si echo est nécessaire
ou un raccourci
<?=$var ?>
0
Utilisateur anonyme
8 mars 2013 à 16:01
ok merci pour l'info =) (ca fait qq temps que j'ai pas tappé dans le php =p)
0
Daniel6 Messages postés 31 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 4 juillet 2015 1
8 mars 2013 à 16:05
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
0
Utilisateur anonyme
11 mars 2013 à 10:04
pas de soucis bonne continuation =)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 8/03/2013 à 15:49
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" ?
0