Avatar billede onlineman Nybegynder
30. juni 2002 - 23:35 Der er 10 kommentarer og
2 løsninger

Postkort - unikke nr. og urls!

Jeg forsøger, at kreere et postkort script fra bunden af, men er i tvivl om hvorledes man script-mæssigt tildeler hvert postkort et unikt nr. og url som kun kan læses af de personer som kortet vedrører!
Jeg agter, at bruger mysql til opgaven, men alle relevante forslag indenfor PHP er velkomne!
På forhånd tak for evt. svar!
Avatar billede Slettet bruger
30. juni 2002 - 23:45 #1
Hvis du vil anvende en database, kan du oprette en kolonne af eksempelvis typen INT (integer). Dette vil være postkortenes ID. Laver du denne kolonne til et nøgle, kan der ikke eksistere 2 række i tabellen med samme værdi for denne kolonne. Således er hvert kort unikt bestemt ved dette ID. I mySQL (og mange andre DBMS) kan du få systemet (mySQL) til at genere disse ID'er for dig automatisk. Denne funktion hedder auto_increment, og tilføjes som funktion, når kolonnen oprettes.

Der findes mange gode mySQL tutorials på nettet, der forklarer dette og mere.

Jeg går udfra, at der sendes en URL til modtageren af kortet pr. mail? I denne URL kan du medsende en hemmelig nøgle som parameter. Uden denne nøgle, gives der ikke adgang til det pågældende postkort. Dvs. når du gemmer et postkort i databasen (når en person har oprettet et kort), så gemmer du sammen hermed en nøgle. Den URL modtageren af kortet får indeholder ID'et på kortet og nøglen til dette. Disse skal matche før han får adgang.

Den URL kunne se ud som : http://www.onlineman.dk/viskort.php?kortID=5&key=dcvcv45df32dff6
Avatar billede onlineman Nybegynder
01. juli 2002 - 01:05 #2
mercur 8> Den med autoincrement og kort ID er jeg med på, men hvordan får jeg automatisk via PHP genereret den unikke nøgle som skal virke som brugernes password??
Avatar billede Slettet bruger
01. juli 2002 - 01:15 #3
Brugerens password?

Du bliver vist lige nødt til at fortælle, hvordan du havde forestillet dig, at systemet skulle virke.

Jeg lægger op til, at når en afsender har sammensæt et postkort og sendt det afsted, så modtager modtageren en mail med et link, som han skal følge.

Er det sådan det skal virke? Som du skriver, lyder det som om, du vil have brugeren skal logge manuelt ind?
Avatar billede Slettet bruger
01. juli 2002 - 01:21 #4
For at genere en nøgle kan du eksempelvis bruge:

srand((double)microtime()*1000000);
$key = substr(md5(rand(0,9999999)), 0, 10);
Avatar billede Slettet bruger
01. juli 2002 - 01:22 #5
Denne gemmer du så i databasen sammen med det pågældende kort, og vedhæfter URL'en.
Avatar billede Slettet bruger
01. juli 2002 - 01:29 #6
For en god ordens skyld:

I min kommentar 01:15:39 misforstod jeg dig. Tror vi er enige om, at en kombination af kortID og key, er hvad der skal til :)
Avatar billede sukos Juniormester
01. juli 2002 - 01:50 #7
Vil det ikke være nemmest at bruge sessions?

d.v.s. siden hvor afsender vil "komponere" et kort, starter med
session_start();
og det giver så session_id(); lig med sessionnummer, som kan lægges i databasen, og sendes med som link. Når mailen så sendes bruges en
session_destroy();
så afsender kan sende et nyt kort hvis det ønskes, med et nyt sessionnummer.

I mailen ville linket jo så være noget med:

server/postkort.php?id=sessionnummer

og så ud fra det sessionnummer vil der blive lavet et udtræk fra databasen.
Avatar billede sukos Juniormester
01. juli 2002 - 01:53 #8
linket ville så være noget med:

server/postkort.php?id=e5426d3d4c99ff91c987df485d9389e9
Avatar billede onlineman Nybegynder
01. juli 2002 - 08:59 #9
Mange tak for de hurtige svar! Jeg uddeler points snarest, men ville alligevel gerne have nedennævnte besvaret først!
mercur8>
Vedr. misforståelse: den er der slet ikke :) (du forstod altsammen rigtigt!!)Du skriver:

srand((double)microtime()*1000000);
$key = substr(md5(rand(0,9999999)), 0, 10);

$key forstår jeg, men hvad gør: srand((double)microtime()*1000000);??

Din rand (0,9999999) range giver iøvrigt følgende fejl : Invalid rand() range! Jeg har checket med getrandmax() og får svaret 32767. Er der nogle muligheder for, at øge dette tal til f.eks. det du foreslår? Min php version er 4.0.6
Avatar billede Slettet bruger
01. juli 2002 - 16:12 #10
void srand ( int seed)
Seeds the random number generator with seed.

Dette betyder på dansk, at du vælger hvor i række af "tilfældige" tal, du vil starte.

Læs mere: http://www.php.net/manual/en/function.srand.php

Nogle skriver at 32767 er en limit i Windows, det synes jeg lyder lidt underligt (kommentarer nederst på siden): http://www.php.net/manual/en/function.rand.php

Du kan jo bruge rand(-32767, 32767) i stedet. Ellers se i din php.ini, om du kan sætte værdien af RAND_MAX.
Avatar billede onlineman Nybegynder
01. juli 2002 - 16:38 #11
Tak for de indsendte forslag - pointene er fordelt!
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