Page 1 sur 1

mise a jour variable de session

Posté : 17 janv. 2006, 23:04
par YVES
Bonjour,

Je ne dois pas etre loin du compte ( :? enfin ca m'étonnerait quand meme ! ) mais j'ai un soucis: comment mettre à jour une variable dans une session (active) en "direct live"?
<?php
session_start() ;
?>
<?php
$db= mysql_connect(localhost, zzzz, zzzz) or die("Impossible de se connecter à la base de données"); 	   
 mysql_select_db('zzzz',$db)  or die('Erreur de selection base'.mysql_error());
$sql= " SELECT gestion FROM membres WHERE id = ". $id; 
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
($data = mysql_result($res,0,'gestion'));
if ($data== './images/jetonrouge.gif')
       {
    echo '<center><font color="red">Désolé, mais VOTRE JETON EST ROUGE !</font></center>
<center><font color="black"><a href="page_membre.php">retour page membre</a></font></center>';
	}
	else
	{
$sql = "UPDATE membres SET vie = vie+0.1, gestion = './images/jetonrouge.gif'  WHERE id = ".$_SESSION['id'];
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
header("Location: page_membre.php");
mysql_close();
}
?> 

-------> la mise à jour dans la base se passe bien mais pas dans la session. :?

Posté : 17 janv. 2006, 23:10
par Truc
je ne vois pas de nouvelle affectation pour la variable de session :-k

Mais en "direct live" ça donne:
$_SESSION['valeur'] = "nouvelle valeur";
tout simplement. :wink:

Posté : 17 janv. 2006, 23:53
par YVES
je ne vois pas de nouvelle affectation pour la variable de session :-k

Mais en "direct live" ça donne:
$_SESSION['valeur'] = "nouvelle valeur";
tout simplement. :wink:
:roll: je la positonne a quel endroit la nouvelle affectation de ma variable?
apres le update?

Posté : 17 janv. 2006, 23:55
par YVES
car le résultat du UPDATE s'il met à jour la base, devrait aussi faire une mise à jour dans la session et donc apparaitre sur la page_membre (par exemple le fameux jeton rouge) :o

Posté : 17 janv. 2006, 23:59
par Truc
la mise a jour de la BD est indépendante de la mise a jour de la variable de session.

tu peut faire la mise à jour si la requete UPDATE est réussie, par exempl:
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());

if($res)
   $_SESSION['valeur'] = "nouvelle valeur";
bien sur tu peux mettre a jour n'importe quelle variable de session avec la valeur que tu souhaites.

Posté : 18 janv. 2006, 23:20
par YVES
bah non, ca ne fonctionne pas; la requete UPDATE marche sans probleme, mais lors du retour sur la page_membre, le jeton est toujours vert et la variable (en l'occurence "vie") ne s'incrémente pas de +1......

J'ai modifié le script mais c'est tjrs identique: la base se met à jour mais pas la variable "vie" dans la session !
<?php
session_start() ;
if (isset($_POST['repos']))
    {
    $_SESSION['vie'] = $_POST['repos'];
    }
$vie = $_SESSION['vie'];

?>
<?php
$db= mysql_connect(zzzz, zzzz, zzzz) or die("Impossible de se connecter à la base de données"); 	   
 mysql_select_db('zzzz',$db)  or die('Erreur de selection base'.mysql_error());
$sql= " SELECT gestion FROM membres WHERE id = ". $id; 
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
($data = mysql_result($res,0,'gestion'));
if ($data== './images/jetonrouge.gif')
       {
    echo '<center><font color="red">Désolé, mais VOTRE JETON EST ROUGE !</font></center>
<center><font color="black"><a href="page_membre.php">retour page membre</a></font></center>';
	}
	else
	{
$sql = "UPDATE membres SET vie = vie+0.1, gestion = './images/jetonrouge.gif'  WHERE id = ".id;
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
vie = $_SESSION['vie'];
header("Location: page_membre.php");
mysql_close();
}
?> 
[/php]

Posté : 18 janv. 2006, 23:32
par Truc
On va reprendre, en essayant de comprendre le onctionnement ........

Comment remplis tu les variables de session ?

avec une requete, oui (certainement) ...

quel type de requete ? ........ UPDATE ?! certainement pas

et la que fait tu comme requete ? ....... UPDATE !

a quoi sert cette requete ? ...... à mettre a jour une donnée dans une BD (ni plus ni moins)

Après comment veux tu que la variable de session prenne une nouvelle valeur de la BD sans lui avoir affecté a nouveau cette valeur (apres requete de séléction).

De plus tu fait:
vie = $_SESSION['vie']; 
ne veux rien dire !! tu n'affecte pas une valeur a la session mais le contraire (et encore)

Donc tu met a jour le champ "vie" avec "vie=vie+0.1" donc fait en autant pour la variable de session.
$_SESSION['vie']=$_SESSION['vie']+0.1;
as tu compris la différence ?

Posté : 19 janv. 2006, 22:45
par Invité
Oui (à peu près) je comprends surtout que j'ai VRAIMENT un problème avec mes variables et/ou avec la concaténation.....
d'ailleurs, pour mettre à jour la variable "jeton rouge" j'ai un dernier soucis:
<?php
session_start() ;
?>
<?php
$db= mysql_connect(localhost, zzzz, zzzz) or die("Impossible de se connecter à la base de données"); 	   
 mysql_select_db('zzzz',$db)  or die('Erreur de selection base'.mysql_error());
$sql= " SELECT gestion FROM membres WHERE id = ". $id; 
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
($data = mysql_result($res,0,'gestion'));
if ($data== './images/jetonrouge.gif')
       {
    echo '<center><font color="red">Désolé, mais VOTRE JETON EST ROUGE !</font></center>
<center><font color="black"><a href="page_membre.php">retour page membre</a></font></center>';
	}
	else
	{
$sql = "UPDATE membres SET vie = vie+0.1, gestion = './images/jetonrouge.gif'  WHERE id = ".id;
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
if($res) 
$_SESSION['vie']=$_SESSION['vie']+0.1;
$_SESSION['gestion']=$_SESSION['gestion']'./images/jetonrouge.gif';
header("Location: page_membre.php");
mysql_close();
}
?> 
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/lemond/public_html/repos.php on line 26

(c'est la ligne d emise a jour de session pour le jeton :oops: )
[/php]

Posté : 19 janv. 2006, 23:03
par Truc
Voila, presque :wink:
if($res)
$_SESSION['vie']=$_SESSION['vie']+0.1;
$_SESSION['gestion']=$_SESSION['gestion']'./images/jetonrouge.gif'; 
juste 2-3 pti détails:

les variables ne doivent etre mis a jour que si la requete a été correctement exécutée donc les deux variables de session doivent de trouver dans le test, suffit d'ajouter des accolades.

la variable de "vie" passe bien parcequ'il s'agit d'un champ numérique et il faut ajouter 0.1 a l'ancienne valeur (comme tu as fait dans la requete)

En ce qui concerne la variable sur "gestion" pas besoin de faire appel a son ancien contenu et le concaténer. Suffit d'écraser la valeur par la nouvelle.

donc:
if($res)
{
   $_SESSION['vie']=$_SESSION['vie']+0.1;
   $_SESSION['gestion']='./images/jetonrouge.gif';
} 

Rappel pour la concaténation:
$v="texte !";

echo "ceci est ".$v; // affiche ceci est un texte !
la chaine de caratère est délimité par des guillemets (") et le point sert a ajouter un morceau de chaine de caratère, il faut donc pour concaténer retouver une suite de caratère ressemblant à:

"chaine". ou 'chaine'. pour concaténer apres le texte "chaine" :wink:

Posté : 19 janv. 2006, 23:03
par Cyrano
Si tu écris ceci:
$_SESSION['gestion'] = $_SESSION['gestion']'./images/jetonrouge.gif';

il y a effectivement une erreur puisque tu mets une variable de session et juste après une chaine de caractères sans opérateur de concaténation entre les deux. Correction :
$_SESSION['gestion'] = $_SESSION['gestion'] .'./images/jetonrouge.gif';
//                                          ^
// opérateur _______________________________|

Posté : 19 janv. 2006, 23:16
par YVES
Merci beaucoup , Truc (va falloir que je fasse un copier/coller de cette petite explication) :wink:
Ce qui m'inquiète un peu tout de meme, c'est que meme arrivé a 500 messages, je risque (encore) de crier à l'aide sur ce forum o combien magique pour l'aide apportée aux novices du Php :!:
Encore merci, car je vais pouvoir sérieusement avancé sur d'autres scripts du meme genre.

Re: mise a jour variable de session

Posté : 16 nov. 2013, 12:14
par Kaka`
<?php
session_start();
date_default_timezone_set("Europe/Paris");
$db = new PDO('mysql:host=localhost;dbname=pokemon','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  $db->query("SET NAMES UTF8");
	if(!empty($_SESSION)){
					$users = $db->prepare("SELECT * FROM users WHERE pseudo = :pseudo");
					$users->bindValue(':pseudo', $_SESSION['pseudo'], PDO::PARAM_STR);
					$users->execute();
						$user = $users->fetch(PDO::FETCH_OBJ);
					$_SESSION['id'] = $user->id;
					$_SESSION['pseudo'] = $user->pseudo;
					$_SESSION['mdp'] = $user->password;
					$_SESSION['mail'] = $user->mail;
					$_SESSION['argent'] = $user->argent;
					$_SESSION['rang'] = $user->rang;
					$_SESSION['avatar'] = $user->avatar;
					$_SESSION['map'] = $user->map;
					$_SESSION['chance'] = $user->chance;
					$_SESSION['point'] = $user->point;
          $_SESSION['vu'] = $user->vu;
Voilà un exemple avec PDO.

Re: mise a jour variable de session

Posté : 16 nov. 2013, 17:07
par moogli
Modération :
Pourquoi relancer des sujets, clos ou abandonnés depuis longtemps ?
- pour augmenter artificiellement ton nombre de posts ?
- pour perturber le classement des messages dans le forum ?
- pour te prouver que tu existes ?

Si tu n'as pas d'élément nouveau et enrichissant à apporter, c'est inutile.

Merci de te préoccuper davantage des sujets récents.