Wachtwoord vergeten script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

John de Velden

John de Velden

08/12/2012 15:04:08
Quote Anchor link
Hallo,

Voor mijn website heb ik een optie om je wachtwoord op te vragen als je deze vergeten bent.
Alleen zegt hij telkens dat de opgegeven emails niet in de database staan.
Ze staan er echt in en de database werkt wel want registreren en inloggen werkt wel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
if (!empty($_POST)){
// databaseverbinding invoegen
include("mysql_connect.inc.php");
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
mysql_select_db("databasepnl") or die("Kon de database niet openen: " . mysql_error());
// query samenstellen en uitvoeren
$sql = "SELECT * FROM gebruikers WHERE email='". $_POST["e"] ."'";
$result = mysql_query($sql) or die("Query mislukt: " . mysql_error());
// controleren of mail-adres is gevonden
if (!empty($result)){
// JA: variabelen toekennen
while($rij = mysql_fetch_array($result)){
$ontvanger = $rij ['email'];
$pass = $rij ['wachtwoord'];
}

// rest van het bericht opstellen, inclusief extra header
$onderwerp = "Uw wachtwoord";
$msg = "Hallo, u hebt verzocht om toezending van uw wachtwoord\n\n";
$msg .= "Uw wachtwoord is: " . $pass;
$msg .= "\n\nMet vriendelijke groet, de webmaster.";
$extra = "X-MAILER: PHP/versie " .phpversion();
// bericht verzenden en eventueel foutboodschap tonen
if (!mail($ontvanger, $onderwerp, $msg, $extra)){
$tekst = "Dit e-mail adres komt niet voor in onze database<br>Terug naar <a href=\"login.php\">inloggen</a> ";
echo($tekst);
}
else{
$tekst = "Uw wachtwoord is verzonden.
Terug naar het <a href=\"login.php\">inloggen</a>"
;
echo($tekst);
}
}
else{
// NEE, email-adres niet gevonden: foutmelding tonen
$tekst = "Dit e-mailadres (<b>". $_POST["email"] . "</b>) komt
niet voor in de database<br>\n
<a href=\""
. $_SERVER["PHP_SELF"] ."\">Ander e-mailadres</a>";
echo ($tekst);
}

// Indien pagina zichzelf niet heeft aangeroepen: HTML-formulier tonen
}else{
?>

<html>
<head>
<title>E-mail mijn wachtwoord</title>
</head>
<body>
<h2>U wachtwoord e-mailen</h2>
<form method="post" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SERVER["PHP_SELF"]);?>
">
Uw e-mailadres:
<input type="Text" name="e" size="30">
<input type="Submit" value="E-mail mijn wachtwoord!">
</form>
</body>
</html>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
} //else-blok afsluiten
?>


Wie weet wat er fout is?
Alvast bedankt.
Gewijzigd op 08/12/2012 15:04:55 door John de Velden
 
PHP hulp

PHP hulp

22/10/2021 04:53:12
 
Obelix Idefix

Obelix Idefix

08/12/2012 15:35:41
Quote Anchor link
Om te controleren of het formulier verzonden is gebruik liever :
if($_SERVER['REQUEST_METHOD'] == 'POST')

Gebruik geen 'or die', maar bouw goede foutafhandeling in.

Spring je code in, bij if-statements, while-lussen, zodat te zien is welke { bij } hoort.

Gebruik in php (echo) bij voorkeur ', zodat je in HTML " kunt gebruiken zonder al dat escapen.

Je mist volgens mij headers in je mail; gebruik liever phpmailer of swiftmailer.

Waarom variabelen kopiëren / onnodig aanmaken (regel 14, 15 en 18)?

Een while-lus is niet nodig op regel 13; een e-mailadres kan immers maar 1x voorkomen.

PHP_SELF zou onveilig zijn (hackbaar).

De ( ) bij de echo zijn niet nodig.

Je slaat kennelijk het wachtwoord zonder enige vorm van codering op in de database. Dat is erg onveilig.

Ten aanzien van je vraag: debuggen. Echo de query, klopt het pad wat er gevolgd wordt?
Ik zou na de query controleren of er 1 rij gevonden is. Zo ja; een mail sturen met daarin een nieuw wachtwoord wat de gebruiker eenmalig kan gebruiken om in te loggen. Indien niets gevonden een melding dat de combinatie van wachtwoord en emailadres niet is gevonden.
 
John de Velden

John de Velden

08/12/2012 18:29:23
Quote Anchor link
Hallo Obelix en Idefix,

Ik had misschien moeten melden dat ik nog maar een scholier ben (HAVO 4) en we voor het vak Informatica een website moeten maken met nu nog alleen XHTML en PHP.
Dit alles gebeurt op een usb stick met usbwebserver.
Mijn database is gemaakt met phpmyadmin.
De veiligheid is nu nog niet belangrijk en de docenten vragen hier niks van en leggen ook niet uit hoe je het kan beveiligen.
Helaas snap ik niet alles wat u zegt en wou ik alleen weten wat ik misschien nog nodig zou moeten hebben om het te laten werken want de emails staan echt in de database maar hij blijft maar zeggen van niet.
Dus wat bedoelt u met: Ten aanzien van je vraag: debuggen. Echo de query, klopt het pad wat er gevolgd wordt?
Ik zou na de query controleren of er 1 rij gevonden is. Zo ja; een mail sturen met daarin een nieuw wachtwoord wat de gebruiker eenmalig kan gebruiken om in te loggen. Indien niets gevonden een melding dat de combinatie van wachtwoord en emailadres niet is gevonden.
Overigens is dit de fout melding: Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in H:\USBWebserver v8.5\8.5\root\php3\vergeten.php on line 24
Dit e-mail adres komt niet voor in onze database
Terug naar inloggen
 
Moose -

Moose -

08/12/2012 18:49:09
Quote Anchor link
Dit ligt niet aan het emailadres dat fout is, maar aan de functie mail() die jij gebruikt. Als je goed naar je code kijkt zie je dit staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if (!mail($ontvanger, $onderwerp, $msg, $extra)){
$tekst = "Dit e-mail adres komt niet voor in onze database<br>Terug naar <a href=\"login.php\">inloggen</a> ";


Als de mail() functie niet goed gaat, geef dan de error "Dit e-mail adres komt niet voor in onze database". Maar dat is helemaal niet de error. Als je dat nou eens veranderd naar "mail() functie doet het niet" dan zul je zien dat je dat als error krijgt
 
John D

John D

09/12/2012 09:43:33
Quote Anchor link
Not Moose heeft het bij het juiste eind, de mail() functie op xamp, wamp of lamp werkt vrijwel nooit omdat er geen koppeling is naar een echte mailserver. Je kan dit oplossen door phpmailer te gebruiken en daarin bijvoorbeeld gmmail als smtp server op te geven. Daarmee kan je wel email verzenden. De php mail() werkt weer wel bij hosting providers maar het is eenvoudiger om ook daar phpmailer toe te passen. Google op phpmailer om de scripts te vinden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.