Wachtwoord vergeten: Nieuw ww wordt niet ge-update in mysql
Ik ben een member systeem aan het maken voor een sportclubje. Het aanmelden en bijvoorbeeld wachtwoord wijzigen gaat al prima. Nu probeer ik de functie van 'Wachtwoord vergeten' toe te voegen en heb hiervoor een functie en script gevonden die dit kan en hier en daar aangepast.
Nu doet het script zijn werk met de functie: Het controleert of de gebruiker bestaat, genereert een nieuw wachtwoord met function, verstuurt een e-mail naar de gebruiker met het nieuwe wachtwoord.
Echter wordt het wachtwoord niet ge-update in de tabel: gebruiker
ik heb het idee dat ik iets over het hoofd zie en dat de fout in de mysql_query zit of het aanroepen ervan.
ps,
loginName staat gelijk aan het e-mail adres van de gebruiker.
dit is het script:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function ranpass($len = 8){
$pass = NULL;
for($i=0; $i<$len; $i++) {
$char = chr(rand(48,122));
while (!ereg("[a-zA-Z0-9]", $char)){
if($char == $lchar) continue;
$char = chr(rand(48,90));
}
$pass .= $char;
$lchar = $char;
}
return $pass;
}
$newpass = ranpass(); // Wachtwoord aanmaken
$insertpass = sha1($newpass);
?>
function ranpass($len = 8){
$pass = NULL;
for($i=0; $i<$len; $i++) {
$char = chr(rand(48,122));
while (!ereg("[a-zA-Z0-9]", $char)){
if($char == $lchar) continue;
$char = chr(rand(48,90));
}
$pass .= $char;
$lchar = $char;
}
return $pass;
}
$newpass = ranpass(); // Wachtwoord aanmaken
$insertpass = sha1($newpass);
?>
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
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
<?php
$loginName = $_POST['loginName'];
include("connect.inc");
$cxn = mysqli_connect($host,$user,$passwd,$dbname)
or die("Couldn't connect to server");
$sql = "SELECT loginName FROM gebruiker
WHERE loginName='$loginName'";
$result = mysqli_query($cxn,$sql)
or die("Query died: loginName.");
$num = mysqli_num_rows($result);
if($num > 0)
{
mysql_query("UPDATE gebruiker SET password = '$insertpass' WHERE loginName='$loginName'");
echo "<p>We hebben een nieuw wachtwoord voor je ingesteld. Deze is per email naar je verzonden.</p>";
//controle echo om te zien of de variabelen loginName en newpass de juiste info mee krijgen
echo "<p>$loginName </p>";
echo "<p>$newpass </p>";
/* send email to new Customer */
$emess = "Nieuw wachtoord. ";
$emess .= "Gebruikersnaam en wachtwoord: ";
$emess .= "\n\n\t$loginName\n\t";
$emess .= "$newpass\n\n";
$subj = "Uw nieuwe wachtwoord";
$mailsend=mail("$loginName","$subj","$emess");
}
else
{
echo "$loginName komt niet voor in ons systeem";
include("123.php");
}
?>
$loginName = $_POST['loginName'];
include("connect.inc");
$cxn = mysqli_connect($host,$user,$passwd,$dbname)
or die("Couldn't connect to server");
$sql = "SELECT loginName FROM gebruiker
WHERE loginName='$loginName'";
$result = mysqli_query($cxn,$sql)
or die("Query died: loginName.");
$num = mysqli_num_rows($result);
if($num > 0)
{
mysql_query("UPDATE gebruiker SET password = '$insertpass' WHERE loginName='$loginName'");
echo "<p>We hebben een nieuw wachtwoord voor je ingesteld. Deze is per email naar je verzonden.</p>";
//controle echo om te zien of de variabelen loginName en newpass de juiste info mee krijgen
echo "<p>$loginName </p>";
echo "<p>$newpass </p>";
/* send email to new Customer */
$emess = "Nieuw wachtoord. ";
$emess .= "Gebruikersnaam en wachtwoord: ";
$emess .= "\n\n\t$loginName\n\t";
$emess .= "$newpass\n\n";
$subj = "Uw nieuwe wachtwoord";
$mailsend=mail("$loginName","$subj","$emess");
}
else
{
echo "$loginName komt niet voor in ons systeem";
include("123.php");
}
?>
wie heeft er een idee hoe ik dit kan oplossen?
Gebruik mysqli_query()
heb nu dit geplaats op regel 30:
Quote:
mysqli_query("UPDATE gebruiker SET password = '$insertpass' WHERE loginName='$loginName'");
helaas word het wachtwoord niet ge-update in de kolom: password
Gewijzigd op 16/02/2015 17:11:24 door N tigerrag
Probeer `password` (backticks).
Daarnaast: afhankelijk van je PHP versie (en er van magic_quotes_gpc gebruik wordt gemaakt) is bovenstaande query mogelijk vatbaar voor SQL-injectie.
Ook hoop ik dat je een tussenstap hebt ingebouwd dat je op een bevestig-link moet klikken om een wachtwoord te resetten, anders kan iedereen die jouw gebruikersnaam weet je wachtwoord resetten.
EDIT:
Ook moet je NOOIT informatie geven over wat er niet klopt aan je login-informatie. Dat is alleen maar behulpzaam voor mensen die aan de poort aan het voelen zijn.
EDIT:
Je kijkt ook niet of je mysql(i)_query is geslaagd, dat helpt natuurlijk ook niet in je zoektocht ;-).
Gewijzigd op 16/02/2015 17:26:46 door Thomas van den Heuvel
Zie preg_match().
Je moet ook $cxn meegeven in je parameter van mysqli_query.
Dat blijft vervolgens 3 jaar in de mailbox staan, hetzij uit gemakzucht, hetzij vanwege een aangemaakt, niet te onthouden ww.
Ooit heeft een hacker, vriendje of ander gespuis toegang tot de mailbox en leest dus het ww.
Maak liever een tijdelijk geldige link waarmee de gebruiker binnen een uur of zo de mogelijkheid krijgt om zelf het password aan te passen naar iets wat hij kan onthouden.
Voorkomt ook de mogelijkheid dat lolbroeken elk uur jou een nieuw password geven omdat ze toevallig je inlognaam of emailadres kennen
@Thomas van den Heuvel en @Ivo P, bedankt voor jullie suggesties en tips. Ik ga hier zeker mee aan de slag. Ik ga dit stap voor stap uitbouwen.
kan iemand toevallig nog laten weten hoe ik het, het beste kan aanpakken met een eventuele activeringscode?
Je kan de activeringscode opslaan in de ledentabel. Zodra deze correct in de link staat, activeer je het account.
naast de code sla je ook een einde-geldigheid op, en als hij verbruikt is, markeer je dat ook (of je wist de code) om hergebruik te voorkomen.