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]');
?>
Nee, hij werkt prima. Alleen die validatiecode wijzigt op onverklaarbare wijze. Terwijl het wachtwoord wel gewoon hetzelfde blijft.

Het is zeg maar onderdeel van een pagina.

je hebt het bestand index.php
die include
- setup.php
daarin staan stylesheets, verbinding naar databases enz.
en dan heb je het gewone bestand waar het layout in staat.
menu en linkermenu haalt hij uit de database.
en dan de hoofdpagina wordt geinclude via pages.php. Dit is apart omdat je hem dan ook kunt printen.

Maar volgens mij ligt het daar niet aan.
Doe eens wat Eddy Erkelens voorstelt.
<?php
function validationkey($length)
{
$tekens = "1234567890";
$key = $tekens{rand(0,9)};
for($i=1;$i<$length;$i++)
{
$key .= $tekens{rand(0,9)};
}
// return $key;
// onderstaand moet dus in de database en in de mail staan.
return '12345';
}
?>
klopt je database veld wel?
heb je bijv. niet varchar(20) oid.
dan wordt ie namelijk na het 20e teken afgekapt.

gr
Staat er überhaupt wel iets in je database? Bestaat de DB-cel 'query' wel? Zo ja, als je het gaat controleren, haalt hij het dan ook uit deze DB-cel?
Ook nog een vraagje: Is in de tabel users de username wel UNIQUE?
ja, dat ook
Je code is erg slecht te lezen omdat je niet netjes inspringt. Verder controleer je niet of je query's wel lukken. En waarom gebruik je twee verschillende tabellen? Maak gewoon een veld "active", type TINYINT. Standaard zet je die op 0, totdat iemand om de validatielink heeft geklikt. Daarna zet je hem op 1.
Heel raar, maar het werkt nu.
Het enige wat ik heb gedaan is dit gewijzigd:

$valkey = validationkey(10);

en daar heb ik van gemaakt:

$valkey2 = validationkey(10);
$valkey = $valkey2;

en toen deed hij het wel.

stefan schreef op 26.09.2009 23:40
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.

Zou jij na iedere keer dat er een wachtwoord is vergeten de database willen gaan checken of het allemaal gelukt is? Ik denk dat daar veel makkelijkere manieren voor zijn...

Reageren