2010-08-24 7 views
2

bonjour cher Je suis nouveau en PHP et JavaScript. J'ai créé un site de réservation en utilisant PHP/JavaScript, mais j'ai un problème lorsque deux personnes ou plus sélectionnent la période (pour la réservation) qui rend le produit concurrent conflictuel. Alors s'il vous plaît aider à résoudre ce problème avec le code PHP/JavaScript.Comment résoudre les conflits PHP?

+3

S'il vous plaît nous montrer votre code! – DLH

+2

Je ne vois pas pourquoi cette question devrait être fermée, c'est une manière mal formulée de demander comment résoudre les conflits de données dans un système de réservation simple. –

+1

@DLH: cela n'implique-t-il pas plus de solution de conception que de solution de codage (même s'il demande du code)? Est-ce qu'un code complet pour gérer cela pourrait tenir dans quelques lignes? –

Répondre

7

Bonjour cher

Le problème que vous avez est une commune en particulier dans les systèmes de réservation. Il y a quelques choses que vous pouvez faire pour résoudre ce problème, mais demander à quelqu'un de poster du code gratuit serait impossible sans voir votre code en premier, alors pour l'instant nous devrons simplement vous fournir des idées.

Je suppose que les visiteurs réservent une marge que je nommerai «sièges».

réserve Seat

utilisateur veut réserver un siège. Réglez le statut des sièges sur réservé. Cela apparaîtra sur les autres écrans des utilisateurs comme déjà réservé. La réservation expirera dans un délai de 30 minutes au cas où le visiteur n'en voudrait plus. Soyez prudent avec l'abus de cela, un visiteur pourrait «réserver» tous les sièges en permanence, empêchant quiconque d'acheter des billets.

premier arrivé, premier servi

permettre à chacun de réserver le siège, celui qui paie pour elle doit d'abord, puis les autres personnes doivent ressaisie un siège. Cette option n'est pas très conviviale mais facile à mettre en œuvre.

+0

@Tom Gullen: bonne réponse, mais 1er arrivé 1s servi est-ce facile ?! Si le processus A met à jour la ligne DB en disant "SEAT BOOKED", et que le processus B fait de même, ils réserveraient le même siège. Utilisez-vous SQL trasaction atomique pour revenir en arrière? Pourriez-vous expliquer un peu, c'est intéressant. –

+0

Vous ne changeriez simplement pas le statut du siège jusqu'au paiement. Lorsque le paiement est effectué, avant de traiter le paiement, vous vérifiez s'il est réservé, si c'est le cas, demandez de resélectionner un siège, si ce n'est pas le cas, définissez-le comme étant acheté puis effectuez le paiement. Rétablir le siège pour être libre si le paiement échoue. Cela serait nul pour les événements populaires où quelqu'un pourrait devoir redémarrer plusieurs fois. –

+0

@ Tom Gullen: ne peut pas être en désaccord plus sur votre dernier commentaire. C'est exactement le problème auquel nous sommes confrontés ici. Comment pouvez-vous être sûr que nous évitons cela: le processus A lit la ligne et voit "SEAT NOT BOOKED", en même temps le processus B (en cours d'exécution) fait la même chose et voit le même "SEAT NOT BOOKED" sur et mettre à jour la même ligne DB avec la même valeur "BOOKED" et maintenant les utilisateurs de remorquage ont réservé le même siège. Redaing 1er la ligne DB ne résout pas le problème de la réservation de la concurrence. C'est pourquoi j'ai demandé à expliquer. –

Questions connexes