Update, enregistrement plus

Eléphant du PHP | 129 Messages

26 mai 2009, 14:26

Bonjour,
Je suis confronter a un probleme d'update pour l'enregistrement d'un score.
J'explique, si le joueur enregistre un nouveau score, on l'enregistre dans la bd.
Jusqu'a pas de problème ça enregistre.
Exemple le joueur fait un score de 480.

Si le joueur rejoue qu'il face un score inferieur ou superieur, exemple : 700 ou 390.
On enregistre quand même le score.
On ajoute le score en plus qu'il a fait, avec celui qui est enregistrer dans le champ.
480 qui était enregistrer + 700
total : 1180

Ma requette enregistre le score, mais en faite elle change a chaque fois le score, je doi faire une erreur avec le != est different de.
Si vous avez une petite idée, merci d'avance.
<?php
$score= $_POST['score']; 
$temps = time();
$sql = 'SELECT * FROM game WHERE rank_player = '.$_SESSION['memb'].' AND rank_game = "'.$game_name.'"';
	$query  = mysql_query($sql)or die ("Pb requette".mysql_error());	
	if(mysql_num_rows($query) > 0)
	{
		$line = mysql_fetch_assoc($query);
		if($line['rank_score'] != $score)
		{		
			$sql = 'UPDATE game SET rank_score = '.$score.', rank_date = '.$temps.'  WHERE rank_player = '.$_SESSION['memb'].' AND rank_game = "'.$game_name.'"';
			$query  = mysql_query($sql)or die ("Pb requette".mysql_error());
	
			$sql = 'SELECT game_id FROM biz_games WHERE game_filename = "'.$game_name.'"';
			$query  = mysql_query($sql)or die ("Pb requette".mysql_error());
			$gameid = mysql_fetch_assoc($query);
			}

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

26 mai 2009, 15:33

Ton " != " est surtout erroné dès lors que le joueur pourrait faire le même score deux fois de suite, et tu n'enregistrerais alors pas son total. A moins que ce soit ce que tu souhaites, mais dans ce cas, un joueur qui fait 100, puis 300 (donc 400 au total) et qui enfin fait 400 (à force de perséverer), bah le 400, tu lui comptes pas, vu qu'il y a déjà un score de 400 en base (c'est ballot, il aurait fait 390 ou 410, on le comptabilisait ;))

En fait, ce qu'il te manque c'est la valeur initiale à mettre à jour. Ton update écrase la valeur du champ "rank_score" avec la variable $score au lieu de l'ajouter.
$sql = "UPDATE game SET rank_score = rank_score + ".$score.", rank_date = ".$temps."  WHERE ..... "; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 129 Messages

26 mai 2009, 20:01

Merci Ryle de ton aide !
Oui en effet j'avais un doute justement avec les conditions, j'avais vraiment pas pensez a ce que tu viens de dire, pour moi c'était claire le != est différent de.
Alala j'ai vraiment encore a apprendre en php.
Mais heureusement que vous êtes la :D