Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 13h09   #1
Invité de passage
 
Homme Chris
Étudiant
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Chris
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Autre problème de variable de session

Bonjour !

Étant plus ou moins débutant dans le domaine, j'ai quelques soucis au niveau d'un chat que j'essaye de réaliser de a à z depuis un certain temps, et pour tout dire je suis assez mal barré pour le moment xD !

Le problème est le suivant, j'ai un champ de texte dans un formulaire qui doit garder en mémoire le pseudo fournit par l'utilisateur dans ce champ lorsqu'il a envoyé le formulaire.

Par défaut celui ci contient 'Inconnu', je l'ai enregistré dans une variable $_SESSION['pseudo'] qui se trouve dans le paramètre value="" du formulaire ; Lorsque ce dernier sera traité, $_SESSION['pseudo'] contiendra alors $_POST['pseudo'] pour pouvoir mettre à jour le pseudo de l'utilisateur dans le champ de texte.

Cependant, comme la page d'index se charge à nouveau pour rafraichir les messages, $_SESSION['pseudo'] redevient alors 'Inconnu'. J'ai l'impression que PHP me créer deux variables de session T_T Si quelqu'un pouvait m'éclaircir, m'apporter une solution ou quelques conseils, j’apprécierais énormément !

Merci d'avance !
Zentao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 13h44   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 470
Points : 6 470
Le mieux est de nous fournir le code
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h59   #3
Invité de passage
 
Homme Chris
Étudiant
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Chris
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Très bien voici le code, je l'ai simplifié et retiré le contenu entre <head> </head> pour gagner de la place ;3.

chat.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 
<?php
session_start();
$_SESSION['pseudo'] = "Inconnu";
 
try {
  $bdd = new PDO('mysql:host=localhost;dbname=db_mastersite', 'root', '');
}
 
catch (Exception $e) {
  die('Erreur : ' . $e->getMessage());
}
 
  $reponse = $bdd->query('SELECT logged from ms_chat_usrlst WHERE IP = "' . $_SERVER['REMOTE_ADDR'] . '" ');
  $online = $reponse->fetch();
 
    /* Son pseudo est par défaut 'Inconnu' et on l'affiche comme connecté à droite. */
	if (!$online) {
    $req = $bdd->prepare('INSERT INTO ms_chat_usrlst(usrname, IP, logged) VALUES(?, ?, ?)');
    $req->execute(array($_SESSION['pseudo'], $_SERVER['REMOTE_ADDR'], 1));
	}
	else {
	}
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<div id="enveloppe">
 
    <div class="chat_menu">
	  <div class="msg_infomain">
	    <tr>
	      <td>
	      <a href="profile.php"></a>
	      </td>
	      <td>
	      <span></span>
	      </td>
	    </tr>
	  </div>
	  <p><a href="chat_functions.php?mode=logout">deconnexion</a></p>
	  <div class="msg_infomain_bottom bottom_radius">
	    <tr>
		</tr>
	  </div>
	</div>
 
<div class="left">	
<?php
// Messages ==>
  $msg = $bdd->query('SELECT usrname, date_creation, message FROM ms_chat_messages ORDER BY ID DESC LIMIT 0, 16') or die(print_r($bdd->errorInfo()));
  while ($donnees = $msg->fetch()) { ?>
    <div class="chat_msg">
	  <div class="msg_info">
	    <tr>
	      <td>
	      <a href="profile.php"><?php echo htmlspecialchars($donnees['usrname']); ?> :</a>
	      </td>
	      <td>
	      <span><?php echo htmlspecialchars($donnees['date_creation']); ?></span>
	      </td>
	    </tr>
	  </div>
	  <p><span style="font-family: Verdana;"><?php echo htmlspecialchars($donnees['message']); ?></span></p>
	  <div class="msg_bottom">
	    <tr>
		</tr>
	  </div>
	</div>
  <?php
  }
  $msg->closeCursor();
?>
</div>
 
<div class="right">
<?php
/* Liste des utilisateurs. */
$usrlst = $bdd->query('SELECT usrname FROM ms_chat_usrlst WHERE logged = 1') or die(print_r($bdd->errorInfo()));  
  while ($donnees = $usrlst->fetch()) { ?>
	  <div id="usrdta"><p><acronym title="<?php echo $_SERVER['REMOTE_ADDR']; // TEST ?>"><?php echo htmlspecialchars($donnees['usrname']); ?></acronym></p></div>
  <?php
  }
  $usrlst->closeCursor();
?>
</div>
 
<div class="send_form">
  <center>
  <form class="chat_form" method="post" action="chat_post.php">
    <input type="text" style="width: 100px;" name="pseudo" value="<?php echo $_SESSION['pseudo'] ?>" placeHolder="Pseudo"/>
    <input type="text" style="width: 342px;" name="message" placeHolder="Veuillez raconter votre vie."/>
    <input type="submit" class="chat_submit" value="Envoyer" onclick="document.send_form.chat_form.chat_submit.disabled=true; document.chat_form.submit();"/>
    <input type="submit" class="chat_refresh" value="Actualiser"/>
  </form>
  </center>
</div>
 
</div>
</body>
</html>
chat_post.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
try {
  $bdd = new PDO('mysql:host=localhost;dbname=db_mastersite', 'root', '');
}
catch (Exception $e) {
  die('Erreur : ' . $e->getMessage());
}
 
if ( ($_POST['pseudo'] == "") AND ($_POST['message'] == "") ) {
  echo 'Les champs ne peuvent être vide.' ;
  header('Location: chat.php'); // Retour à la page.
    }
 
else if ( ($_POST['pseudo'] == "") AND ($_POST['message'] != "") ) {
  // Pas de pseudo définit, on prend celui par défaut : 'Inconnu'.
  $req = $bdd->prepare('INSERT INTO ms_chat_messages(usrname, message, date_creation) VALUES(?, ?, NOW())');
  $req->execute(array($_SESSION['pseudo'], $_POST['message']));
  header('Location: chat.php');
    }
 
else if ( ($_POST['pseudo'] > 12) OR ($_POST['message'] > 511) ) {
    echo 'Pseudo invalide ou message trop volumineux !';
	}
 
else {
    // Si le pseudo a été fourni, nous mettons à jour celui-ci dans la base de données.
	$_SESSION['pseudo'] = $_POST['pseudo'];
    $update = $bdd->prepare('UPDATE ms_chat_usrlst SET usrname = :pseudo WHERE IP = "' . $_SERVER['REMOTE_ADDR'] . '" AND logged = 1');
    $update->execute(array('pseudo' => $_POST['pseudo']));
    // Fin de mise à jour. Execution en cours ...
    $req = $bdd->prepare('INSERT INTO ms_chat_messages(usrname, message, date_creation) VALUES(?, ?, NOW())');
    $req->execute(array($_POST['pseudo'], $_POST['message']));
    header('Location: chat.php');
    }  
?>
Zentao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 17h11   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

un simple

Code :
1
2
3
if ( !isset($_SESSION['pseudo']) ) {
$_SESSION['pseudo'] = "Inconnu";
}
ne suffirait pas ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 17h21   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 470
Points : 6 470
Assez d'accord avec syl2095.

Mais encore plus simple

Code :
1
2
 
 <input type="text" style="width: 100px;" name="pseudo" value="inconnu" placeHolder="Pseudo"/>
et tu enlèves

Code :
1
2
 
$_SESSION['pseudo'] = "Inconnu";
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 20h56   #6
Invité de passage
 
Homme Chris
Étudiant
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Chris
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Oui j'aurais pu ;3 ! Mais je pense avoir mal précisé en fait.

Ce que je voulais faire, c'est qu'une fois que l'utilisateur avait envoyé son premier message, son pseudo se serait alors mit à jour à la fois dans la base de données, et dans le champ qui contient son pseudo pour éviter à avoir a le retaper sans cesse, au risque de voir souvent apparaître 'Inconnu', vous voyez :3 ?

Désolé d'être si tardif en répondant xD
Zentao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h04   #7
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
Citation:
Envoyé par Zentao Voir le message
Ce que je voulais faire, c'est qu'une fois que l'utilisateur avait envoyé son premier message, son pseudo se serait alors mit à jour à la fois dans la base de données, et dans le champ qui contient son pseudo pour éviter à avoir a le retaper sans cesse, au risque de voir souvent apparaître 'Inconnu', vous voyez :3 ?
Heu oui ba c'est ce que feront les 3 lignes de codes postées par syl2095
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h16.


 
 
 
 
Partenaires

Hébergement Web