Werkzaamheden:
Ik ben opzoek naar iemand die een script kan schrijven waarmee klanten hun wachtwoord kunnen opvragen.

Om een wachtwoord te kunnen opvragen heeft men het juiste emailadres nodig. Het emailadres is al bij ons bekend dus moet uit de db worden gehaald. Het wachtwoord moet worden verstuurd naar dat emailadres.

Het wachtwoord staat in de DB door middel van MD5.


Prijsopgave gevraagd Het gaat hier om een eenmalige opdracht
dus eigenlijk is het hele inlogsysteem slecht?
Ik zeg niet 'helemaal', maar paswoorden zet je NOOIT in een cookie of een session.

Probeer anders MultiSess eens (zie eerdere link in dit topic).
Dit werkt wel veiliger.
OK ik ga eerst dit eens proberen aan de praat te krijgen en dan door naar het volgende project.

Inmiddels krijg ik wel de goede code door via de email alleen als ik erop klik dan gebeurt er niks.
Daarom is foutafhandeling wel altijd tof om te hebben.
er komt alleen geen foutmelding.

BEhlave dan deze die er de hele tijd zijn.

Warning: Cannot modify header information - headers already sent by (output started at /home/jcsl/public_html/klanten/includes/wachtwoord_vergeten.php:82) in /home/jcsl/public_html/klanten/inlog/func.toegang.php on line 72

Warning: Cannot modify header information - headers already sent by (output started at /home/jcsl/public_html/klanten/includes/wachtwoord_vergeten.php:82) in /home/jcsl/public_html/klanten/inlog/func.toegang.php on line 73

Warning: Cannot modify header information - headers already sent by (output started at /home/jcsl/public_html/klanten/includes/wachtwoord_vergeten.php:82) in /home/jcsl/public_html/klanten/inlog/func.toegang.php on line 74

Warning: Cannot modify header information - headers already sent by (output started at /home/jcsl/public_html/klanten/includes/wachtwoord_vergeten.php:82) in /home/jcsl/public_html/klanten/inlog/func.toegang.php on line 75

Warning: Cannot modify header information - headers already sent by (output started at /home/jcsl/public_html/klanten/includes/wachtwoord_vergeten.php:82) in /home/jcsl/public_html/klanten/inlog/func.toegang.php on line 76
Aar schreef op 03.02.2010 00:32
[quote='Mr.Ark schreef op 03.02.2010 00:27']Kan je net zo goed even opnieuw scripten, dit lijkt natuurlijk nergens op.

Be my guest.... :-)

[/quote]

Ok ^^, maar wel me eigen versie.

Heb er 15 minuutjes over gedaan, dus kunnen paar typo's inzitten. Maar ga daar niet vanuit.

[color=red]Let op[/color]: Code is niet getest.
[color=red]Let op[/color]: Lees de code door en pas het zodanig aan.
[color=red]Let op[/color]: Code kan je zelf nog verder uitbouwen met checks.

<?PHP

# Connectie met de database maken
# Zet hier ook je error_reporting(E_ALL) & ini_set('display_errors', 1) in
require_once '....';

# Error is false
$Error = false;
# Array voor de berichten
$Message = array();

# Kijken of er gepost wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	# Kijken of email leeg is
	if(empty($_POST['email']))
	{
		# Geen email adres ingevuld
		$Message[] = 'Vul A.U.B een email adres in.';
		# Error is true
		$Error = true;
	}
	
	# Kijken of het email adres geldig is
	if(preg_match('/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/', $_POST['email']))
	{
		# Email adres is niet geldig
		$Message[] = 'Vul A.U.B een geldig email adres in.';
		# Error is true
		$Error = true;
	}
	
	# Kijken of error false is
	if($Error == false)
	{
		# Query uitvoeren
		$Query =
		"
			SELECT
				id,
				email
			FROM
				gebruikers
			WHERE
				email = '".mysql_real_escape_string(trim($_POST['email']))."'
		";
		
		# Resultaat van de query
		$Result = mysql_query($Query);
		
		# Kijken of de query is gelukt
		if(!$Result)
		{
			# Foutje in de query
			$Message[] = 'Er is een fout opgetreden, fout is: '.mysql_error();
		}
		else
		{
			# Kijken of het email adres voorkomt
			if(mysql_num_rows($Result) == 0)
			{
				# Email adres komt niet voor in de database
				$Message[] = 'Dit email adres komt niet voor in onze database.';
			}
			else
			{
				# Rij fetchen
				$Row = mysql_fetch_assoc($Result);
				
				# Nieuw wachtwoord aanmaken
				$Nieuw_ww = mt_srand((double)microtime()*100000);
								
				while(strlen($Nieuw_ww) <= 6) # Aantal tekens/cijfers dat wordt gebruikt
				{
					$i = chr(mt_rand(0,255));
                                                               
					if(preg_match('/^[a-z0-9]$/', $i)) # Alleen letters en cijfers
					{
						$Nieuw_ww = $Nieuw_ww.$i;
					}
				}
				
				# Query uitvoeren
				$Query =
				"
					UPDATE
						gebruikers
					SET
						wachtwoord = '".md5($Nieuw_ww)."'
					WHERE
						id = '".intval($Row['id'])."'
				";
				
				# Kijken of de query is gelukt
				if(!$Result)
				{
					# Foutje in de query
					$Message[] = 'Er is een fout opgetreden, fout is: '.mysql_error();
				}
				else
				{
					# Persoon waar het naartoe gestuurd moet worden
					$Receiver       = $Row['email'];
					# Onderwerp van de mail
					$Subject        = 'Wachtwoord Reset';
					# Headers die we meesturen met de mail
					$Headers		= 'From: [email protected]' . "\r\n" .
									  'Reply-To: [email protected]' . "\r\n" .
									  'MIME-Version: 1.0' . "\r\n" .
									  'Content-Type: text/html; charset=ISO-8859-1' . "\r\n" .
									  'X-Mailer: PHP/' . phpversion(); 
								      'X-Priority: 1' . "\r\n" .
					$Mail			= '<h3>Wachtwoord Reset</h3>
<p>Beste '.$Row['email'].',</p>
<p>U wachtwoord is reeds gereset door: '.$_SERVER['REMOTE_ADDR'].'<br>U nieuwe wachtwoord: '.$Nieuw_ww.'<br/>
Komt u ip adres niet overeen met die in deze email, neem dan zo spoedig mogelijk contact met ons op.</p>
<p>Met vriendelijke groet,</p>
<p>Het Team !</p>';
					
					# Kijken of de mail verstuurd wordt
					if(mail($Receiver, $Subject, $Mail, $Headers))
					{
						# Mail succesvol verstuurd
						$Message[] = 'U ontvangt binnen nu en 10 minuten uw nieuwe wachtwoord op het volgende adres: '.$_POST['email'];
					}
					else
					{
						# Fout met versturen email
						$Message[] = 'Er is een fout opgetreden met het versturen van de mail, neem zo spoedig mogelijk contact met ons op.';
					}
				}
			}
		}
	}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Wachtwoord Vergeten</title>
</head>

<body>
<h3>Wachtwoord Vergeten</h3>
<?PHP

# Kijken of er berichten zijn
if(!empty($Message))
{
	# Berichten laten zien
	foreach($Message as $Msg)
	{
		echo $Msg.'<br/>';
	}
}

?>
<form id="form1" name="form1" method="post" action="">
  Email adres: 
  <input type="text" name="email" id="email" />
  <input type="submit" name="button" id="button" value="Submit" />
</form>
</body>
</html>
Ik ga hier ook eens mee aan de slag. Kijken of ik deze wel werkend kan krijgen.



Edit: [email protected] is geen gelding emailadres?? Is dat te kort voor het script?
Er zit geen limietcheck in, zie ik.
Het probleem zit hem in dit:

<?php
# Kijken of het email adres geldig is
if(preg_match('/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/', $_POST['email']))
{
# Email adres is niet geldig
$Message[] = 'Vul A.U.B een geldig email adres in.';
# Error is true
$Error = true;
}
?>

Kan het zijn dat het komt omdat mijn emailadres hetzelfde is als het domein?
Ik heb nu verschillende adressen gebruikt, maar geen enkel adres is een geldig emailadres.

fout gevonden. Zat het in:
<?php
if(preg_match('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i', $_POST['email']))

?>

Het wachtwoord wordt op dit moment nog niet aangepast in de database

Reageren