Update mysql, petit problème.
aneantisseur
Messages postés
411
Statut
Membre
-
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 :
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 :)
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:
- Update mysql, petit problème.
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Hp bios update ✓ - Forum BIOS
- Petit point vert snap ✓ - Forum Snapchat
28 réponses
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
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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
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.
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".
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".
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é
comme par exemple tu prend le tableau stocké puis tu le manipules de manière à ne retirer/ajouter que l'equipmt manipulé
Ba j'ai commencé mon idée à moi (Je ne comprenais pas trop la tienne, désolé).
J'ai écris ca
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 ?
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 ?
@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?
qu'est ce que tu ne comprend pas au juste dans ma méthode?