Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1755 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Transaction sur plusieurs scripts php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transaction sur plusieurs scripts php

n°1642333
Loizo
Posté le 13-11-2007 à 17:19:21  profilanswer
 

Bonjour,
 
je suis en train de réaliser un module de reservation et j'ai un petit probleme.  
Lorsqu'un client fait une reservation j'aimerais enregistrer dans la bd qu'une reservation a été faite pour eviter qu'un autre client se connecte et lui pique la place entre temps, logique quoi. Le probleme est qu'il est possible qu'un client commancant le processus de reservaton quitte son navigateur et donc je risque d'avoir des données inutiles dans ma bd.
Je travaille avec php 5 et mysql (base InnoDB) et j'aimerais démarrer une transaction au debut du process de resa puis la terminer plusieurs scripts plus loin... Mais je ne suis pas sur que ca soit possible surtout que je fais plusieurs requetes entre temps :/
 
Sinon quelle autre solution voyez vous ?
 
Merci

mood
Publicité
Posté le 13-11-2007 à 17:19:21  profilanswer
 

n°1642403
NewsletTux
<Insérez ici votre vie />
Posté le 13-11-2007 à 19:36:47  profilanswer
 

les sessions ... ou un objet "réservation" (POO) qui ne valide la réservation qu'à la "fin" c.à.d. une commande que le visiteur enclanche pour réellement écrire dans la base de données (que ce soit en POO ou en sessions d'ailleurs)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1642409
Loizo
Posté le 13-11-2007 à 19:42:54  profilanswer
 

Oui c'est ce que j'avais prévu mais la premiere chose que peut faire un utilisateur sur le site c'est checker si il y a des disponibilité. Et moi pour le renseigner je regarde la base de données. Donc j'ai besoin d'enregistrer temporairement les reservations en cours... C'est pour ca que j'ai pensé aux transactions...

n°1642420
NewsletTux
<Insérez ici votre vie />
Posté le 13-11-2007 à 20:28:42  profilanswer
 

eh bien rajoute un champ "valide" ...
un gars se pointe, il ajoute une ligne dans la BDD et lorsqu'il valide sa place, tu mets ce champ à 1 (par exemple)
 
comme ça au listing tu peux savoir le nombre de places validées, et le nb de places en cours.
Sachant aussi que tu peux effectuer une requête qui supprime toutes les places non validées sur lesquelles ya pas eu d'action depuis 30 min par exemple (donc un champ date/time)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1642520
Loizo
Posté le 14-11-2007 à 01:53:33  profilanswer
 

J'y ai pensé mais c'est justement le probleme des réservations non validé qui restent en bd. Apres on peut effectivement les supprimer par une action manuelle ou un script qui les supprimer mais ca reste de la bidouille. Je cherchais un truc un peu mieux mais bon si je ne trouve rien d'autres je ferais un truc de ce style...
 
Pour la requete qui supprime tu la lances automatiquement ?

n°1642581
NewsletTux
<Insérez ici votre vie />
Posté le 14-11-2007 à 10:12:26  profilanswer
 

tu peux soit la lancer automatiquement (via une tâche CRON par exemple) soit à l'arrivée d'un utilisateur : lorsque la page index.php (en supposant que telle soit la page d'"entrée" ) s'exécute, elle contient une requête DELETE FROM blabla WHERE { condition }; ainsi lorsque quelqu'un arrive, d'office tout est effacé.
A la rigueur, tu peux également le faire sur chacune des pages qu'il consulte, mais ça multiplie les requêtes SQL (cas de plein d'utilisateurs simultanés) et je ne suis pas sûr que ça soit judicieux.
 
Par Cron, tu le fais automatiquement, qu'il y ait des gens en cours de réservation ou pas.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1642587
sircam
I Like Trains
Posté le 14-11-2007 à 10:24:46  profilanswer
 

Ne mélangeons pas tout. Une transaction au sens DB ne doit pas s'étendre sur tout le processus de réservation vu par l'utilisateur!

Loizo a écrit :

J'y ai pensé mais c'est justement le probleme des réservations non validé qui restent en bd. Apres on peut effectivement les supprimer par une action manuelle ou un script qui les supprimer mais ca reste de la bidouille.


C'est une façon parfaitement valide de faire, via un script exécuté à intervalle régulier. En entreprise, on parlera de "batch job" qu'on fait tourner la nuit. :sol:
 

Loizo a écrit :

Pour la requete qui supprime tu la lances automatiquement ?


Oui!
 

NewsletTux a écrit :

soit à l'arrivée d'un utilisateur : lorsque la page index.php (en supposant que telle soit la page d'"entrée" ) s'exécute, elle contient une requête DELETE FROM blabla WHERE { condition }; ainsi lorsque quelqu'un arrive, d'office tout est effacé.
A la rigueur, tu peux également le faire sur chacune des pages qu'il consulte, mais ça multiplie les requêtes SQL (cas de plein d'utilisateurs simultanés) et je ne suis pas sûr que ça soit judicieux.


Je suis sûr que ça n'est pas judicieux.  Ca, c'est effectivement du bricolage. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1642683
Loizo
Posté le 14-11-2007 à 13:29:50  profilanswer
 

OK donc il me faut un moyen de lancer une requete automatiquement, je ne suis pas sur que l'hebergeur utilisé le permette...  
Je vais me renseigner, merci :jap:
 
Edit : Apres verif mon hebergeur propose un service type Cron. Donc pour récapitulier, j'enregistre dans la bd la reservation avec un flag "complete" a 0 que je passe à 1 quand le processus complet de reservation est terminé. Et la nuit j'efface toutes les resa dont le flag "complete" est a 0 ?  
Comment savoir qu'un enregitrement est dans la bd depuis moins de 30mn par exemple ?

Message cité 1 fois
Message édité par Loizo le 14-11-2007 à 13:39:33
n°1642770
sircam
I Like Trains
Posté le 14-11-2007 à 14:59:55  profilanswer
 

Loizo a écrit :

Comment savoir qu'un enregitrement est dans la bd depuis moins de 30mn par exemple ?


Sur base de la date du record, bien sûr.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1642841
NewsletTux
<Insérez ici votre vie />
Posté le 14-11-2007 à 16:01:11  profilanswer
 

NewsletTux a écrit :


Sachant aussi que tu peux effectuer une requête qui supprime toutes les places non validées sur lesquelles ya pas eu d'action depuis 30 min par exemple (donc un champ date/time)


 
oui il faut effectivement penser à l'y inclure également.


---------------
NewsletTux - outil de mailing list en PHP MySQL
mood
Publicité
Posté le 14-11-2007 à 16:01:11  profilanswer
 

n°1642930
Loizo
Posté le 14-11-2007 à 18:35:50  profilanswer
 

Ah oui logique :D
Ok je vais faire comme ca alors, merci :)

n°1642934
leflos5
On est ou on est pas :)
Posté le 14-11-2007 à 18:47:34  profilanswer
 

Procédure stockée pour la transaction de réservation. Cette même procédure fera le ménage à chaque appel pour des réservations avortées (délai suffisament grand pour que ça laisse le temps d'aller pisser en cours de réservation :D)

n°1642950
sircam
I Like Trains
Posté le 14-11-2007 à 19:16:29  profilanswer
 

Non. On ne sait jamais si la personne reviendra des chiottes.
 
Le nettoyage des réservations avortées est une considération disctincte du flux de la réservation. Il n'est pas souhaitable de les coupler, en l'espèce de conditonner le nettoyage (back-end) à un flux utilisateur.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1643030
Loizo
Posté le 14-11-2007 à 21:00:11  profilanswer
 

Ouais surtout qu'entre temps la personne peut avoir besoin de créer un compte et on lui demande quelques infos qu'il n'a peut etre pas sous la main donc je ne veux pas risquer d'effacer une resa en cours :/


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Transaction sur plusieurs scripts php

 

Sujets relatifs
Compiler plusieurs variables [simple]batch: Découper un fichier en plusieurs fichiers
[PG] Récupérer plusieurs fois plusieurs morceaux d'une tableAffichages plusieurs images
verifier plusieurs champs d'un formulaire dans une meme fonction[PHP/HTML] formulaire avec plusieurs champs hidden
[ACCESS] Développer à plusieurs sur le même fichiergader les mêmes dates de transation sur plusieurs colonnes
zippage de fichiers et répertoires dans plusieurs fichiers zip (Résolutransaction en php/mysql : comment gerer 1 trs ds plusieurs scripts ?
Plus de sujets relatifs à : Transaction sur plusieurs scripts php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR