Update mysql, petit problème.

aneantisseur Messages postés 411 Statut Membre -  
aneantisseur Messages postés 411 Statut Membre -
Bonjour, je suis en train de créer un jeu en php. Donc avec de la vie, de la mana, etc. Logiquement, quand on s'equipe d'un équipement, les stats sont ajoutés aux stats de base. Par exemple, l'equipement ajoute 5 en vie, la vie de base étant de 10, on doit additionner le tout et l'inscrire dans le champ vie de la DB. J'ai fait une fonction pour ca :
function addition($vie, $mana, $force, $vitesse, $defense)
{
$vie_base = mysql_query('SELECT vie FROM avatars WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$vie_array = mysql_fetch_array($vie_base);
$vie_update = $vie_array['vie'] + $vie;
mysql_query('UPDATE avatars SET vie='.$vie_update.'');

$mana_base = mysql_query('SELECT mana FROM avatars WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$mana_array = mysql_fetch_array($mana_base);
$mana_update = $mana_array['mana'] + $mana;
mysql_query('UPDATE avatars SET mana='.$mana_update.'');

$force_base = mysql_query('SELECT force FROM avatars WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$force_array = mysql_fetch_array($force_base);
$force_update = $force_array['force'] + $force;
mysql_query('UPDATE avatars SET force='.$force_update.'');

$vitesse_base = mysql_query('SELECT vitesse FROM avatars WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$vitesse_array = mysql_fetch_array($vitesse_base);
$vitesse_update = $vie_array['vitesse'] + $vitesse;
mysql_query('UPDATE avatars SET vitesse='.$vitesse_update.'');

$defense_base = mysql_query('SELECT defense FROM avatars WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$defense_array = mysql_fetch_array($defense_base);
$defense_update = $defense_array['defense'] + $defense;
mysql_query('UPDATE avatars SET defense='.$defense_update.'');
}

Mais, parce qu'il y en a toujours un, a chaque fois que l'on actualise la page, la fonction fait effet et donc, dans l'exemple précédent, les 5 points de vie sont toujours ajoutés. Donc les petits malins actualiseront toujours la page pour avoir des points de vie élevés.
Ma question c'est : Comment faire pour limiter l'action de la fonction update à une fois par équipement équipé ?

Un grand défi en somme ^^

Merci :)
A voir également:

28 réponses

dodoecchi Messages postés 480 Statut Membre 29
 
il faut que tu mémorise quelque part que tel item a été équipé
comme ça lors de la modif, si x_item_equip = 0 alors x_stat+=5 puis x_item_equip = 1
un truc du genre
pour stocker plusieurs variables dans un champ : http://php.net/manual/fr/function.serialize.php

Dorian
0
aneantisseur Messages postés 411 Statut Membre 18
 
Je vais essayer
0
aneantisseur Messages postés 411 Statut Membre 18
 
Mais en fait ca peut pas aller ta solution, car il faut que la fonction n'agisse qu'une seule fois, et le 0 passe au 1 quand l'item est équipé, pas quand la fonction agit.
0
dodoecchi Messages postés 480 Statut Membre 29
 
attend j'essaye de coder un petit truc :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aneantisseur Messages postés 411 Statut Membre 18
 
J'ai trouvé le truc en fait, enfin je crois, voilà le schéma :

mettre ds une table le nom et les caractéristiques de l'arme avec le pseudo du joueur
on update a la fin de la fonction : 1 à la place de 0
quand c'est 0, la fonction agit, quand c'est 1 elle n'agit plus

Tu penses que ca peut marcher ?
0
dodoecchi Messages postés 480 Statut Membre 29
 
http://codepad.org/REPN90cR
n'hésite pas si tu as des questions

Dorian
0
aneantisseur Messages postés 411 Statut Membre 18
 
Ouai j'en aurais une petite, tu pourrais mettre qqes commentaires ? Je connais le php que depuis 6 mois, j'ai déjà codé un site mais vite fait quoi ^^ Je ne comprend pas très bien ton code.
0
dodoecchi Messages postés 480 Statut Membre 29
 
ok, je commente
un instant alors
0
aneantisseur Messages postés 411 Statut Membre 18
 
Merci
0
dodoecchi Messages postés 480 Statut Membre 29
 
0
aneantisseur Messages postés 411 Statut Membre 18
 
Si on fait ta solution, il faut tout refaire pour les autres caractéristiques ?

Sinon j'avais pensé a un autre truc, plus simple :

On met dans une table le pseudo de l'utilisateur, le nom de l'arme et ses caractéristiques, on met aussi une colonne fonction qui contiendra 0 au départ (0 pour dire que la fonction n'a pas encore agit).
A la fin de la fonction additonne, on update la colonne fonction : 1 à la place de 0 (1 pour dire que la fonction a fait effet).
Quand un champ dont la colonne fonction contient 0, la fonction agit, si la colonne fonction vaut 1, la fonction additionne l'ignore.
Et quand l'utilisateur change d'équipement, l'ancienne entrée est détruite et une nouvelle apparait. Ca m'a l'air fesable mais je n'arrive pas a trouver comment faire pour dire à mysql "Quand cette variable (l'équipement) change, tu détruis l'entrée correspondant à son nom".
0
aneantisseur Messages postés 411 Statut Membre 18
 
Ou alors, on ne détruit pas l'entrée, mais on l'Update.
0
dodoecchi Messages postés 480 Statut Membre 29
 
c'est à toi d'implémenter la gestion de différents équipement
comme par exemple tu prend le tableau stocké puis tu le manipules de manière à ne retirer/ajouter que l'equipmt manipulé
0
aneantisseur Messages postés 411 Statut Membre 18
 
Ba j'ai commencé mon idée à moi (Je ne comprenais pas trop la tienne, désolé).
J'ai écris ca
$test_carac_equip_brut = mysql_query('SELECT * FROM items_equip WHERE pseudo=\''.$_SESSION['pseudo'].'\'');
$test_carac_equip = mysql_fetch_row($test_carac_equip_brut);
$test_carac_equip_row = $test_carac_equip[0];
$zero = 0;
if ($test_carac_equip_row == 0)
{
$query_insert_casque = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_casque_array['nom']."', '".$montre_casque_array['vie']."', '".$montre_casque_array['mana']."', '".$montre_casque_array['force']."', '".$montre_casque_array['vitesse']."', '".$montre_casque_array['defense']."', '".$zero."')") or die(mysql_error());

$query_insert_torse = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_torse_array['nom']."', '".$montre_torse_array['vie']."', '".$montre_torse_array['mana']."', '".$montre_torse_array['force']."', '".$montre_torse_array['vitesse']."', '".$montre_torse_array['defense']."', '".$zero."')");

$query_insert_gant = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_gant_array['nom']."', '".$montre_gant_array['vie']."', '".$montre_gant_array['mana']."', '".$montre_gant_array['force']."', '".$montre_gant_array['vitesse']."', '".$montre_gant_array['defense']."', '".$zero. "')");

$query_insert_botte = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_botte_array['nom']."', '".$montre_botte_array['vie']."', '".$montre_botte_array['mana']."', '".$montre_botte_array['force']."', '".$montre_botte_array['vitesse']."', '".$montre_botte_array['defense']."', '".$zero. "')");

$query_insert_arme = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_arme_array['nom']."', '".$montre_arme_array['vie']."', '".$montre_arme_array['mana']."', '".$montre_arme_array['force']."', '".$montre_arme_array['vitesse']."', '".$montre_arme_array['defense']."', '".$zero. "')");

$query_insert_bouclier = mysql_query("INSERT INTO items_equip VALUES('', '".$_SESSION['pseudo']."', '".$montre_bouclier_array['nom']."', '".$montre_bouclier_array['vie']."', '".$montre_bouclier_array['mana']."', '".$montre_bouclier_array['force']."', '".$montre_bouclier_array['vitesse']."', '".$montre_bouclier_array['defense']."', '".$zero. "')");
}
else
{
$query_update_casque = mysql_query('UPDATE items_equip SET item='.$montre_casque_array['nom'].', vie='.$montre_casque_array['vie'].', mana='.$montre_casque_array['mana'].', force='.$montre_casque_array['force'].', vitesse='.$montre_casque_array['vitesse'].', defense='.$montre_casque_array['defense'].', equip='.$zero. ')');

$query_update_torse = mysql_query('UPDATE items_equip SET item='.$montre_torse_array['nom'].', vie='.$montre_torse_array['vie'].', mana='.$montre_torse_array['mana'].', force='.$montre_torse_array['force'].', vitesse='.$montre_torse_array['vitesse'].', defense='.$montre_torse_array['defense'].', equip=' .$zero.')');

$query_update_gant = mysql_query('UPDATE items_equip SET item='.$montre_gant_array['nom'].', vie='.$montre_gant_array['vie'].', mana='.$montre_gant_array['mana'].', force='.$montre_gant_array['force'].', vitesse='.$montre_gant_array['vitesse'].', defense='.$montre_gant_array['defense'].', equip='.$zero. ')');

$query_update_botte = mysql_query('UPDATE items_equip SET item='.$montre_botte_array['nom'].', vie='.$montre_botte_array['vie'].', mana='.$montre_botte_array['mana'].', force='.$montre_botte_array['force'].', vitesse='.$montre_botte_array['vitesse'].', defense='.$montre_botte_array['defense'].', equip=' .$zero.')');

$query_update_arme = mysql_query('UPDATE items_equip SET item='.$montre_arme_array['nom'].', vie='.$montre_arme_array['vie'].', mana='.$montre_arme_array['mana'].', force='.$montre_arme_array['force'].', vitesse='.$montre_arme_array['vitesse'].', defense='.$montre_arme_array['defense'].', equip=' .$zero.')');

$query_update_bouclier = mysql_query('UPDATE items_equip SET item='.$montre_bouclier_array['nom'].', vie='.$montre_bouclier_array['vie'].', mana='.$montre_bouclier_array['mana'].', force='.$montre_bouclier_array['force'].', vitesse='.$montre_bouclier_array['vitesse'].', defense='.$montre_bouclier_array['defense'].', equip='.$zero. ')');
}


Et le problème c'est que ca ne veut pas marcher pour l'update. Ca marche parfaitement pour INSERT INTO mais pas pour Update, ca fait comme si ca n'existait pas :s
Qu'est-ce qui ne vas pas ?
0
aneantisseur Messages postés 411 Statut Membre 18
 
Réglé, j'avais marqué juste SELECT et pas SELECT COUNT

EDIT : Il ne veut toujours pas Update :s
0
aneantisseur Messages postés 411 Statut Membre 18
 
Apparement il y a une erreur de syntaxe dans les requetes UPDATE.
0
dodoecchi Messages postés 480 Statut Membre 29
 
@post 11 : non, c'est pas du tout ce qu'il faut faire...

qu'est ce que tu ne comprend pas au juste dans ma méthode?
0
aneantisseur Messages postés 411 Statut Membre 18
 
Un peu tout :s
0
dodoecchi Messages postés 480 Statut Membre 29
 
tu veux bien venir sur msn ?
tu prends mon pseudo et tu rajoutes hotmail.com
0
aneantisseur Messages postés 411 Statut Membre 18
 
On peut faire ca après manger ? ^^ Vers... 20 heures ?
0