Uniek id maken voor validatie mail
Ik heb een vraag ik zit met een register script wat goed werkt.
Alleen nu heb ik een vraag,
zodra een user zich heeft geregistreerd dan krijgt deze user een validatie mail
om zijn email adress te laten valideren.
Echter wil ik dat het id dus uniek is voor dat email adress.
Ik gebruik nu dit om te valideren.
gedeelte van mijn code
Code (php)
Nu wordt de mail verstuurd en daar staat dit in
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$email_body = 'welkom '.$_POST['regracename'].'.
Klik op de link hieronder om je email adress te valideren.
http://www.blaat.net/activeren/'.$_POST['valid'].'
Wij hopen dat je veel plezier beleeft bij dit spel.
Met vriendelijke groeten Raventh(Eigenaar).';
?>
$email_body = 'welkom '.$_POST['regracename'].'.
Klik op de link hieronder om je email adress te valideren.
http://www.blaat.net/activeren/'.$_POST['valid'].'
Wij hopen dat je veel plezier beleeft bij dit spel.
Met vriendelijke groeten Raventh(Eigenaar).';
?>
Dus de gebruiker krijgt een link van
http://www.blaat.net/activer/21
Maar nu is die link niet uniek
want als er nu iemand in de db is met een andere email adress en dezelfde id=21 nummer dan valideert ie alle email adressen wat als emailvalid=21 heeft.
Hoe kan ik dat nummer dus uniek krijgen.
Alvast bedankt.
Met vriendelijke groet,
Thomas de vries.
Gewijzigd op 14/02/2011 10:27:23 door Thomas de vries
Je kunt met tijd werken, een hash maken, uniqueid gebruiken enzovoort.
Verder is je query nu dan ook niet goed.
Maar waarom niet in een veld laten genereren. is dat vanwege veiligheid overwegingen?
En waarom zou mijn query nu dan ook niet goed zijn?
Met vriendelijke groet,
Thomas de vries.
Om voor elk record een uniek id te krijgen dien je het veld een unieke sleutel en een auto increment mee te geven. Hierdoor zal de id automatisch worden opgehoogd met 1 wanneer een nieuw record wordt toegevoegd. Hierdoor zal je nooit eenzelfde id in de database krijgen.
Gewijzigd op 14/02/2011 11:19:39 door Arjan -
Wil dus dat die validatie mailtjes een uniek id krijgen.
als ik dat met uniqueid doe dan zien gebruikers dit in de url staan.
www.blaat.nl/activeren/15687745689
op zich niet erg maar vindt het niet mooi staan.
En gooi over je uniqid een md5 hash zodat de string niet alleen bestaat uit cijfers.
Gewijzigd op 14/02/2011 11:25:29 door Arjan -
Bedankt voor jullie reacties.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$validcode = md5(rand(11111,99999));
$result = mysql_query("SELECT validcode FROM users WHERE validcode='" . $validcode . "' ");
while($result > 0)
{
if($result > 0)
{
$validcode = $validcode . rand(1,9);
}
else
{
$email_body = 'welkom '.mysql_real_escape_string($_POST['regracename']).'.
Klik op de link hieronder om je email adress te valideren.
http://www.blaat.net/activeren/'.$_POST['validcode'].'
Wij hopen dat je veel plezier beleeft bij dit spel.
Met vriendelijke groeten Raventh(Eigenaar).';
}
}
?>
$validcode = md5(rand(11111,99999));
$result = mysql_query("SELECT validcode FROM users WHERE validcode='" . $validcode . "' ");
while($result > 0)
{
if($result > 0)
{
$validcode = $validcode . rand(1,9);
}
else
{
$email_body = 'welkom '.mysql_real_escape_string($_POST['regracename']).'.
Klik op de link hieronder om je email adress te valideren.
http://www.blaat.net/activeren/'.$_POST['validcode'].'
Wij hopen dat je veel plezier beleeft bij dit spel.
Met vriendelijke groeten Raventh(Eigenaar).';
}
}
?>
Gewijzigd op 14/02/2011 14:27:03 door Ocirina Ocirina
SELECT validcode FROM users WHERE validcode='....'
En mysql_real_escape_string(..) is voor sql en hoort niet in een email.
Gewijzigd op 14/02/2011 20:09:16 door - SanThe -
Ja, sorry ik dacht dat het nog in de db. Moes worden gevoegd.
Thomas de vries op 14/02/2011 11:03:16:
Dan wordt die uniqueid wel lang van zo te zien als ik het voorbeeld volg van php.net
Maar waarom niet in een veld laten genereren. is dat vanwege veiligheid overwegingen?
Maar waarom niet in een veld laten genereren. is dat vanwege veiligheid overwegingen?
De gebruiker heeft dan nog niks te maken met dat id, dus waarom zou je het naar de browser toe sturen? Nergens voor nodig. Bovendien kan de gebruiker dat dan ook weer gaan aanpassen.
Thomas de vries op 14/02/2011 11:03:16:
En waarom zou mijn query nu dan ook niet goed zijn?
Thomas de vries op 14/02/2011 10:26:48:
(...)Maar nu is die link niet uniek
want als er nu iemand in de db is met een andere email adress en dezelfde id=21 nummer dan valideert ie alle email adressen wat als emailvalid=21 heeft.(...)
want als er nu iemand in de db is met een andere email adress en dezelfde id=21 nummer dan valideert ie alle email adressen wat als emailvalid=21 heeft.(...)
Omdat het over een combinatie van id en e-mailadres gaat.
Arjan - op 14/02/2011 11:15:15:
(...)
Om voor elk record een uniek id te krijgen dien je het veld een unieke sleutel en een auto increment mee te geven. Hierdoor zal de id automatisch worden opgehoogd met 1 wanneer een nieuw record wordt toegevoegd. Hierdoor zal je nooit eenzelfde id in de database krijgen.
Om voor elk record een uniek id te krijgen dien je het veld een unieke sleutel en een auto increment mee te geven. Hierdoor zal de id automatisch worden opgehoogd met 1 wanneer een nieuw record wordt toegevoegd. Hierdoor zal je nooit eenzelfde id in de database krijgen.
Fout. Gebruik geen auto increment. Eigenlijk is dat een ontzettend stomme functie. Als je weet dat er gebruik wordt gemaakt van aut increment, dan kan je dus voor allemaal accounts de boel gaan valideren door steeds +1 te doen (of facatures opvragen, etc.).
Karl Karl op 14/02/2011 19:47:32:
Fout. Gebruik geen auto increment. Eigenlijk is dat een ontzettend stomme functie. Als je weet dat er gebruik wordt gemaakt van aut increment, dan kan je dus voor allemaal accounts de boel gaan valideren door steeds +1 te doen (of facatures opvragen, etc.).
Arjan - op 14/02/2011 11:15:15:
(...)
Om voor elk record een uniek id te krijgen dien je het veld een unieke sleutel en een auto increment mee te geven. Hierdoor zal de id automatisch worden opgehoogd met 1 wanneer een nieuw record wordt toegevoegd. Hierdoor zal je nooit eenzelfde id in de database krijgen.
Om voor elk record een uniek id te krijgen dien je het veld een unieke sleutel en een auto increment mee te geven. Hierdoor zal de id automatisch worden opgehoogd met 1 wanneer een nieuw record wordt toegevoegd. Hierdoor zal je nooit eenzelfde id in de database krijgen.
Fout. Gebruik geen auto increment. Eigenlijk is dat een ontzettend stomme functie. Als je weet dat er gebruik wordt gemaakt van aut increment, dan kan je dus voor allemaal accounts de boel gaan valideren door steeds +1 te doen (of facatures opvragen, etc.).
Je interpreteert mijn antwoord verkeerd (al was het volgens mij wel duidelijk wat ik bedoelde). De TS gaf aan dat hij op één id meerdere e-mailadressen heeft staan. Vandaar dat ik aangaf hoe je in mysql alle records een uniek id kan meegeven. Dit had alleen betrekking op de database structuur en niet op de opbouw van de activatielink!
Gewijzigd op 14/02/2011 20:17:36 door Arjan -
Ik heb wel een uniek id en dat is userid
deze is uniek en autoincrement. voor de users.
maar emailvalid is niet uniek en daar wou ik dus op gaan controleren.
Maar ik laat het nu dus controleren op
userid en email adress samen.
Maar zit dus nu met het volgende probleem
En heb daar een nieuwe post voor aangemaakt.
zie
http://www.phphulp.nl/php/forum/topic/validatie-mail-blijft-zeggen-email-adress-is-gevalideerd/76340/last/
Slotje