Wachtwoord vergeten: Nieuw ww wordt niet ge-update in mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

N tigerrag

N tigerrag

16/02/2015 16:55:41
Quote Anchor link
Goedendag,

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)
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
<?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);
?>

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
<?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?
 
PHP hulp

PHP hulp

16/11/2024 15:40:06
 
- Ariën  -
Beheerder

- Ariën -

16/02/2015 16:58:41
Quote Anchor link
Gebruik mysqli_query()
 
N tigerrag

N tigerrag

16/02/2015 17:00:20
Quote Anchor link
Ga ik proberen @Aar. bedankt alvast.

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
 
Thomas van den Heuvel

Thomas van den Heuvel

16/02/2015 17:22:57
Quote Anchor link
PASSWORD is een gereserveerd woord waarschijnlijk.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "$loginName komt niet voor in ons systeem";

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
 
- SanThe -

- SanThe -

16/02/2015 18:00:38
Quote Anchor link
De function ereg() is antiek.
Zie preg_match().
 
- Ariën  -
Beheerder

- Ariën -

16/02/2015 18:05:00
Quote Anchor link
Je moet ook $cxn meegeven in je parameter van mysqli_query.
 
Ivo P

Ivo P

16/02/2015 18:34:51
Quote Anchor link
Je mailt het nieuwe password.
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
 
N tigerrag

N tigerrag

16/02/2015 21:54:40
Quote Anchor link
@Aar, ik heb nu $cxn meegegeven en het is gelukt!. het wachtwoord wordt nu ook in de database gewijzigd

@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?
 
- Ariën  -
Beheerder

- Ariën -

16/02/2015 22:08:20
Quote Anchor link
Je kan de activeringscode opslaan in de ledentabel. Zodra deze correct in de link staat, activeer je het account.
 
Ivo P

Ivo P

16/02/2015 23:16:03
Quote Anchor link
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.
 



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.