mise a jour variable de session

Eléphant du PHP | 250 Messages

17 janv. 2006, 23:04

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. :?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 janv. 2006, 23:10

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 250 Messages

17 janv. 2006, 23:53

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?

Eléphant du PHP | 250 Messages

17 janv. 2006, 23:55

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 janv. 2006, 23:59

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 250 Messages

18 janv. 2006, 23:20

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 janv. 2006, 23:32

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 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

19 janv. 2006, 22:45

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 23:03

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

19 janv. 2006, 23:03

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 _______________________________|
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 250 Messages

19 janv. 2006, 23:16

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.

Kaka`
Invité n'ayant pas de compte PHPfrance

16 nov. 2013, 12:14

<?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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 nov. 2013, 17:07

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.
Il en faut peu pour être heureux ......