JeuWeb - Crée ton jeu par navigateur
Transactions qui s'annule - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Transactions qui s'annule (/showthread.php?tid=5153)

Pages : 1 2 3 4


RE: Transactions qui s'annule - srm - 05-09-2010

Non c'est foireux comme solution php_addict Smile

Cependant de vérifier au moment ou le joueur X se connecte, si il est n'est pas supendu oui c'est une vérif à faire, mais ne pas vérif tous les joueurs par contre.


RE: Transactions qui s'annule - Sephi-Chan - 05-09-2010

Je ne comprends pas… Si au moment où un joueur achète du temps, tu incrémentes simplement de N jours la date stocké dans ta colonne (de type datetime), par exemple nommée account_expires_at (j'utilise un nom parlant et tu devrais en faire autant).


$query = sprintf(
"UPDATE accounts SET account_expires_at = DATE_DATE(account_expires_at, INTERVAL %d DAY) WHERE id = %d;",
$number_of_payed_days,
$account_id
);

Pour toi, c'est trivial d'afficher une alerte quand il ne reste plus que quelques jours sur le compte du joueur.

En complément, rien ne t'empêche de faire une tâche CRON qui passe toutes les heures et qui suspend les comptes avec une requête type :


$query = "UPDATE accounts SET closed = 1 WHERE account_expires_at < CURRENT_TIMESTAMP();"

Et pour être encore plus strict vis à vis du temps de jeu du joueur, tu peux même exécuter sur chaque page qu'il charge :


$query = sprintf(
"UPDATE accounts SET closed = 1 WHERE id = %d AND account_expires_at < CURRENT_TIMESTAMP();"
$account_id
);


Sephi-Chan


RE: Transactions qui s'annule - watibou - 05-09-2010

(05-09-2010, 12:44 PM)oxman a écrit : Tu ne changes pas le système que je t'ai dit.
Sauf que maintenant dans ta tâche cron tu vas juste vérifier combien de jour il lui reste et lui envoyer un mail pour l'avertir.
Et si son compte est arrivé à expiration tu mets un flag pour dire qu'il est suspendu.

Pas besoin de transaction pour ça.

Au final ce que tu me dit c'est exactement ce que je fait actuellement et je ne fait pas de transaction sur la tache cron encore une fois.
ma transaction est faite au moment ou le client paye pour mettre à jours son compte et qui est faite par une autre requêtes qui est repris en exemple ci-dessus.

Ce que j'essaye de dire c'est que ma requêtes de paiements est bloquer par la tache cron et au moment de payer, le paiement passe correctement et ensuite s'annule et c'est ça qui est étrange, je ne vais pas rentrer dans les détails de savoir pourquoi j'ai besoin ou pas d'une tache cron je pense avoir été clair à ce sujet et je n'ai aucun problème de tache cron c'est simplement la transaction qui devrait bloquer la ligne de la table, la mettre à jours et libérer, et si une requête est en cours (tache cron) effectuer son action juste après, voila c'est tout ce que j'aimerai et c'est ce que "transaction" est sensée faire sinon à quoi d'autres?.

Merci Smile
Waw heureux de se sentir aider vraiment,

Merci sephi-chan, mon problème est très simple pour résumé, si ces deux requêtes sont simultanée une des deux passe à la trappe et est considérer comme accomplie et s'annule après.

alors exemple, je paye, ma tache cron est en cours, il me dit félicitation votre temps de xxx à bien été ajouter, 10 secondes plus tard j'actualise et mon temps est revenu comme avant voilou Smile


RE: Transactions qui s'annule - Sephi-Chan - 05-09-2010

Pourquoi as-tu des requêtes simultanées ? Et pourquoi as-tu plusieurs requêtes tout court ?


Sephi-Chan


RE: Transactions qui s'annule - watibou - 05-09-2010

1 requête = 1 paiement de renouvellement et ajoute dans le champs temps.
2 ièm requêtes = tache cron sur la même table qui change le champs temps, à savoir quel ne s'exécute qu'une fois par jours
si un joueur fait son paiement juste au moment ou le cron s'exécute ce qui peu évidement arriver la table est bloquer par le cron accepte tout de même le paiement lui dit ok maintenant le temps est de xxx mais quelques secondes plus tard ça reviens comme avant le champs s'est remodifier et c'est ça qui me rend dingue ^^, sinon en dehors de ça je n'ai absolument aucun problème de mise à jour de ma bdd uniquement quand le cron tourne.

Merci à vous Smile


RE: Transactions qui s'annule - Sephi-Chan - 05-09-2010

Il y a une faille dans ton système, un truc inutile.
Pourquoi as-tu besoin d'une tâche qui modifie le temps de jeu disponible ? As-tu regardé mes propositions quelques messages plus haut ? Si oui, qu'est-ce qui t'empêche d'utiliser ça ?


Sephi-Chan


RE: Transactions qui s'annule - srm - 05-09-2010

En effet watibou tu n'as rien compris, car tu ne fais pas du tout comme ça.
Sephi-Chan a dit exactement comme moi mais en plus en te donnant des exemples avec des lignes de code.

Alors pose toi 5mn pour comprendre Smile


RE: Transactions qui s'annule - watibou - 05-09-2010

peux être que je devrait expliquer le contexte:

Chaque joueur possède des objets ou autres (en location), ces choses sont temporaires et doivent être renouveler chaque semaine par 2, 3, 4 semaines, le système lui est louer par un joueurs qui sous loue à ses locataires, si ses locataires ne sont pas averti que leur temps est presque terminé alors il ne renouvelle pas et le bailleur lui se retrouve avec une perte si il possède comme certain 1000 ou plus de clients il se retrouve très vite embarrasser car il ne vas pas les contacter lui même un à un.
La tache cron elle, décompte, vérifie, et contact la personne qui est en retard, ils reçoivent au totale 6 alertes par mail ensuite le compte est suspendu et le joueurs sait que ce locataire est expirer, il peut alors soit le contacter en direct ou supprimer son compte depuis son admin. donc flag 1 expirer etc est utiliser pour chaque clients

Le jeu fonctionne avec une interface en flash qui communique avec toutes ces objet et personne inscrite. dans le jeu en flash le joueur clic sur un objet qui est relier au site, ils sont ensuite rediriger vers une page de paiement qui leur propose de payer soit avec leur points disponible sur leur compte ou acheter des points pour renouveler.

Lorsque les americain joue la nuit ils tombent forcement sur la tache cron qui est lancer et de ce faite les transactions ne passent pas forcement à chaque fois car comme je l'ai expliquer dans mes precedents messages je suis actuellement en myisam et je detecte la lenteur de l'execution du script qui m'indique qu'une tache cron est en cours et apres 10 sec je met un message d'erreur en disant le système est occuper et j'annule la requête et l'invite à re-essayer.

Si j'ai voulu utiliser les transactions comme conseiller pour les requêtes de paiements etc c'est pour justement éviter de montrer au joueurs serveur occuper ce qui est gênant pour moi et donc je voulait faire une file d'attente et que quoi qu'il arrive la requête de paiements fonctionne après le cron et quel passe, ce que je n'arrive pas à comprendre et cette questions est toujours sans réponse actuellement est pourquoi ma table se modifie et ensuite elle reviens comme elle était sans aucune erreur ?
Voila ma principale question en sachant que pour mes test j'ai importe toutes ma bdd en locale et je travail en innodb, je n'ai actuellement fait aucune modification pour ne pas perturber le jeu.

Merci pour votre aide Smile
Je comprend bien, je pense juste que je n'arrive peux être pas à me faire comprendre correctement car pour moi changer de stratégie de travail est inconcevable pour le moment


RE: Transactions qui s'annule - srm - 05-09-2010

Ca ne change rien à ce que l'on a dit. C'est toujours valable et nettement plus adapté Smile


RE: Transactions qui s'annule - watibou - 05-09-2010

Je ne doute pas qu'il soit mieux adapter mais ma questions tout autres,

Ma questions est depuis le début de mon premier message:
quel que soit la technique utilisé closed ou temps modifier sur une table, quoi qu'il arrive la bdd met à jours les infos et ensuite annule les changements voilà ma question pourquoi ?

je ne veux pas paraitre de mauvaise foi mais c'est ce que j'essaye d'expliquer depuis le début, après revoir ma façon de travailler je l'accepte sans problème.