webmasterstuff: wachtwoord wijzigen

Ingelogde bezoeker zelf paswoord laten wijzigen
Een ingelogde bezoeker kan zijn eigen paswoord wijzigen.
Stappenplan: via een formuliertje moet de bezoeker zijn oude paswoord en twee keer zijn nieuwe paswoord invoeren. Dit is een eenvoudige pagina.

De ingevoerde informatie wordt op een tweede pagina gecontroleerd (of de info niet leeg is en of beide nieuwe paswoorden identiek zijn.
Er wordt enkel een invoer gedaan als het oude paswoord correct is.
Lees goed de extra info achter de //-tekens

We starten met de eerste pagina, een formuliertje, waar de bezoeker zijn oude en twee keer nieuwe paswoord invoert.
   
<table width="800" border="0" align="center" cellpadding="0" cellspacing="0">   
<tr>          // ik giet alles graag in een tabel, jij kan dit skippen natuurlijk
<td><form name="form1" method="post" action="paswoord_controle.php">
<table width="100%" border="0" cellspacing="4" cellpadding="0">
// action = de tweede pagina waar de controle gebeurt dus die moet je straks ook maken; naam kan je zelf kiezen

<tr>
<td width="76">Oud wachtwoord</td>     // het oude wachtwoord
<td width="3">:</td>
<td width="405"><input name="oldpass" type="text" id="oldpass" size="30"></td>     
</tr>

<tr>
<td width="76">Nieuw wachtwoord</td>    // het nieuwe wachtwoord
<td width="3">:</td>
<td width="305"><input name="newpass" type="text" id="newpass" size="30"></td>  
</tr>


<tr>
<td width="76">Bevestig nieuw wachtwoord</td>    // nog eens het nieuwe wachtwoord
<td width="3">:</td>
<td width="305"><input name="newpass2" type="text" id="newpass2" size="30"></td> 
</tr>


<tr>
<td> 
<td><input type="submit" name="Submit" value="Verstuur">  

<input type="reset" name="Reset" value="Begin opnieuw"></td>
</tr>
</table>
</form></td>
</tr>
</table>                                 // hier sluit ik mijn tabel
// woordjes oldpass, newpass en newpass2 kan je naar eigen smaak veranderen, maar je hebt die 
// woorden nodig voor de 2de pagina waar de controle van de invoer gebeurt!
 

Maak nu de tweede pagina. Deze bevat allerlei functies met variabelen die je naar de variabelen die je zelf gebruikt, moet aanpassen natuurlijk.
   
<?php                              // start van de tweede pagina bv paswoord_controle.php
session_start ();                     // pagina enkel zichtbaar maken als bezoeker is ingelogd
if (!$_SESSION['ducksite'] == 1) {    // naam van de inlogsessie (zelf veranderen)
header("location:inlogpagina.php");   // doorsturen als bezoeker niet is ingelogd (zelf veranderen)
die ();                               // niet ingelogd = geen verdere info van de pagina laten zien!
 }                                    
 

Include de pagina die verbinding maakt met je database
   
include('connect.php');                       // naam is afhankelijk hoe jij jouw pag. hebt genoemd
if( $_SERVER['REQUEST_METHOD'] == 'POST' )    // dit zegt dat er een post-actie is geweest
 

Controle of de ingevoerde gegevens niet leeg zijn
   
 if (empty ($_POST['newpass']) && empty ($_POST['newpass2']))  {          // geen lege velden?
 header  ('Refresh: 5; url=../formulierpagina.php');                      // leeg veld = doorsturen binnen 5sec naar deze pag
 echo "Om jezelf te controleren: voer twee keer eenzelfde wachtwoord in"; // intussentijd vermeld je een boodschap
 die ();}                                                                 // geen toegang meer tot verdere info

 

Controle of beide nieuwe paswoorden identiek zijn
   
   if ($_POST['newpass'] != $_POST['newpass2']) {                         // dit is de controle
     header  ('Refresh: 5; url=../formulierpagina.php');                  // terugstuurpagina na 5 sec
     echo "De twee wachtwoorden die je invoerde komen niet overeen, doe het nog een keer aub";
     die ();}                                                             // geen toegang meer tot verdere info
 

Benoem de variabelen
   
$oldpass = mysql_real_escape_string($_POST['oldpass']);        // het gebruik van mysql_real_escape_string
$newpass = mysql_real_escape_string($_POST['newpass']);        // is een veiligere manier om gegevens te versturen
$newpass2 = mysql_real_escape_string($_POST['newpass2']);
 

Verander het oude paswoord naar het nieuwe
   
$updatepass=mysql_query("UPDATE tabelnaam SET tabelwachtwoord = '$newpas' WHERE tabelwachtwoord = '$oldpass' ");

// tabelnaam moet je veranderen naar de naam van de tabel in je database
// tabelwachtwoord = de naam van het veld waarin de paswoorden komen in je database
// achter de WHERE plaats ik het oude wachtwoord zodat er enkel een UPDATE plaatsvindt als het oude juist is

// opmerking: uiteraard moeten de wachtwoorden beveiligd worden; zowel de invoer van het nieuwe
// als het lezen achter de WHERE van het oude = lees daar op mijn website een andere pagina voor
 

Een boodschap geven na de update en pagina afsluiten
   
 if($updatepass)                    // als de UPDATE succesvol was
  echo "ok";                        // boodschap dat het ok is
 else
  echo "Niet ok";                   // anders boodschap niet ok
 
?>                                  // einde php-tag tweede pagina
 

Als je een syntax-error krijgt over de T-strings, wat ik tot vervelens toe ook regelmatig kreeg bij het testen, haal dan zoveel mogelijk spaties weg (maar respecteer wel de volgende regel-afspraken) dan werkt het soms plots wel ;)
Succes ermee!