fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007
-
26 juin 2006 à 20:15
fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007
-
27 juin 2006 à 16:33
Bonjour,
j'ai un problème simple qui consiste à créer un ID unique en variable de session, j'utilise "uniqid" mais le chiffre généré est trop important (16), car j'utilise ce chiffre comme clé primaire pour identifiant de commande et ma banque me limite à 12 caractères... Si une bonne âme connait une solution pour que ce numéro reste unique mais en plus court... ça m'aiderait grandement,
Merci d'avance pour les courageux...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 27 juin 2006 à 12:10
Salut,
? plus courts que quoi ?
un id de session, c'est md5(microtime()) mais ça va faire trop de caractères... si tu prends un substr et que tu mémorises les autres id, alors pas de risques...
In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy
Mon site (articles sur la programmation et programmes)
fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007 27 juin 2006 à 12:38
Merci pour ces réponses, mais je n'arrive pas à m'en dépatouiller avec microtime(), comment obtenir un chiffre avec une longueur constante de 12 caractères ? Pour répondre à coucou747, effectivement je suis ammené à mémoriser cet ID, mais j'aurais aimé économiser une requête vers la base (et le traitement d'erreur associé) pour valider que l'ID est bien unique...
fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007 27 juin 2006 à 14:04
Merci à tous de votre intéret pour mon petit cas,
pour répondre à malalam, je ne veux pas utiliser l'autoincrement car je veux que ce nombre reste une variable temporaire jusqu'à la fin du processus et seulement là je transformerai cette variable en ID unique, ça m'éviteras de créer un enregistrement pour chaque visite...
Enfin pour la suggestion de FhX, j'y ai bien pensé, mais mon niveau en math laisse à désirer et j'ai effectivement des doutes sur l'unicité d'un chiffre basé sur date puis tronqué...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 27 juin 2006 à 14:25
Bah, t'as guère le choix. Faut stocker. Comment tu sauras que c'est unique avec des sessions, si tu n'enregistres pas au fur et à mesure ?
Je m'explique : A vient, fait son bin's, tu lui crées un id. B vient, fait son bin's, tu lui crées un id. Comment tu vas comparer A_id et B_id ? En plus, une fois insérés dans ta base, tu n'auras plus la possibilité de savoir si le nouvel id créé à jour + x est présent ou non dans ta base, à moins que ce ne soit un id autoincrement, donc unique, stocké en base.
uniqid était très bien pour ça, en effet. Au passage, chez moi c'est 13 caractères, pas 16. Mais bon, on s'en fout, ça fait trop de ttes façons.
Bref...à mon avis, tu devrais penser à ce qu'a dit FhX :
<?php
echo substr (uniqid (), 0, 12);
?>
si tu supprimes le dernier, il y a à priori peu de chance que tu tombes sur des doublons, à mons que les enregistrements soient vraipment très très rapprochés. ET encore, tu peux stocker ça dans un fichier que tu effaces tous les jours, pour être sûr.
fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007 27 juin 2006 à 16:02
Bon... après plusieurs test, impossible de faire fonctionner uniqid sans paramètre : uniqid();
Par contre ça semble bien fonctionner comme ça : uniqid('',true);
Je voulais savoir si malalam avait testé la commande proposée, car chez moi, ça marche poa... problème de plateforme ? ou de version ? suis sur PC - Windows XP avec EasyPHP 1.8
En tout cas un grand merci à tous !!!
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 27 juin 2006 à 16:19
Suis en php5, qui ne néessite pas le paramètre 'préfixe' (le 1er, ta chaîne vide).
Si tu mets à true, tu as 23 caractères. Bref :
uniqid('', false)
te renverra 13.
Et le substr, 12.
Et oui, j'ai testé ;-)
fredgre
Messages postés5Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention 5 octobre 2007 27 juin 2006 à 16:33
Merci pour le petit détail qui peut avoir son importance. Ceci dit je n'avait aucune arrière pensée sur le fait que tu l'avais testé... ça ressemblait beacoup à doc PHP. Encore merci !