Wachtwoord Vergeten schript werkt niet....
Ik ben voor school met een wachtwoord vergeten script bezig.
Ik dacht dat ik goed bezig was, maar de foutmeldingen blijven maar komen.
Telkens als ik er een heb opgelost duikt er verderop weer een ander op.
Nu is mijn vraag: loop ik nou te kloten of is dit script nog te redden ?
zo ja?, gelieve tips ter verbetering van het script:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
// Connectie met de database maken
// Zet hier ook je error_reporting(E_ALL) & ini_set('display_errors', 1) in
require_once ('config.php');
// Verbinding maken met MySQL
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db)
{
die("Unable to select database");
}
// 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('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i', $_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
member_id,
email_adres
FROM
members
WHERE
email_adres = '".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
$password = mt_srand((double)microtime()*100000);
while(strlen($password) <= 6) // Aantal tekens/cijfers dat wordt gebruikt
{
$i = chr(mt_rand(0,255));
if(preg_match('/^[a-z0-9]$/', $i)) // Alleen letters en cijfers
{
$password = $password.$i;
}
}
// Query uitvoeren
$Query =
"
UPDATE members
SET password = MD5('" . $password . "')
WHERE member_id =" . intval($Row['member_id']) . "
";
// 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
{
// Persoon waar het naartoe gestuurd moet worden
$Row = mysql_fetch_array($Result);
// 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_adres'].',</p>
<p>U wachtwoord is reeds gereset door: '.$_SERVER['REMOTE_ADDR'].'<br>U nieuwe wachtwoord: '.$password.'<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_adres'];
}
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.';
}
}
}
}
}
?>
// Connectie met de database maken
// Zet hier ook je error_reporting(E_ALL) & ini_set('display_errors', 1) in
require_once ('config.php');
// Verbinding maken met MySQL
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db)
{
die("Unable to select database");
}
// 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('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i', $_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
member_id,
email_adres
FROM
members
WHERE
email_adres = '".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
$password = mt_srand((double)microtime()*100000);
while(strlen($password) <= 6) // Aantal tekens/cijfers dat wordt gebruikt
{
$i = chr(mt_rand(0,255));
if(preg_match('/^[a-z0-9]$/', $i)) // Alleen letters en cijfers
{
$password = $password.$i;
}
}
// Query uitvoeren
$Query =
"
UPDATE members
SET password = MD5('" . $password . "')
WHERE member_id =" . intval($Row['member_id']) . "
";
// 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
{
// Persoon waar het naartoe gestuurd moet worden
$Row = mysql_fetch_array($Result);
// 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_adres'].',</p>
<p>U wachtwoord is reeds gereset door: '.$_SERVER['REMOTE_ADDR'].'<br>U nieuwe wachtwoord: '.$password.'<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_adres'];
}
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>
Code (php)
<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>
Alvast bedankt voor de gene die de moeite willen nemen.
Zo 1-2-3 kan ik alleen maar tips geven over hoe het anders kan, maar overduidelijke fouten haal ik er niet uit. Handig zou dus zijn om je foutmeldingen hier te vermelden, dan kunnen we gerichter kijken.
Notice: Undefined index: email in C:\xampp\htdocs\Password-lost.php on line 41
Notice: Undefined index: email in C:\xampp\htdocs\Password-lost.php on line 61
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Password-lost.php on line 124
Notice: Undefined variable: Receiver in C:\xampp\htdocs\Password-lost.php on line 144
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\Password-lost.php on line 144
Wanneer je wel een e-mail adres heb ingevuld vervallen de 1e&2e foutmeldingen, echter zou het script volgens mij de eerste en de tweede foutmelding niet moeten geven, maar goed daarom ben ik ook hier :P
Fout op 41 is simpel. Je kijkt namelijk wel of email in POST zit en zoniet sla je de error op, alleen voor 41 check je niet of er al een foutmelding is. Dus of na het opslaan van de fout moet je exiten, of je moet bij elke volgende handeling kijken of er al een foutmelding gegeven is.
Quote:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\Password-lost.php on line 144
Deze lijkt me ook duidelijk. Je hebt geen mailserver bij php bekend gemaakt.
Toevoeging op 12/01/2012 15:22:51:
En de fout op 144 over de Receiver slaat er op dat je nergens een waarde toekent aan Receiver. Die kan je op 144 dan dus ook nog niet gebruiken.
Maar dat komt omdat ik alleen de code lokaal aan het uitproberen maar.
Toevoeging op 12/01/2012 16:06:16:
Helaas,,,, me leraar adviseerde om er een "else" tussen te zetten.
Echter loopt de query dan niet meer helemaal lekker.
Verwijzend naar:
Notice: Undefined index: email in C:\xampp\htdocs\Password-lost.php on line 41
De rest vd problemen zijn wel duidelijk bedankt daarvoor in elk geval :)