passage de variables via session

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : passage de variables via session

par iruka » 26 mai 2006, 03:21

ok, je pense avoir saisi le concept. donc, je n ai pas besoin de faire deux pages mais simplement de tester s il s agit d un premier chargement ou un retour sur la page en mettant si $_SESSION sinon $_POST ou un truc dans le genre!

par Truc » 25 mai 2006, 13:23

donc en fait, je peux tout faire sur une page. il me suffit de mettre les valeurs de session et non pas de post dans chaque value et hop, le tour est joue ?
Ce n'est pas vraiment ça.

Le test précédent vérifie l'existence d'une variable POST donc récupération des données dans le cas où le formulaire a été validé.

Si les données POST n'existent pas on teste l'existence d'une variable de SESSION donc un éventuel retour en arrière vers un autre formulaire.

S'il n'y a ni de variables POST ni SESSION alors il s'agit du 1er chargement de la page (par défaut).

par iruka » 25 mai 2006, 04:25

oui, c est tout a fait ca, Truc!

donc en fait, je peux tout faire sur une page. il me suffit de mettre les valeurs de session et non pas de post dans chaque value et hop, le tour est joue ?

du coup, au niveau des sessions, je vais juste faire passer une variable id qui me permet de relier les tables entre elle et les sessions de la toute premiere page qui peuvent etre rentrer qu a la toute fin (pour les autres pages, j ai besoin de rentrer les donnees dans la table et je ne pense pas qu avec les sessions cela soit possible)

par Truc » 24 mai 2006, 18:31

en principe (si j'ai bien suivis) il faut soit récupérer les donneés POST si elles existent soit les données SESSION sinon rien donc:
$nom = (isset($_POST['nom']))  ? $_POST['nom'] : ((isset($_SESSION['nom']))  ? $_SESSION['nom'] : "");

par iruka » 24 mai 2006, 05:08

Merci Truc!

bon, je vais regarder ca de plus pres...

en revanche, une question concernant la methode que j utilise (qui me semble bof):

j ai du coup creer deux pages 1: page1 et page1correction (lorsque la personne revient en arriere) mais j ai l impression que je me complique la vie ?

par Truc » 23 mai 2006, 18:40

il y a une manipulation particuliere pour passer les variables de sessions dans la db ? (mysql)
Non pas de manip spéciale pour l'enregistrement pour pour pouvoir s'en servir il ne faut pas oublier "session_start()" sur toutes les nouvelles pages dont tu veux utiliser une variable de session.

Pour débugger commence par afficher la requête qui sera exécutée avec les variables pour vérifier qu'il n'y a pas de "trous". Puis ajouter mysql_error() pour afficher d'éventuel messages d'erreurs.

par iruka » 23 mai 2006, 14:19

bon bah je vais me defenestrer du 10eme etage....

depuis que j ai mis en session, plus rien ne rentre dans la base de donnee...

il y a une manipulation particuliere pour passer les variables de sessions dans la db ? (mysql)

par IRUKA » 22 mai 2006, 03:18

Ah ok donc en fait, je dois declarer des deux facons : une pour avoir les variables issues du formulaires et une autre pour recuperer les variables de sessions.

bon je vais essayer avec tout ca et je repasse si j ai trouve ou si j ai pas trouve (ca sert toujours dans les deux ca)

par Truc » 21 mai 2006, 16:04

En effet je voulais surtout souligner la différence entre les variables de session et celles du formulaire.

avec cet exemple que tu veux mettre sur les pages:
$nom = (isset($_SESSION['nom']))  ? $_SESSION['nom'] : "";
tu ne récupères pas les données formulaire.

En revanche l'exemple est tout à fait correct pour reaffecter un contenu à un champ en cas de retour vers un autre formulaire.

par Cyrano » 21 mai 2006, 15:11

en revanche, du coup, Truc, je n ai pas bien compris ton dernier message...
Attention, moi, je parlais des variables de session : Truc évoquait quant à lui les variables que j'appellerais "de travail" que tu initialises avec la valeur des variables de session si elles existent.

par IRUKA » 21 mai 2006, 14:57

Mais pour ces variables, tu n'as pas besoin de les redéclarer à chaque page. Tu initialises chaque variable de session à la page où elle doit l'être c'est tout. Ces variables seront disponibles ensuite partout dans le site sans manipulation particulière.
Merci pour ces precisions Cyrano! il me semblait bien que c etait quelque chose dans ce genre la^^ donc pas besoin de redeclarer les variables a chaque page, ca va aider!!

en revanche, du coup, Truc, je n ai pas bien compris ton dernier message...

pour faire simple, je declare les variables sur toutes les pages comme suit :
$nom = (isset($_SESSION['nom']))  ? $_SESSION['nom'] : "";
hum, bon je vais essayer demain en esperant que je vais trouver comment faire avec toutes vos infos !

par Truc » 21 mai 2006, 12:55

sur la 2ème page tu récupères les données POST pour les affecter aux variables de SESSION donc:
$_SESSION['nom'] = (isset($_POST['nom']))  ? $_POST['nom'] : "";
Mais sur la page 1 tu ne dois pas récupérer les données POST puisqu'il n'y en a pas mais éventuellement des donnes SESSION que tu aura affecté lors de la 1ère validation. Tu dois donc modifier le test sur la 1ère page comme ceci:
$nom = (isset($_SESSION['nom']))  ? $_SESSION['nom'] : "";
et pour le champ
<input type="text" name="nom" maxlength="20" size="20" value="<?php echo $nom; ?>"

par Cyrano » 21 mai 2006, 10:07

session_start() sert à démarer ou à prolonger une session de navigation. Si ton site comporte plusieurs pages, chacune doit impérativement commencer par session_start() si tu ne veux pas perdre les variables de session en cours de route. Mais pour ces variables, tu n'as pas besoin de les redéclarer à chaque page. Tu initialises chaque variable de session à la page où elle doit l'être c'est tout. Ces variables seront disponibles ensuite partout dans le site sans manipulation particulière.

par IRUKA » 21 mai 2006, 05:54

Merci pour les liens !

en revanche si lors du formulaire 1, il y a une erreur et que la page se recharge, pas de souci, ca affiche la valeur de la variable mise en session mais si je passe a la page 2 puis que je veux revenir a la page1, la valeur 'nom' n'apparait pas... est ce que je dois en plus de declarer la session_start() en haut de la page2, remettre $_SESSION['nom']? normalement non mais je ne comprends pas ou le bat blesse...

j ai essaye de mettre l id de la session dans le lien mais ca change rien (infogen.php?'.SID.')

par Truc » 20 mai 2006, 14:51

Il s'agit de l'opérateur ternaire il y a un sujet à son propos dans la FAQ

Pour l'enregistrement c'est bien ça, validation du formulaire mais enregistrement en session puis apèrs la dernière étape d'enregistrement des différents formulaires tu passes tout en BD.

Pour les session un pti tuto voire deux tutos et tu sera fin pret :wink: