E-commerce et n° de commande

Résolu
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006 - 5 mai 2006 à 08:51
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006 - 5 mai 2006 à 13:18
Bonjour,

Je suis en train de developper une boutique en ligne, tout mon processus est mis en place et jusqu'à la validation de la commade tout est ok.
Mon souci est que je voudrais générer des numéros de commandes d'au moins 6 caractères et si possible alphanumérique, mais la méthode me manque, je vois ce que je veux faire mais j'ai du mal à voir par où commencer. Dans la majeur partie des forums ou codes que j'ai consulté il n'y avait rien de spécifier à ce sujet, tout le monde se bornait à mettre en autoincrement le numero de la commande.
Mais j'aimerai faire un truc "bien" voir qui reprenne la suite des numéros de comandes qu'il y a sur la boutique du site déjà existente pour pas qu'il y ait de creux pour la compta. Les numeros sur l'ancienne boutique sont Alpha numérique avec au moins 6 caractères.

Si quelqu'un à une méthode à me proposer,

Merci d'avance !

10 réponses

cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
5 mai 2006 à 12:03
Oups, j'ai oublier de commenter ^^'

Bon je t'explique :

//-----------------------

$chaine = "AA999999";//ceci est une attribution de variable fait au bol.Tu peux très bien aussi affecter une valeur que tu a pris depuis une base MySQL.

//----------------------D'abord j'extrait le code ASCII des deux lettre du début pour pouvoir les "incrémenter" si il le faut

$debut1 = ord(substr($chaine,0,1));
$debut2 = ord(substr($chaine,1,1));

//----------------------Je teste si la section xxxxxx + 1 est plus grande que 999999

if(substr($chaine,2)+1 > 999999) {
//-----------c'est le cas donc j' "incremente" ma lettre
$debut2 ++;

//-----------Je teste la valeur de mon code ASCII
if($debut2 > 90) {

//--------Plus grand que 90 donc on a passe Z
$debut2 = 65; //On attribue la valeur de A
$debut1 ++; //On incrémente la lettre suivante

}
//-----------On refait la chaine du numéro de commande
$chaine = chr($debut1).chr($debut2)."000000";

}else {
//-----------Sinon on se content d'incrémenter le chiffre de fin
$chaine = substr($chaine,2);

$chaine ++;

$chaine = chr($debut1).chr($debut2).sprintf("%06d",$chaine);

}
//-------------Et on affiche notre numéro de commande
echo $chaine;

Spyro666 contre le 555
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
5 mai 2006 à 09:14
Fait un numéro de commande avec time() et/ou microtime().

Ex :

$n_com = substr(time(),3) . substr(micrtotime(),0,10);

$n_com = substr (hexdec($n_com),2);

les numéros de commandes vont se suivre sans être exactement à la suite et si tu veux faire des numéro de commandes plus grand que 6 (genre 8), il te suffit d'enlever dans la dernière ligne le substr (...).

Voilà

Spyro666 contre le 555
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006
5 mai 2006 à 09:25
Merci Spyro666, mais j'ai deux petites questions pour ta méthode :

1 - Il me génère un numéro comme celui ci :
49944727581E+018

Comment enlever le +018 ?

2 - D'autre par je voudrais par exemple des numéro qui se suivent quand même genre (sur 8 caractères c'est mieux je pense) :

commande 1 : AA000001

commande 2 : AA000002

Ensuite quand il arrive au numéro AA999999, la commande suivante sera : AB000001

Voila.... J'espère que mon explication est clair, parce que je suis pas encore bien réveillée !
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
5 mai 2006 à 11:27
C'est pour cette raison que j'ai mis le substr(time(), 3), pour réduire la chaine de 3 caractère afin d'éviter ce problème.

Bon comme tu me le présente la c'est un comptage deci-hexadecimal... C'est un peu complexe mais je pense que je peux te programmer ça.

Spyro666 contre le 555

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006
5 mai 2006 à 11:30
Merci c'est sympa de ta part !

Par contre si ca t'ennui pas, je te poserai surement d'autre questions par la suite, pour que je comprenne comment ca fonctionne

Encore merci, c'est un truc que j'ai encore pas fait et je voyais pas du tout par quel bout le prendre ! ^^
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
5 mai 2006 à 11:47
Voilà ce que ça donne :
<?php
$chaine = "AA999999";

$debut1 = ord(substr($chaine,0,1));
$debut2 = ord(substr($chaine,1,1));

if(substr($chaine,2)+1 > 999999) {

$debut2 ++;

if($debut2 > 90) {

$debut2 = 65;
$debut1 ++;

}
$chaine = chr($debut1).chr($debut2)."000000";

}else {

$chaine = substr($chaine,2);

$chaine ++;

$chaine = chr($debut1).chr($debut2).sprintf("%06d",$chaine);

}
echo $chaine;
?>

Ca fonctionne jusqu'a 67M de commandes, je pense que ça devrait suffir pour le premier mois ^^' Sinon je peux encore étendre le nombre de facture d'un facteur 26

Spyro666 contre le 555
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006
5 mai 2006 à 11:54
Oh Lord, Oh my God !

J'pige rien ...
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006
5 mai 2006 à 12:09
Ah oui merci, ca va mieux !

Donc en définitive, en reprennant ce que tu as fait, je n'aurais qu'a récupérer le dernier numéro de commande dans la table mysql et je l'attribut à la variable $chaine qui ensuite est testée :
1- Au niveau des lettres de début
2-au niveau du numéro 000000

Ensuite, si j'ai tout suivi, si la lettre est a Z et que le numero est à 999999, ca me passe le truc en suivant et la prochaine commande aura le numéro :
AB000001

J'ai bien tout compris ?

Encore merci pour ton code, j'ai mal à la tête c'est normal ??
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
5 mai 2006 à 12:16
C'est presque ça. En fait d'abord je teste la valeur XXXXXX pour savoir si je dois ou non incrémenter la lettre, si c'est le cas je le fais et je regarde que le code ascii ainsi obtenu n'est pas plus grand que le code ascii de Z (soit 90). Si il est plus grand j'incrémente la 2e lettre et je définit le code ascii de la première à 65 (soit la valeur de A).

Donc si le numéro précédent est AA999999 le suivant sera AB000001, si le numéro est AZ999999 le suivant est BA000000.

Spyro666 contre le 555
murrigane Messages postés 88 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 19 mai 2006
5 mai 2006 à 13:18
oki ! Ben je te remercie beaucoup je pense que je vais arrivé à me dépatouiller avec ça !
Rejoignez-nous