Hallo,

Ik probeer een wachtwoord opvraagscript te maken met een validatiecode. Het probleem is alleen, de validatiecode die hij in de database zet is anders dan die ik in de mail staat, die je ontvangt. Terwijl het wachtwoord wel gewoon goed blijft.

Wat doe ik verkeerd?

Alvast bedankt voor je hulp.

<?

		function randomwachtwoord($length)
		{
    		$tekens = "1234567890aBcDeFgHiJkLmNoPqRsTuVwXyZ";
    		$key  = $tekens{rand(0,35)};
    		for($i=1;$i<$length;$i++)
    		{
        		$key .= $tekens{rand(0,35)};
    		}
    		return $key;
		}
		
		function validationkey($length)
		{
			$tekens = "1234567890";
			$key = $tekens{rand(0,9)};
			for($i=1;$i<$length;$i++)
			{
				$key .= $tekens{rand(0,9)};
			}
			return $key;
		}
		
echo ubb('[box=Ohjee, Gegevens vergeten?]');
	// Wachtwoord verkrijgen bij gebruikersnaam en emailadres
	echo ubb('[subtitle]1) Alleen je wachtwoord vergeten?[/subtitle]');
		echo '<p>Laten we het niet te lastig voor je maken. Om een nieuw wachtwoord op te vragen hoef je alleen je gebruikersnaam en je emailadres in te vullen. Je krijgt dan automatisch een mailje, waarin stappen en een speciale code staat om je wachtwoord te verandreren. Gebruikersnaam kwijt? Kijk dan onder optie 2.';

		if (isset($_POST['submit']) && !empty($_POST['gebruikersnaam']) && !empty($_POST['email']))
 		{
 
 			$gebruikersnaam = mysql_real_escape_string(substr($_POST['gebruikersnaam'],0,255));
			$email = mysql_real_escape_string(substr($_POST['email'],0,955));
			$valkey = validationkey(10);
			$wachtwoord = randomwachtwoord(10); 
			$wachtwoordmd5 = hash('sha512', $wachtwoord);
	
			$sql2 = "SELECT * FROM users WHERE username='".$gebruikersnaam."' AND email='".$email."'";
			$res2 = mysql_query($sql2)or die(mysql_error());
			if(mysql_num_rows($res2) < 1) {
				echo "De gegevens kunnen niet gevonden worden. Je hebt waarschijnlijk één van de twee ingevulde velden fout getypt. Refresh de pagina (F5) of als je het niet weet, ga naar optie 2.";
				}else{
					$row = mysql_fetch_assoc($res2);
					mysql_query("UPDATE users SET password='".$wachtwoordmd5."' WHERE username='".$gebruikersnaam."'");
					mysql_query("INSERT INTO pass_request (query, email, username, password, date, ip) VALUES ('".$valkey."','".$row['email']."','".$row['username']."','".$wachtwoord."',NOW(),'".$_SERVER['REMOTE_ADDR']."')");
				$headers  = "Content-Type: text/html; charset=iso-8859-1\n";
       				$headers .= "MIME-Version: 1.0\r\n";
       				$headers .= "From: Habbowereld.nl Support <[email protected]>";
					mail($row['email'],"Habbowereld.nl - Nieuw wachtwoord","
			
					Beste <b>".$row['username']."</b>,<br>
					<br>
					Wij hebben vernomen dat jij een nieuw wachtwoord aanwil vragen. Omdat wij zeker willen weten dat jij dit daadwerkelijk wilt doen, hebben we deze mail gestuurd. Als je op de onderstaande link klikt dan wordt er automatisch opnieuw een email gestuurd met het daarin nieuwe wachtwoord.<br>
					<br>
					<a href='http://www.habbowereld.nl/newpass/".$valkey."'>http://www.habbowereld.nl/newpass/".$valkey."</a><br>
					<i>Klik op bovenstaande link, als hij niet klikbaar is, kopieer dan de URL naar je adresbalk.</i><br>
					Als je de pagina hebt geopend, en hij ook is uitgeladen. Dan ontvang je zometeen een email met je nieuwe wachtwoord.<br>
					<br>
					Hopelijk hebben wij jou voldoende kunnen informeren.<br>
					<br>
					<br>
					Met vriendelijke groet,<br>
					<br>
					:: Habbowereld Support<br>
					:: [email protected]<br>
					:: www.habbowereld.nl",$headers);  // stuur de email
					echo "<br><br><b>De mail is succesvol verstuurd, volg de stappen in je mailbox. Als dit is gebeurd ontvang je daarna je nieuwe wachtwoord.</b>"; // leuk uitlegje
					}
			}else{
		
		echo '<br><br><form action="/leden/wwvergeten/" method="post">';
		echo '<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tr>
					<td>Gebruikersnaam</td>
					<td><input type="text" name="gebruikersnaam" maxlength="255" />';
					if(isset($_POST['submit']) && empty($_POST['naam'])) { 
					echo "<br> Vul een gebruikersnaam in."; } 
                    echo '</td>
				</tr>
				<tr>
					<td>E-mailadres</td>
					<td><input type="text" name="email" maxlength="755" />';
					if(isset($_POST['submit']) && empty($_POST['email'])) { 
					echo "<br> Vul een emailadres in."; } 
                    echo '</td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" name="submit" value="Verstuur" /></td>
				</tr>
			  </table></form><br></p>';
			  		
				}
				
	// Wachtwoord verkrijgen bij emailadres en opvraagwoord
	echo ubb('[subtitle]2) Gebruikersnaam en wachtwoord kwijt?[/subtitle]');
		echo '<p>Zo, dus jij bent je gebruikersnaam kwijt. Om via deze manier aan je wachtwoord te komen is natuurlijk wel wat lastiger. Je hebt bij het registreren op opvraagwoord in moeten vullen. Dit woord moet je hier ook intypen. Weetje dat ook niet meer? Ga dan verder bij optie 3.';

		if (isset($_POST['submit']) && !empty($_POST['woord']) && !empty($_POST['email']))
 		{
 
 			$gebruikersnaam = mysql_real_escape_string(substr($_POST['gebruikersnaam'],0,255));
			$email = mysql_real_escape_string(substr($_POST['email'],0,955));
			$valkey = validationkey(10);
			$wachtwoord = randomwachtwoord(10); 
			$wachtwoordmd5 = hash('sha512', $wachtwoord);
	
			$sql2 = "SELECT * FROM users WHERE username='".$gebruikersnaam."' AND email='".$email."'";
			$res2 = mysql_query($sql2)or die(mysql_error());
			if(mysql_num_rows($res2) < 1) {
				echo "De gegevens kunnen niet gevonden worden. Je hebt waarschijnlijk één van de twee ingevulde velden fout getypt. Refresh de pagina (F5) of als je het niet weet, ga naar optie 2.";
				}else{
					$row = mysql_fetch_assoc($res2);
					mysql_query("UPDATE users SET password='".$wachtwoordmd5."' WHERE username='".$gebruikersnaam."'");
					mysql_query("INSERT INTO pass_request (query, email, username, password, date, ip) VALUES ('".$valkey."','".$row['email']."','".$row['username']."','".$row['md5_pass']."',NOW(),'".$_SERVER['REMOTE_ADDR']."')");
					$keyGET = mysql_query("SELECT * FROM pass_request WHERE password='".$wachtwoord."'");
					$getKey = mysql_fetch_array($keyGET);
					$headers  = "Content-Type: text/html; charset=iso-8859-1\n";
       				$headers .= "MIME-Version: 1.0\r\n";
       				$headers .= "From: Habbowereld.nl Support <[email protected]>";
					mail($row['email'],"Habbowereld.nl - Nieuw wachtwoord","
			
					Beste <b>".$row['username']."</b>,<br>
					<br>
					Wij hebben vernomen dat jij een nieuw wachtwoord aanwil vragen. Omdat wij zeker willen weten dat jij dit daadwerkelijk wilt doen, hebben we deze mail gestuurd. Als je op de onderstaande link klikt dan wordt er automatisch opnieuw een email gestuurd met het daarin nieuwe wachtwoord.<br>
					<br>
					<a href='http://www.habbowereld.nl/newpass/".$valkey."'>http://www.habbowereld.nl/newpass/".$valkey."</a><br>
					<i>Klik op bovenstaande link, als hij niet klikbaar is, kopieer dan de URL naar je adresbalk.</i><br>
					Als je de pagina hebt geopend, en hij ook is uitgeladen. Dan ontvang je zometeen een email met je nieuwe wachtwoord.<br>
					<br>
					Hopelijk hebben wij jou voldoende kunnen informeren.<br>
					<br>
					<br>
					Met vriendelijke groet,<br>
					<br>
					:: Habbowereld Support<br>
					:: [email protected]<br>
					:: www.habbowereld.nl",$headers);  // stuur de email
					echo "<br><br><b>De mail is succesvol verstuurd, volg de stappen in je mailbox. Als dit is gebeurd ontvang je daarna je nieuwe wachtwoord.</b>"; // leuk uitlegje
					}
			}else{
		
		echo '<br><br><form action="/leden/wwvergeten/" method="post">';
		echo '<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tr>
					<td>Gebruikersnaam</td>
					<td><input type="text" name="gebruikersnaam" maxlength="255" />';
					if(isset($_POST['submit2']) && empty($_POST['naam'])) { 
					echo "<br> Vul een gebruikersnaam in."; } 
                    echo '</td>
				</tr>
				<tr>
					<td>Opvraagwoord</td>
					<td><input type="text" name="woord" maxlength="755" />';
					if(isset($_POST['submit2']) && empty($_POST['woord'])) { 
					echo "<br> Vul een emailadres in."; } 
                    echo '</td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" name="submit2" value="Verstuur" /></td>
				</tr>
			  </table></form><br></p>';
			  
				}
		
	// Wachtwoord niet verkrijgen, contact stappen
	echo ubb('[subtitle]3) Niets lukt? Dan helpen wij handmatig mee![/subtitle]');
		echo '<p>Helaas, omdat je alles bent vergeten kun je niet automatisch een nieuw wachtwoord aanvragen. Hiervoor moet je naar het contactformulier. Klik als onderwerp aan \'Wachtwoord kwijt\'. Vul een correcte emailadres in en habbonaam. In het tekstvak moet je een verklaring zetten dat het account echt van jou is. De mogelijke gebruikersnamen en emailadressen vermelden, hoe je account zou kunnen heten. Mocht je het account aangemaakt hebben op het zelfde netwerk dan dat je nu zit. Dan kunnen wij jou account snel traceren, en anders gaan we onze uiterste best doen om jou account bij jou terecht te laten komen.</p>';

echo ubb('[/box]');
?>
Kan je even alle overbodige code eruit halen? Dit is echt veel te lang om te lezen en door te kijken.

Ik vermoed dat je misschien ergens opnieuw de valkey aanmaakt?
<?

        function randomwachtwoord($length)
        {
            $tekens = "1234567890aBcDeFgHiJkLmNoPqRsTuVwXyZ";
            $key  = $tekens{rand(0,35)};
            for($i=1;$i<$length;$i++)
            {
                $key .= $tekens{rand(0,35)};
            }
            return $key;
        }
        
        function validationkey($length)
        {
            $tekens = "1234567890";
            $key = $tekens{rand(0,9)};
            for($i=1;$i<$length;$i++)
            {
                $key .= $tekens{rand(0,9)};
            }
            return $key;
        }

        if (isset($_POST['submit']) && !empty($_POST['gebruikersnaam']) && !empty($_POST['email']))
         {
 
             $gebruikersnaam = mysql_real_escape_string(substr($_POST['gebruikersnaam'],0,255));
            $email = mysql_real_escape_string(substr($_POST['email'],0,955));
            $valkey = validationkey(10);
            $wachtwoord = randomwachtwoord(10); 
            $wachtwoordmd5 = hash('sha512', $wachtwoord);
    
            $sql2 = "SELECT * FROM users WHERE username='".$gebruikersnaam."' AND email='".$email."'";
            $res2 = mysql_query($sql2)or die(mysql_error());
            if(mysql_num_rows($res2) < 1) {
                echo "De gegevens kunnen niet gevonden worden. Je hebt waarschijnlijk één van de twee ingevulde velden fout getypt. Refresh de pagina (F5) of als je het niet weet, ga naar optie 2.";
                }else{
                    $row = mysql_fetch_assoc($res2);
                    mysql_query("UPDATE users SET password='".$wachtwoordmd5."' WHERE username='".$gebruikersnaam."'");
                    mysql_query("INSERT INTO pass_request (query, email, username, password, date, ip) VALUES ('".$valkey."','".$row['email']."','".$row['username']."','".$wachtwoord."',NOW(),'".$_SERVER['REMOTE_ADDR']."')");
                $headers  = "Content-Type: text/html; charset=iso-8859-1\n";
                       $headers .= "MIME-Version: 1.0\r\n";
                       $headers .= "From: Habbowereld.nl Support <[email protected]>";
                    mail($row['email'],"Habbowereld.nl - Nieuw wachtwoord","
            
                    Beste <b>".$row['username']."</b>,<br>
                    <br>
                    Wij hebben vernomen dat jij een nieuw wachtwoord aanwil vragen. Omdat wij zeker willen weten dat jij dit daadwerkelijk wilt doen, hebben we deze mail gestuurd. Als je op de onderstaande link klikt dan wordt er automatisch opnieuw een email gestuurd met het daarin nieuwe wachtwoord.<br>
                    <br>
                    <a href='http://www.habbowereld.nl/newpass/".$valkey."'>http://www.habbowereld.nl/newpass/".$valkey."</a><br>
                    <i>Klik op bovenstaande link, als hij niet klikbaar is, kopieer dan de URL naar je adresbalk.</i><br>
                    Als je de pagina hebt geopend, en hij ook is uitgeladen. Dan ontvang je zometeen een email met je nieuwe wachtwoord.<br>
                    <br>
                    Hopelijk hebben wij jou voldoende kunnen informeren.<br>
                    <br>
                    <br>
                    Met vriendelijke groet,<br>
                    <br>
                    :: Habbowereld Support<br>
                    :: [email protected]<br>
                    :: www.habbowereld.nl",$headers);  // stuur de email
                    echo "<br><br><b>De mail is succesvol verstuurd, volg de stappen in je mailbox. Als dit is gebeurd ontvang je daarna je nieuwe wachtwoord.</b>"; // leuk uitlegje
                    }
            }else{

// FORM
                      
                }

echo ubb('[/box]');
?> 


Is het zo duidelijker?
Ja, het is zo duidelijker...

Maar hier blijkt niet uit dat jij via de e-mail een andere code krijgt dan in je database staat. Heb je zelf al handmatig de code in de mail vergeleken met de code die in de database staat? (Vraag maar even voor de zekerheid).

Zit er niet gewoon per ongeluk een fout in de verwerkingspagina? Of dat je met een .htaccess het geheel herschrijft, maar dat er iets niet helemaal goed gaat?
Gebruik wat meer foutafhandeling. Controleer bijv. of de insert en update queries gelukt zijn, en of de mail daadwerkelijke verstuurd wordt.
Ik heb hem zelf getest
- ik ontvang mail (met andere validatiecode)
- wachtwoord wordt in users geupdate
- gegevens worden aangemaakt in pass_request.
- Als je code uit database vergelijkt met mail, dan doet die van de mail het niet. Maar die in de database staat wel.
Je hebt de database gecontroleerd na bovenstaand script uitgevoerd te hebben en vóórdat je op je link in de mail hebt geklikt? En in de databasetabel pass_request in het veld query staat dan een andere code dan in de mail?
Ja, dat is precies het probleem.
En als je de functie die de random code genereert nou eventjes gewoon een statisch getalletje laat teruggeven (de return wegcommentareren en iets anders returnen)....
Is het dan wel hetzelfde, dan roep je de functie dus 2x aan.
Kun je daar een voorbeeld van geven? Ik snap je niet helemaal.
Lijkt mij geheel onmogelijk. Dus denk ik dat je het ergens anders moet gaan zoeken. Wordt er niets tussendoor gewijzigd door andere pages?

Reageren