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
Utilisateur anonyme - 11 mars 2013 à 10:04
A voir également:
- Php récupérer variable url
- Lien url - Guide
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
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
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.
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.
NookZ
Messages postés
2138
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
7 mars 2013
514
7 mars 2013 à 21:40
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
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
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
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.
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.
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
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
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
7 mars 2013 à 22:08
tu fais un fichier parametres.inc.php
dans lequel tu mets:
au début de tes pages php tu mets
tu transmets dans l'url ainsi:
et pour afficher l'erreur dans register.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]; }
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
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
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
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
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']); ?>
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']); ?>
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
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:
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...
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
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
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
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
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
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 ta page verif
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
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
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']
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']
Utilisateur anonyme
8 mars 2013 à 15:15
8 mars 2013 à 15:15
plus simplement, rajouter un valeur dans $_SESSION me semble le plus simple et le moins visible.
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
8 mars 2013 à 15:17
est ce que dans la barre d'adresse tu vois bien
....log?user_name = le_pseudo_tapé
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
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.
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.
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
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" ?
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" ?
Utilisateur anonyme
8 mars 2013 à 15:25
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
lors du post
puis tu récupèrera la valeur dans ta nouvelle page
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).
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).
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
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
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
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
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.
Utilisateur anonyme
8 mars 2013 à 15:42
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 ^^
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
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.
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.
tu peux rediriger avec la chaine que tu souhaite.
Par exemple si tu as fais un
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.
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.
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
8 mars 2013 à 16:00
si echo est nécessaire
ou un raccourci
<?=$var ?>
ou un raccourci
<?=$var ?>
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
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
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
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" ?
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" ?