Aller au contenu

cmt garder 1 variable $_POST avec session?


Sujets conseillés

Posté

Bonjour,

Je voudrais donner à la variable $_SESSION['pseudo'] la valeur insérée dans un champ text. Comment faire pour que cette variable soit retenue à chaque chargement de page ?

En fait il y a deux pages :

-une qui sert à entrer son pseudo et se connecter au chat

-l'autre qui est le chat et qui retient et insère automatiquement le pseudo renseigné dans la première page.

Le problème?

La page2 se recharge à chaque message envoyé et donc la variable $_SESSION['pseudo']=$_POST["pseudo'] me marque une erreur : variable inconnue.

Normal ! Mais comment contourner le problème? Suis-je obligé d'utiliser une base de donnée?

Posté

Non, absolument pas.

session_start();
$_SESSION['pseudo'] = 'test';

Mets ceci dans une page

session_start();
echo $_SESSION['pseudo'];

Puis, ceci dans une seconde page, et charge la première, puis la seconde.

Le principe des sessions est justement de pouvoir conserver des données entre les pages.

Posté

Bonjour,

tu doit faire cette instruction $_SESSION['pseudo']=$_POST['pseudo'] uniquemenet au premier chargement de la page. Un if ferra l'affaire.

Posté
Non, absolument pas.

session_start();
$_SESSION['pseudo'] = 'test';

Mets ceci dans une page

session_start();
echo $_SESSION['pseudo'];

Puis, ceci dans une seconde page, et charge la première, puis la seconde.

Le principe des sessions est justement de pouvoir conserver des données entre les pages.

Oui ça je connais et cela fonctionne étant donné que tu défini toi-même la variable.

'test' dans ce cas-ci.

Mais si on ne connais pas la variable??? Je ne sais pas la donner à l'avance ! Je suis obligé de passer par $_POST et cela fonctionne lors de l'ouverture de la deuxième page qui indique bien le pseudo indiqué dans la première page. Mais une fois qu'on envoit un message et que la seconde page se recharge, on perd la variable pseudo qui devient inconnue.

J'espère que je suis assez clair dans mes explication

Posté
session_start();
if ($_POST['pseudo']!="") $_SESSION['pseudo']=$_POST['pseudo'];
echo "Bienvenue ".echo $_SESSION['pseudo'];

Posté
session_start();

if ($_POST['pseudo']!="") $_SESSION['pseudo']=$_POST['pseudo'];

echo "Bienvenue ".echo $_SESSION['pseudo'];

Ca ne marche pas ce qui me semble logique car la traduction serait :

Si il y a une valeur dans le champ pseudo alors la session s'appelle cette valeur.

Cela revient tout à fait au même que ce que j'avais mis et qui ne marche pas, à savoir :

$_SESSION['pseudo']=$_POST['pseudo'];

A chaque rechargement de page, la page2 vérifie la valeur envoyée par post et comme il n'y en a pas (car on ne rempli pas le formulaire à chaque fois qu'on tape un message) et bien la page2 ne reconnaît plus la variable $_SESSION['pseudo']

Comment faire?

Posté (modifié)

Une variable de session est reconnue durant x minutes meme si elle n'est pas définie à chaque fois.

Modifié par Théo B.
Posté (modifié)
session_start();
if ((isset($_POST['pseudo'])) && ($_POST['pseudo']!=""))
 $_SESSION['pseudo']=$_POST['pseudo'];
echo "Bienvenue ".echo $_SESSION['pseudo'];

Là, ça devrait marcher

Modifié par Leonick
Posté
Une variable de session est reconnue durant x minutes meme si elle n'est pas définie à chaque fois.

Ben alors il faudra qu'on m'explique pourquoi ça ne marche pas ?!?! :whistling:

Page1.php :

...

<form method="post" action="page2.php">
<p>Tape un pseudo :
<input type="text" size="50" name="name">
</p>
<input type="submit" value="entrer dans le chat">
</form>
...

Page2.php :

<?
session_start();
$_SESSION['pseudo']=$_POST['name'];
?>
<html>
...
<form name="form" action="chat_envois.php" method="post">

<p>
Pseudo : <input type="text" name="pseudo"
        value="<? echo $_SESSION['pseudo']; ?>" size="6">

Message :  <input type="text" name="message" />

<input type="submit" value="Envoyer"/>
</p>

Posté

il faut rajouter dans la page2 le isset() que j'ai mis dans le code en cas d'utilisation de la page2 sans être venu de la page1.

Sinon, il faudrait faire un test en définissant à la main une variable dans page1

$_SESSION['test']="mon test";

Et vérifier qu'il apparait bien dans page2

Posté

J'ai déjà fait le test en indiquant $_SESSION['pseudo']='fred'; et cela fonctionnait très bien. A chaque rechargement la page continuait à afficher automatiquement le pseudo fred. Et c'est normal car la variable est constante, elle s'appellera toujours 'fred'.

Le problème ici c'est que la variable n'est pas constante car tout le monde ne s'appelle pas fred et la variable doit donc changer selon l'internaute qui veut se connecter au chat. Il faut donc récupérer cette variable renseignée par l'internaute dans le formulaire de la page1 et la transmettre à la page2 (ça, ça fonctionne bien) et ensuite il faut mémoriser cette variable pour qu'elle apparaisse à chaque envois de message dans le chat (donc après chaque rechargement). C'est là que ça foire.

Je n'ai pas changé le code de la page1 mais j'ai changé le code de la page deux du moins le haut. Le voici :

<?
session_start();

if ((isset($_POST['name'])) && ($_POST['name']!=""))
  $_SESSION['pseudo']=$_POST['name'];

else $_SESSION['pseudo']='inconnu';

?>

Quand je fais ça, il me met inconnu comme pseudo après chaque rechargement.

Donc je rentre "fred" dans le champ de la page1, je clique "entrer" et me connecte au chat qui indique bien le pseudo "fred". Ensuite je tape mon premier message "blablabla", clique sur "envois" et hop mon pseudo a changé.

Je ne m'appelle plus "fred" mais "inconnu"

Posté
<?
session_start();

if ((isset($_POST['name'])) && ($_POST['name']!=""))
 $_SESSION['pseudo']=$_POST['name'];

else $_SESSION['pseudo']='inconnu';

?>

Ca ne peut pas marcher.

Essaye plutot :

<?
session_start();

if ((isset($_POST['name'])) && ($_POST['name']!=""))
 $_SESSION['pseudo']=$_POST['name'];
elseif((!@isset($_SESSION['pseudo'])) || ($_SESSION['pseudo']=="")
 $_SESSION['pseudo']='inconnu';
?>

Posté

Merci beaucoup Théo, ton script fonctionne à merveille.

Mais dis-moi ? Peux-tu me traduire en français la seconde partie de ton script car je ne la comprend pas. Et comme j'aime apprendre !

En fait c'est le !@isset($_SESSION['pseudo']) qui me chiffonne. Je ne l'ai encore jamais rencontré.

Encore merci à toi,

Fred

Posté

Pour ceux et celles qui désirent utiliser ce code, sachez que Théo a oublié de fermer la ). Vous devez bien sûr la fermer pour que le code fonctionne.

Voici le code corrigé :

<?
session_start();

if ((isset($_POST['name'])) && ($_POST['name']!=""))
$_SESSION['pseudo']=$_POST['name'];
elseif((!@isset($_SESSION['pseudo'])) || ($_SESSION['pseudo']=="")[COLOR=red])[/COLOR]
$_SESSION['pseudo']='inconnu';

?>

Posté

Je le refais, ça n'a pas marché. Le revoici lol

<?
session_start();

if ((isset($_POST['name'])) && ($_POST['name']!=""))
$_SESSION['pseudo']=$_POST['name'];
elseif((!@isset($_SESSION['pseudo'])) || ($_SESSION['pseudo']==""))
$_SESSION['pseudo']='inconnu';

?>

Désolé :whistling:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...