While PHP

Status
Niet open voor verdere reacties.

Tijme

Gebruiker
Lid geworden
29 jan 2009
Berichten
535
Beste helpmijer's

Ik heb een vraagje over while in php. || http://goo.gl/qPPEB ||

Als iemand zijn wachtwoord is vergeten op de bovenstaande site kan die gene een reset link aanvragen.

Reset link:

1. Een random getal word aangemaakt.
2. Het word achter mijn link geplakt http://www.------.nl/notation/reset/index.php?activate=HET RANDOM GETAL
3. Als de user hier op klikt word zijn account geselecteerd doormiddel van Select * Where activate = $activate

Dit werkt allemaal maar nu heb ik een probleem.
Het is dan wel een kans van 1 op n miljoen maar het kan dus zijn dat er een keer dezelfde random key word gegenereerd.

Ik heb de randomcode nu alleen even op 1 of 2 gezet zodat ik kan zien of hij de error geeft.

Dit wil ik graag voorkomen en dat heb ik geprobeert doormiddel van deze code:

__________________________________________________________________________

// Kijken of key bestaat.
$count = 0;
$activationkey = rand(1,2);
$aantal = mysql_query("SELECT COUNT(n_activatekey) as numrecords FROM users WHERE n_activatekey = '$activationkey'");
$row = mysql_fetch_assoc($aantal);
while ($row['numrecords'] >= 1){

$activationkey = rand(1,2);
if ($count >= 100) {

header("Location: ../index_register.php");
$_SESSION['notation_error'] = $error_endlesskey;
break;

}

$aantal = mysql_query("SELECT COUNT(n_activatekey) as numrecords FROM users WHERE n_activatekey = '$activationkey'");
$row = mysql_fetch_assoc($aantal);
$count = $count + 1;

}

______________________________________________________________

Het probleem is dat deze code niet werkt. Hij zou een error moeten geven maar die error geeft hij niet als er twee dezelfde forget keys in de database komen.

Weet iemand wat ik fout heb gedaan?

Alvast bedankt,
Tijme
 
Laatst bewerkt:
Ik snap je code niet zo goed. Waarom doe je die query in de loop.

Logischerwijs voorkom je zo een duplicate:
pseudocode:
Code:
$key = getRandomKey();
while ($key exists in database) {
  $key = getRandomKey();
}
insert key in database voor de gebruiker

Ik zou persoonlijk die key sowieso na 30 minuten laten verlopen. (Dus log de create date bij het inserten van key in database). Eventueel zou je voor de veiligheid ook nog het ip adres van de user aan de key kunnen vastplakken.
Of als je het helemaal officieel wilt doen, dan salt je je hash/random nummer

En ik moet het vragen: Je doet toch wel eerst
PHP:
$active = mysql_real_escape_string($_GET['active']);
voordat je de key in je query plakt vanuit je url he?
 
Je kan ook een extra veld in je tabel zetten waar je een code inzet die gemaakt wordt door 1 of meerdere velden te "hashen" en die hash in dat veld op te slaan. Zo krijg je nooit twee keer dezelfde code. Zo ga ik tewerk en de reset-link is gewoon je reset-pagina met het volgende erachter: ?reset=[hash]
't Is maar een idee hoor :-)
 
ik heb nu het id van de user erbij gedaan. Dit id is nooit hetzelfde dus zo werkt het ook..


Alsnog bedankt voor het antwoord!
 
maak een functie van je randomKey

function randomKey()

$salt = 'GD98RT$#*JghHDS0fd';

$maakKey = md5(microtime().sha1(random(100000,999999).$salt));

$chechInDb = mysql_query("SELECT n_activatekey FROM users WHERE n_activatekey = '$maakKey'");
$rows = mysql_num_rows($chechInDb);

if(!$row) {
randomKey();
}

return $maakKey;

En dan weet je zeker dat je een key krijgt die nog niet in je database voorkomt.
 
Ik snap je code niet zo goed. Waarom doe je die query in de loop.

Logischerwijs voorkom je zo een duplicate:
pseudocode:
Code:
$key = getRandomKey();
while ($key exists in database) {
  $key = getRandomKey();
}
insert key in database voor de gebruiker

Ik zou persoonlijk die key sowieso na 30 minuten laten verlopen. (Dus log de create date bij het inserten van key in database). Eventueel zou je voor de veiligheid ook nog het ip adres van de user aan de key kunnen vastplakken.
Of als je het helemaal officieel wilt doen, dan salt je je hash/random nummer

En ik moet het vragen: Je doet toch wel eerst
PHP:
$active = mysql_real_escape_string($_GET['active']);
voordat je de key in je query plakt vanuit je url he?


Ik heb het wel met mysql real escape string ja xD.

Ik zal alles nog even controleren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan