Bonjour à tous !

Je suis en train de créer le site de ma boîte où le paiement en chèque est accepté.

Pour identifié la commande à la réception du chèque, nous demandons au client d'y inscrire un numéro au dos du chèque, j'aimerais qu'il soit composé de l'ID de la commande (via la BDD), seulement, nous donnons le numéro à inscrire au dos du chèque avant la validation du paiement et donc avant l'insert dans la BDD.

Problème : Si deux clients font une commande au même moment, nous risquons d'avoir un conflit d'ID de commande.

Comment faire pour générer un numéro

J'espère que mon explication est assez claire... :/

4 réponses


Natà
Réponse acceptée

Alors, je vais peut-être dire des bêtises et il y a peut-être une solution plus simple mais voilà comment moi je ferais:

Premièrement tu crées un nouveau champ dans ta table que tu nommes "finalisee" par exemple avec une valeur par défaut à 0.
Lorsque le client valide la commande tu l'insères de suite dans ta BDD, ce qui aura pour effet de créer son ID qui ne bougera plus, tu suis la procédure de commande habituelle et ce n'est qu'à la fin, lorsque le client a validé définitivement sa commande que tu passes la champ "finalisee" à 1.

Il y aurait aussi la fonction uniqid() qui va te retourner quelque chose comme 51745c5533cd5 mais ça risque d'être un peu lourd pour l'utilisateur.

laurwin
Auteur
Réponse acceptée

J'y avais en effet pensé, seulement, si la personne revient en arrière, recommence ou ne finalise pas, je risque d'avoir beaucoup d'entrée non finalisée et donc inutile.

Il faudrait peut être supprimer ces lignes mais malheureusement, l'ID étant automatique, l'entrée sera perdue. :/

C'est vrai mais rien ne t’empêches de supprimer les lignes qui n'ont pas été finalisées au bout de x temps.

Comme je l'ai dit tu peux alors rendre un uniqid() à la finalisation, mais je ne sais pas trop quelles sont les limites de cette fonction, si deux commandes sont passées à la même seconde ça peut devenir problématique.

laurwin
Auteur

Bon, j'ai opté pour cette solution ^^
J'sais pas si c'est la meilleur mais si quelqu'un d'entre vous avait une meilleur idée, je suis intellectuellement intéressée :p

Merci Natà pour ton aide :)