Code aan lid toekennen.
uiteraard mag geen twee maal dezelfde code gebruikt worden;
Hoe moet ik dat oplossen?
Als het om een id o.i.d. gaat, dan is het nergens voor nodig, is het voor de sier, dan heb ik over een minuutje of vijf een code voor je (nadat je hebt gezegd dat het echt nodig is, ik ga niet voor jan met de korte achternaam werken :P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function generate_rand_string($length)
{
// begin met een leeg wachtwoord.
$password = "";
// alle mogelijke characters
$possible = "23456789bcdfghjklmnopqrstvwxyzBCDFGHJKLMNPQRSTVW";
// counter op 0
$i = 0;
// Voeg random characters toe, totdat $length is bereikt
while ($i < $length)
{
// Neem een willekeurige character
$char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$password .= $char;
$i++;
}
return $password;
}
?>
function generate_rand_string($length)
{
// begin met een leeg wachtwoord.
$password = "";
// alle mogelijke characters
$possible = "23456789bcdfghjklmnopqrstvwxyzBCDFGHJKLMNPQRSTVW";
// counter op 0
$i = 0;
// Voeg random characters toe, totdat $length is bereikt
while ($i < $length)
{
// Neem een willekeurige character
$char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$password .= $char;
$i++;
}
return $password;
}
?>
dat is dus de functie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$new_code = generate_rand_string(5);
$query = SELECT code FROM users WHERE code = '". $new_code ."';
$result = mysql_query($query);
while(mysql_num_rows($result) != 0)
{
$new_code = generate_rand_string(5);
$query = SELECT code FROM users WHERE code = '". $new_code ."';
$result = mysql_query($query);
}
echo $new_code;
?>
$new_code = generate_rand_string(5);
$query = SELECT code FROM users WHERE code = '". $new_code ."';
$result = mysql_query($query);
while(mysql_num_rows($result) != 0)
{
$new_code = generate_rand_string(5);
$query = SELECT code FROM users WHERE code = '". $new_code ."';
$result = mysql_query($query);
}
echo $new_code;
?>
Zoiets moet het dan denk ik worden
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
Het lid tikt zijn code in en komt zo uit bij zijn info.
Als de INSERT query een foutmelding met foutnummer 1062 teruggeeft, weet je dat een UNIQUE constraint overtreden is. Als je verder geen andere UNIQUE constraints in die tabel hebt, kun je er dus vanuit gaan dat die code al bestond en zul je een nieuwe code moeten genereren.
ps. De reden dat je de controle in de database wilt uitvoeren is dat een SELECT query altijd gegevens uit het verleden ophaalt. Als jij eerst alle reeds bestaande codes selecteert, in een array zet en vervolgens controleert of jouw aangemaakte code daar niet tussen staat, zou het kunnen zijn dat die code in de tussentijd toch aangemaakt is en in de database is gezet.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Dan krijg je dus gewoon een insert query, en word de if een if(mysql_error_number //geen idee hoe deze functie heet precies, moet je maar even opzoeken.
Ok, bedankt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
function mrand($l,$h,$t,$len=false)
{
if($l>$h)
{
$a=$l;
$b=$h;
$h=$a;
$l=$b;
}
if( (($h-$l)+1)<$t || $t<=0 )
return false;
$n = array();
if($len>0)
{
if(strlen($h)<$len && strlen($l)<$len)
return false;
if(strlen($h-1)<$len && strlen($l-1)<$len && $t>1)
return false;
do
{
$x = rand($l,$h);
if(!in_array($x,$n) && strlen($x) == $len)$n[] = $x;
}
while(count($n)<$t);
}
else
{
do
{
$x = rand($l,$h);
if(!in_array($x,$n))$n[] = $x;
}
while(count($n)<$t);
}
return $n;
}
// gebruik:
$aantal_random_en_unieke_ints = mrand(0,9999999,$aantal,$lengte);
?>
function mrand($l,$h,$t,$len=false)
{
if($l>$h)
{
$a=$l;
$b=$h;
$h=$a;
$l=$b;
}
if( (($h-$l)+1)<$t || $t<=0 )
return false;
$n = array();
if($len>0)
{
if(strlen($h)<$len && strlen($l)<$len)
return false;
if(strlen($h-1)<$len && strlen($l-1)<$len && $t>1)
return false;
do
{
$x = rand($l,$h);
if(!in_array($x,$n) && strlen($x) == $len)$n[] = $x;
}
while(count($n)<$t);
}
else
{
do
{
$x = rand($l,$h);
if(!in_array($x,$n))$n[] = $x;
}
while(count($n)<$t);
}
return $n;
}
// gebruik:
$aantal_random_en_unieke_ints = mrand(0,9999999,$aantal,$lengte);
?>
In die $aantal_random_en_unieke_ints krijg je nu $aantal unieke en random ints tussen de 0 en 99999999999 met een lengte van $lengte.
Dit zou handig kunnen zijn als je de code uniek moet zijn voor de gebruiker.
Bij meerdere gebruikers is het gebruik van een database onontbeerlijk.