Avatar billede lone_a_p Praktikant
21. februar 2012 - 22:28 Der er 9 kommentarer og
1 løsning

OrdreId generering

Kære eksperter,

Jeg vil gerne høre, om der findes en bedre måde at generere et ordreId end andet.

Hvad gør I? Blot laver fortløbende nummer? Det ville jo betyde, at man skal registrere ordreId allerede inden købet går igennem for ikke at få to identiske??
Jeg har også overvejet at indskrive dato / brugerid / pris i ordreid - måske er det nemmere senere hen? Jeg ved, at man i nogle stregkoder har gemt forståelige data, så det kunne jo være samme princip.

Jeg vil gerne høre, hvad der bliver benyttet rundt omkring.

Mvh Lone
Avatar billede olebole Juniormester
22. februar 2012 - 00:00 #1
<ole>

Ordren bliver formodentlig lagt i en databasetabel. Så er det jo bare at lade id-feltet have autoincrement. Så har ordren helt automatisk et ordreid

/mvh
</bole>
Avatar billede showsource Seniormester
22. februar 2012 - 00:19 #2
og så kan det anbefales at kikke på PDO
http://dk.php.net/manual/en/book.pdo.php
Avatar billede vagnk Juniormester
22. februar 2012 - 13:06 #3
Under alle omstændigheder skal du da registrere et ordrenummer for tid og evighed - sådan da.

Hvis ordrer kan oprettes af flere samtidigt må du i gang med transaction processing hvor man låser tabellen og frigør den nar transaktionen er overstået. På den måde sikrer du dig at der ikke kan være flere ordrer med det samme nummer. Mere om det hvis du har behov.

Hvis du skal bruge nummeret når du opretter ordren (f.eks. i en formular) er #oleboles med autoincrement ikke helt færdig. I så fald skal du starte med at oprette en tom record eventuelt markeret som "under oprettelse" samt anden identifikation og derefter SELECTe den nye ordre så du har det nye genererede ordrenummer.

Som olebole gør opmærksom på kan man lissågodt lade DB lave arbejdet inden man begynder at konstruere krøllede id med dato og alt det andet du nævner.
Avatar billede showsource Seniormester
23. februar 2012 - 00:11 #4
Ud over det fornuftige i at bruge PDO, overså jeg at du havde et brugerid ved bestilling.
Altså man logger ind som bruger først ?
I så fald er det nemt at holde styr på ordren ved at bruge session_id() !
Avatar billede olebole Juniormester
23. februar 2012 - 00:30 #5
@showsource: En session_id er kun anvendelig som en midlertidigt ordreID. Når ordren indsættes i databasen, kan session_id ikke anvendes, da en ordreID jo skal være unik over tid.

I morgen kan du jo sagtens logge ind på Eksperten og få tildelt samme session_id, som jeg har fået tildelt i dag  *o)
Avatar billede olebole Juniormester
23. februar 2012 - 00:33 #6
Til gengæld har du helt ret i, at det gamle MySQL-API er dybt forældet - og at man i stedet bør bruge prepared statements under PDO eller mysqli  =)
Avatar billede showsource Seniormester
23. februar 2012 - 00:49 #7
hmm, session_id() sættes jo ved session_start() og holder kun så længe browservindue er åbent, eller indtil time-out, som sat i php.ini eller i script.

Din "skal være unik over tid" forstår jeg ikke ?
Avatar billede olebole Juniormester
23. februar 2012 - 01:06 #8
Vi er formodentlig enige om, at en ordre skal gemmes i en database. Der skal den have en ordreID, og den skal være unik, så ordrer ikke sammenblandes.

Bruger man en seesion_id til dette formål, er ordreID'en ikke nødvendigvis unik. En session_id er jo karakteriseret ved kun at være unik over et kort tidsrum - idet, der ikke må kunne oprettes to samtidige sessions med samme session_id.

Et felt med autoincrement har en unik værdi over tid - i modsætning til en session_id
Avatar billede timpet Novice
23. februar 2012 - 05:54 #9
Vi kører med et kurv ID, altså indkøbskurven, som jeg antager at du også har, har et ID som følger kunden hele vejen, når så betalingen er sket laves ordre ID'et, og kurv ID er så stadigvæk bundet op på kunden.

Side løbende har vi iøvrigt en tabel med fakturanummer
Avatar billede lone_a_p Praktikant
28. juni 2012 - 21:59 #10
Jeg skal åbenbart kun have ordrenummer på, så jeg undgår fakturanummer.

Der er ikke nogen kurv, da det kun handler om et enkelt køb.

Så jeg har valgt tidspunkt-brugerid
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester