Hallo allemaal,

Ik zoek een script dat een unieke code maakt, die bestaat uit drie letters gevolgd door 3 cijfers, bijvoorbeeld ABC123 of ACB123 e.d.
Maar die code mag nog niet voorkomen in de database!
Dus als code ABC123 al bestaat, moet hij een ándere unieke code verzinnen.
Als die óók al bestaat moet hij wéér een andere code bedenken enzovoort enzovoort...

Wie kan mij helpen?

Hellolo.

@ Stefan van Iwaarden: Dan moet je oneindig veel if-jes erin zetten, want stel die functie die je daarna maakt bestaat al. Dat moet je dan weer controleren. En bestaat die al, dan moet je wéér controleren.
Dus dit is niet echt een optie.


Oneindig veel ifjes worden in de programmeerwereld veelal in een loop samengevat. Ik denk dat stephan's idee lang niet zo slecht is:

Wat als je het via een while loop aanpakt (ik begrijp dat je liever niet dingen met data erin verwerkt gebruikt?

extreem brakke niet werkende code, maar het gaat om het principe (en het is zondag ochtend, cut me some slack)

function zoeknieuwecode (
while ($found != 1) {
$code = rand();
// zit $code als in de tabel?
mysql_query (select * from tabel where code = $code)
if (mysql_results > 0) {
//nieuwe code zoeken
next;
} else {
return $code
}
}
}
Dan moet je van die $found iets van mysql_num_rows("SELECT code FROM codes WHERE code = '".$code."'") doen ofzo (of een SELECT COUNT(code) as aantal FROM codes WHERE code = '".$code."').

(denk ik)
*sorry, drukte op F5
Ja, zoals ik gisteren al zei, op zich werkt die code die ik gemaakt heb wel, maar volgens mij wordt hij trager naarmate het aantal gegenereerde codes groter wordt.

Het principe is nu:

1) genereer een willekeurige code
2) kijk of hij al bestaat
3) ga net zo lang door tot je een code hebt die nog niet bestaat
4) voeg de code toe

maar vooral punt 3) gaat op een gegeven moment lang duren

eigenlijk zou het beter zo kunnen:
1) maak ALLE codes aan
2) zet ze in een array
3) hussel de array door elkaar
4) geef elke nieuwe bezoeker het volgende element van de array als code
Misschien is het ook wel wat om het IP te coderen met md5, dan krijg je geen code van 3 letters en 3 cijfers, mar heb je wel altijd een unieke code (lijkt mij).

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$md5 = md5($ip);
echo "Jouw unieke code is: " .$md5;
?>
Jip schreef op 23.10.2005 12:25
Misschien is het ook wel wat om het IP te coderen met md5, dan krijg je geen code van 3 letters en 3 cijfers, mar heb je wel altijd een unieke code (lijkt mij).

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$md5 = md5($ip);
echo "Jouw unieke code is: " .$md5;
?>


Voor een unieke code is dat niet voldoende, want wat nu als er twee verschillende mensen lid van je site willen worden vanachter dezelfde computer?
md5(microtime());
Ik denk dat er een hele kleine kans is dat mensen op de 1000ste miliseconde gelijk zijn.
Dan heb ik ook een oplossing... De username coderen met md5, die mag immers niet (meestal niet) meer dan 1 keer voorkomen...
Jelmer schreef op 23.10.2005 12:32
md5(microtime());
Ik denk dat er een hele kleine kans is dat mensen op de 1000ste miliseconde gelijk zijn.


Precies, zo doe ik het dus ook altijd. Voor een 100% waterdichtheid moet je toch naar een van tevoren gegenereerde code toe denk ik. Zie mijn eerdere post.

edit: het is natuurlijk de 1000ste seconde, OF de milliseconde ;-)
Jip schreef op 23.10.2005 12:34
Dan heb ik ook een oplossing... De username coderen met md5, die mag immers niet (meestal niet) meer dan 1 keer voorkomen...


Ja, of de combi user-pass emdeevijven :-)

Reageren