Inlog- en registratie script
Naar aanleiding van dit topic is dit artikel tot stand gekomen waarin uitgelegd wordt hoe je een op PHP en MySql gebaseerd memberssysteem kan maken. In dit artikel zal echter stapsgewijs naar het resultaat toe worden gewerkt. Ben je dus onbekend met PHP en MySql, of ben je nieuw met PHP en MySql en weet je niet waar je moet beginnen wanneer je een members-script wil maken? Dan zou het doornemen van dit artikel een ideale oplossing kunnen zijn.
Zoals gezegd zal er stap voor stap worden gewerkt, met tussendoor en na het uiteindelijk resultaat enkele tips/suggesties. Aan het eind is het gehele script te downloaden waarin de tabs en overzichtelijkheid behouden zijn gebleven en het dus eenvoudiger aan te passen is. Maar nu eerst het echte werk.
Stap 1, hoe begin ik?Je moet voor jezelf eerst weten wat je wil, dus met welke gegevens moet men inloggen en welke gegevens moet men opgeven bij het registreren?
Handig is dus om eerst te bepalen hoe je tabel in je MySql-database er uit komt te zien waarin de gegevens worden opgeslagen. In dit artikel willen we een loginnaam en passwoord weten, onze tabel noemen we members. Het tabel krijgt dus twee velden plus de standaardveld 'id'. Je query om je tabel te creëren wordt dus;
CREATE TABLE members (
id int(10) unsigned NOT NULL auto_increment,
inlognaam varchar(50) default NULL,
passwoord varchar(20) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
De hoofdletters die hierin gebruikt worden zijn ter verduidelijking van de commando's.
Zoals gezegd is 'id' een standaardveld, omdat een waarde in deze veld enkel een getal kan zijn, gebruiken we hiervoor het type int(), tussen haakjes komt het aantal maximaal karakters dat een waarde in dit veld kan bevatten. 'Auto_increment' betekent letterlijk 'zelf toename', de waarde neemt dus vanzelf met één toe wanneer er een nieuwe waarde wordt ingevoegd, dit om elke rij in die tabel uniek te kunnen maken. De velden inlognaam en passwoord krijgen het type VARCHAR (dit betekent dat de waarden in die velden een variabele aantal karakters kunnen krijgen) met tussen haakjes wederom het maximaal aantal karakters dat een waarde mag hebben. Mocht je niet meer weten wanneer je over tabel, veld of rij spreekt, bekijk dan eens onderstaand afbeelding;

Als je niet bekend bent met MySql, wanneer je (of je host) met phpMyAdmin werkt kun je de 'create table'-query uitvoeren door op de volgende afbeelding te klikken;

In phpMyAdmin 2.6.1 verschijnt dan een pop-up met een tekstveld waarin je deze query kunt plaatsen en uitvoeren.
Voor meer uitleg hierover zou je eens op google kunnen zoeken. We gaan snel door naar de volgende stap voordat het te vermoeiend wordt, we willen immers ons systeem zo snel mogelijk online hebben!
Stap twee, het maken van een inlogformulier.
Dit is nog puur (x)html, op w3schools.com kun je wat meer informatie vinden over formulieren en input-typen, deze site is ook handig om als naslagwerk te gebruiken. De opbouw van een formulier is daar ook te vinden, dus wij gaan hier snel door. Om het formulier er netjes uit te laten zien kun je gebruik maken van tabellen;
<form method="post">
<table>
<tr><th colspan="2">Inloggen</th></tr>
<tr><td>Inlognaam</td><td><input type="text" name="inlognaam" size="15"></td></tr>
<tr><td>Passwoord</td><td><input type="password" name="passwoord" size="15"></td></tr>
<tr><td></td><td><input type="submit" value="Inloggen"></td></tr>
</table></form>
Natuurlijk doet dit formulier nog niets, want de gegevens worden nergens opgevangen. Om dit te doen geven we het formulier een actie waar de gegevens naartoe moeten, daar vangen we de gegevens vervolgens op zodat we het kunnen vergelijken met de gegevens uit de database. Dit kan zo;
<form action="?actie=inloggen" method="post"> Het formulier wordt nu naar dezelfde pagina verstuurd. 'actie=inloggen' gebruik ikzelf vaak om te kunnen controleren of er een actie gaande is, zoniet, dan toon ik het formulier, kleine voorbeeld;
<?php
if ($_GET['actie'] == 'inloggen') {
// opgestuurde gegevens vergelijken met gegevens uit database
} else {
// als er geen actie is, dan wordt het formulier getoond.
}
?>
Stap drie, registreren
We zijn hier wederom een formuliertje nodig waarmee men enkele gegevens op kunnen sturen.
We weten nu hoe een formulier gemaakt wordt. Het registratie-formulier zullen we ietsje uitbreiden. Men kan hier een voorkeurspasswoord invullen, maar omdat de input-type hiervan 'password' is, kan men niet zien of ze het goed invullen, ze kunnen immers door het snelle typen een typefout maken. Wat je dus kunt doen (en veel gedaan wordt) is een extra passwoord-controleveld maken en deze waarden na het versturen met elkaar vergelijken. Het formulier komt er dan als volgt uit te zien;
<?php
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren\" method=\"post\">
<table>
<tr><th colspan=\"2\">Registreren</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr>
</table></form>";
?>
Nieuw in deze formulier is $_SERVER['PHP_SELF']?actie=waarde, SELF geeft al deels aan wat het ongeveer inhoudt. De variabele $_SERVER['PHP_SELF'] leest gewoon de pagina uit waarin het script wordt uitgevoerd, heet je pagina dus index.php, dan krijgt die variabele de waarde index.php. Het betekent dus niets anders dan dat de ingevoerde gegevens naar dezelfde pagina zullen worden verzonden.
Nu komt het echte werk. We moeten eerst zorgen dat we de ingevoerde waarden opvangen, we hebben het formulier de parameter actie=registreren gegeven, we kunnen dit nu dus makkelijk opvangen door te kijken wat de parameter is, dus als actie registreren is, dan moeten we het opvangen; if actie=registreren -> gegevens opvangen. In php wordt dat als volgt;
<?php
if ($_GET['actie'] == 'registreren') {
// gegevens opvangen
} else {
// anders, formulier tonen
}
?>
De opbouw is dus makkelijk, if ($_GET['actie'] == 'registreren') is een if-statement, alles wat er moet gebeuren als die statement klopt (= true) moet je tussen een geopende en gesloten accolade zetten. Als de statement niet klopt (= false) kun je een andere if-statement gebruiken of een else-statement, 'else' is engels voor 'anders', dus je zou het kunnen lezen als 'in elk ander geval';
als actie==registreren {
doe dit
} in elk ander geval {
doe dat
}
if (empty($variabele)) {
// als de variabele geen waarde bevat
echo "de variabele is leeg.";
} else {
// in elk ander geval
echo "de variabele bevat een waarde namelijk ".$variabele.".";
}
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
// als alle velden zijn ingevuld
}
Waarom '$_POST['inlognaam']'? '$inlognaam' zou ook kunnen werken, maar niet meer in elke versie van php. Hier gebruiken we superglobals, we gebruiken POST wanneer de method van het formulier post is, en GET wanneer de method van het formulier get is en de waarden weggeschreven worden in de url. Method post is dus vaak veiliger omdat men niet in de url kan zien welke gegevens opgestuurd worden en zijn voor bijvoorbeeld hackers minder makkelijk om te onderscheppen.
Nu hebben we alle mogelijke velden gecontroleerd op een waarde. Wanneer alle velden zijn ingevuld zal hij dus de laatste else-statement bereiken. Hier gaan we controleren of het ingevoerde passwoord overeenkomt met de controlepasswoord;
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
//gegevens in database stoppen
}
Met 'mysql_query(query)' voer je de query uit. We willen natuurlijk ook dat men een melding krijgt zodra de gegevens in de database zijn gestopt, in zijn totaliteit krijgen we dan;
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
if ($_GET['actie'] == 'registreren') {
// als men zich wil registreren
if ($_GET['versturen'] == 'ja') {
// als formulier reeds is verstuurd
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
}
}
} else {
// als formulier nog niet is verstuurd, toon registratieformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren&versturen=ja\" method=\"post\">
<table>
<tr><th colspan=\"2\">Registreren</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr>
</table></form>";
}
}
Stap vier, inloggen.
Er kunnen nu gegevens in de database worden gezet, het inlog-formulier hebben we in stap twee al gemaakt, nu moeten we dus de opgestuurde gegevens gaan vergelijken met de gegevens uit de database.
Men heeft dus een inlognaam en passwoord ingevuld, we kunnen op twee manier kijken of de gegevens in de database staan en bij elkaar horen. De eerste is door de ingevulde passwoord uit de database te halen en de bijbehorende inlognaam in die rij vergelijken met de ingevulde inlognaam, of andersom. Mijn voorkeur gaat uit naar de tweede optie. We gaan dus alle gegevens uit de database selecteren waar de inlognaam gelijk is aan de opgestuurde inlognaam;
$query= "SELECT * FROM members WHERE inlognaam='".$_POST['inlognaam']."'";
Het resultaat is nu nog enkel geselecteerd, we moeten het nu dus uitvoeren;$resultaat = mysql_query($query) OR die ("Kon geen verbinding maken met MySQL");
We kunnen nu kijken of er uberhaupt een waarde in de database staat die overeenkomt met de ingevulde inlognaam;$aantal = mysql_num_rows($resultaat);
Zoniet, dan is er geen resultaat;if ($aantal == '0') {
echo "Er was geen resultaat gevonden, inlognaam bestaat niet.";
} else {
// er is wel een resultaat gevonden, we kunnen nu kijken of het passwoord uit de database overeenkomt met de ingevoerde passwoord.
}
$login = mysql_fetch_object($resultaat);
De bijbehorende passwoord kunnen we nu uitlezen met 'objectvariabele->veldnaam', dus $login->passwoord.Wanneer het passwoord overeenkomt moeten we eerst een cookie zetten bij de bezoeker zodat hij niet op elke pagina opnieuw hoeft in te loggen. Vervolgens kun je de bezoeker doorsturen;
if($_POST['passwoord'] == $login->passwoord) {
// als gegevens kloppen met gegevens uit database, cookies setten en doorsturen!
setcookie("inlognaam", $_POST['inlognaam'], time() + 60*60); // cookie blijft 60 keer 60 seconden bestaan
setcookie("passwoord", $_POST['wachtwoord'], time() + 60*60);
echo "U bent succesvol ingelogd, een moment.. <META HTTP-EQUIV=\"REFRESH\" CONTENT=\"2; URL=".$redirect_pagina."\">";
} else {
echo "Uw inloggegevens kloppen niet, klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om nogmaals te proberen.";
}
<?php
if ($_GET['actie'] == 'registreren') {
// gegevens opvangen
} else {
// anders, formulier tonen
}
?>
<?php
// waar moet de bezoeker heengestuurd worden nadat hij/zij succesvol ingelogd is ?
$redirect_pagina = "pagina.php";
if ($_GET['actie'] == 'inloggen') {
// als inlogformulier is verstuurd
$sql = "SELECT * FROM members WHERE inlognaam='".$_POST['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// als er geen resultaat is gevonden
echo "Het door u ingevulde inlognaam bestaat niet.";
} else {
$login = mysql_fetch_object($resultaat);
$login->passwoord;
$login->inlognaam;
if($_POST['passwoord'] == $login->passwoord) {
// als gegevens kloppen met gegevens uit database, cookies setten en doorsturen!
setcookie("inlognaam", $_POST['inlognaam'], time() + 60*60); // cookie blijft 60 keer 60 seconden bestaan
setcookie("passwoord", $_POST['wachtwoord'], time() + 60*60);
echo "U bent succesvol ingelogd, een moment.. <META HTTP-EQUIV=\"REFRESH\" CONTENT=\"2; URL=".$redirect_pagina."\">";
} else {
echo "Uw inloggegevens kloppen niet, klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om nogmaals te proberen.";
}
}
} else if ($_GET['actie'] == 'registreren') {
// als men zich wil registreren
if ($_GET['versturen'] == 'ja') {
// als formulier reeds is verstuurd
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
}
}
} else {
// als formulier nog niet is verstuurd, toon registratieformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren&versturen=ja\" method=\"post\">
<table>
<tr><th colspan=\"2\">Registreren</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr>
</table></form>";
}
} else {
// inlogformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=inloggen\" method=\"post\">
<table>
<tr><th colspan=\"2\">Inloggen</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Inloggen\"></td></tr>
<tr><td></td><td><a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Registreren</a></td></tr>
</table></form>";
}
?>
<?php
$host = "localhost"; //mysql locatie
$user = ""; //mysql gebruikersnaam
$pass = ""; //mysql wachtwoord
$db = ""; //mysql database
mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db($db);
?>
// sql connectie includen
include('contactdb.php');
Stap vijf, pagina's beveiligen.
De bedoeling van een members-gedeelte is natuurlijk dat alleen geregistreerde mensen op bepaalde pagina's mogen komen. Die pagina's kun je nu op een eenvoudige manier beveiligen, je bent bent enkel een statement nodig waarin je kijkt of de cookie aanwezig is en deze overeenkomt met de andere cookie die geplaatst waren na het succesvol inloggen.
<?php
// sql connectie includen
include('contactdb.php');
// inlogpagina
$login_pagina = "login.php";
$sql = "SELECT * FROM members WHERE inlognaam='".$_COOKIE['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// de waarde van de aanwezige inlognaam-cookie bij de bezoeker komt niet overeen met een waarde uit de database
echo "Klik <a href=\"".$login_pagina."\"></a> om in te kunnen loggen.";
} else {
$login = mysql_fetch_object($resultaat);
if ($_COOKIE['passwoord'] != $login->passwoord) || ($_COOKIE['inlognaam'] != $login->inlognaam)) {
echo "De cookies konden niet gecombineerd worden.";
} else {
// de beveiligde inhoud tonen;
}
}
?>
1)
Voor je echo enkele quotes gebruiken, dus echo 'Je tekst met dubbele quotes ", het script zal nu geen error ondervinden';
2)
Even de php-modus verlaten, dus;
else {
// de beveiligde inhoud tonen;
?> Je tekst met dubbele quotes ", het script zal nu geen error ondervinden, deze tekst wordt gewoon getoond.
Zorg wel dat er na je tekst de php-tag staat, zodat het script wel de rest uit kan voeren en geen error ondervindt.
<?php
}
De php-generator op deze site gebruiken om automatisch slashes te plaatsen voor dubbele quotes, klik hier.
Zorg dus dat je gewoon standaard dubbele quotes escaped wanneer je aan het scripten bent, op deze manier heb je ook een consquente manier van scripten.
Download zipbestand
Uiteraard is dit bestand ook in downloadformaat, hierin zitten login.php, connectdb.php, beveiligd.php en members.sql voor de table-query. Klik hier om het zip-bestand te dowloaden. De bestanden zijn hierin met tabs gescript (in Notepad++) waardoor het script wat overzichtelijker oogt.
Tips
->Commentaar
Zoals je ziet ben ik in het script niet zuinig geweest met commentaar, wanneer je zelf eens iets schrijft of aanpast is het voor jezelf handig om dit ook niet te zijn, wanneer je namelijk aantekeningen plaatst bij sommige acties in het script, weet je later als je terugkijkt precies wat het script op dat punt doet. Ook kan het handiger zijn wanneer je script een error ondervindt, om deze sneller terug te vinden. Zoals je wellicht door hebt kun je in php commentaar plaatsen door twee slashes te plaatsen en daarachter het commentaar. Er zijn drie methodes om commentaar te plaatsen in php;
Manier 1;
// ruimte voor commentaar, alles wat op de volgende regel komt wordt weer gewoon meegenomen door het script
Manier 2;
# ruimte voor commentaar, alles wat op de volgende regel komt wordt weer gewoon meegenomen door het script
Manier 3;
/*
Ruimte voor grote lappen commentaar
Alles wat na het sterretje en slash komt wordt weer meegenomen door het script.
*/
->Eigenwijs
Iedereen heeft zijn eigen manier van scripten, voor de één erg onoverzichtelijk en onbegrijpelijk, voor de ander misschien weer volkomen begrijpelijk.
Zelf probeer ik altijd beknopt commentaar te plaatsen in scripts en maak ik gebruik van superglobals daar waar het nodig is, dus $_POST['variabele'] in plaats van $variabele, ook zet ik dit altijd binnen quotes;
zonder quotes;
echo "De variabele heeft de waarde $_POST['variabele']";
met quotes;
echo "De variabele heeft de waarde ".$_POST['variabele']."";
Wat ik nooit doe is hele pagina's echoën, hierdoor wordt je script alleen maar onnodig zwaar en kan het langer duren voordat het is uitgevoerd. Een voorbeeld, een basis van een pagina ziet er als volgt uit;
<html><head>
</head><body>
<div id="menu"></div>
<div id="content"></div>
</body></html>
Wat je kunt doen is het volgende;
<html><head>
</head><body>
<div id="menu"></div>
<div id="content">
<?php
het script hier dus
?></div>
</body></html>
<html><head>
</head><body>
<div id="menu"></div>
<div id="content">
<?php
include('login.php');
?></div>
</body></html>
Uitbreidingen
Het script dat we hier hebben gemaakt is natuurlijk erg basic, dus er is genoeg ruimte voor uitbreidingen. Misschien heb je zelf al ideën of misschien moet je eerst inspiratie opdoen. Hier schotelen we alvast twee mogelijkheden voor.
->Inlogtijd
De tijd dat een persoon die is ingelogd, ingelogd blijft, is afhankelijk van de tijd dat de door jou geplaatste cookie blijft bestaan. We kijken even terug;
setcookie("inlognaam", $_POST['inlognaam'], time() + 60*60);
setcookie("passwoord", $_POST['wachtwoord'], time() + 60*60);
<tr><td>inlogtijd</td><td><select name=\"inlogtijd\">
<option value=\"1800\">Half uur</option>
<option value=\"3600\">Eén uur</option>
<option value=\"7200\">Twee uur</option>
<option value=\"14400\">Vier uur</option>
<option value=\"86400\">Eén dag</option></td></tr>
setcookie("inlognaam", $_POST['inlognaam'], time() + $_POST['inlogtijd']); // cookie blijft 60 keer 60 seconden bestaan
setcookie("passwoord", $_POST['wachtwoord'], time() + $_POST['inlogtijd']);
->Wachtwoord vergeten
Omdat je tegenwoordig overal een wachtwoord voor nodig bent, kan het wel eens voorkomen dat men een wachtwoord vergeten. Mocht dat het geval zijn, dan is een functie waarmee je je wachtwoord op kan vragen natuurlijk een ideale uitkomst. Maar hoe zet je dat nu weer in elkaar?
Het veiligst is om het wachtwoord te mailen, hiervoor ben je wel het emailadres nodig van de leden. Je zult dus eerst je tabel moeten wijzigen door het veld 'emailadres' toe te voegen, aan het registratieformulier de input-veld emailadres toe moeten voegen en natuurlijk je INSERT INTO-query aanpassen. Dan zorg je voor een link in je formulier waar men op kan klikken als ze hun wachtwoord zijn vergeten. De link zou je bijvoorbeeld onder 'registreren' kunnen plaatsen;
<tr><td></td><td><a href=\"".$_SERVER['PHP_SELF']."?actie=ww_vergeten\">Wachtwoord vergeten?</a></td></tr>
Nu zou je dus zelf een if-statement kunnen maken waarin je de parameter ww_vergeten opvangt;if ($_GET['actie'] == 'ww_vergeten') {
$site = "";
/*
zonder http://www., dus bijvoorbeeld google.com
Je kunt het From: gedeelte in de mail() functie natuurlijk aanpassen naar eigen wensen
*/
if ($_GET['versturen'] == 'ja') {
$sql = "SELECT * FROM members WHERE email='".$_POST['emailadres']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
$rij = mysql_fetch_object($resultaat);
$passwoord = $rij->passwoord;
$inlognaam = ucfirst($rij->inlognaam);
$emailadres = htmlspecialchars($rij->emailadres);
if ($aantal == '0') {
echo "Dit emailadres is bij ons niet bekend!";
} else {
$bericht = "Beste ".$naam.",
\n\n
Er is zojuist op ".$site." met dit emailadres het bijbehorende passwoord opgevraagd.
\n\n
Onthoud of bewaar uw passwoord zorgvuldig en buiten bereik van anderen!
Uw passwoord is ".$passwoord.".\n\n
Groet,\n
".$site."";
mail($emailadres,"Wachtwoord opgevraagd",$bericht,"From: ".$site." <no_reply@".$site.">");
echo "Er is een email met het bijbehorende passwoord verstuurd naar de door u opgegeven emailadres!";
}
}else{
?>
<form method="post" action="<? echo "".$_SERVER['PHPSELF']."?actie=ww_vergeten&versturen=ja"; ?>">
<table>
<tr>
<td>Emailadres:</td><td><input type="text" name="emailadres"></td>
</tr>
<tr>
<td></td><td><input type="submit" name="submit" value="Opvragen"></td>
</tr>
</table>
</form>
<?php
}
}
Je hebt nu een hele lap tekst achter de kiezen dus tijd om het online uit te proberen!
Heb je alles stap voor stap doorgenomen maar kom je er niet uit? Wil je het script op andere manieren uitbreiden maar vind je op google of andere sites geen uitkomst?
Dan kun je natuurlijk hier terecht!
Stel je vraag duidelijk of omschrijf je probleem zo krachtig mogelijk,
dus wat heb je geprobeerd, wat heb je op papier (computer), wat wil je bereiken en
wat is het resultaat nu (krijg je bv een foutmelding, zo ja vermeld die,
of krijg je alleen maar het inlogformulier te zien, et cetera) ?
Wanneer je de hele code wilt kun je op deze pagina terecht. Succes.
Mijn naam is Bjorn Simmering. Eigenaar van HTML-site. Ik wil je graag helpen om meer uit je website te halen.
Internet Marketing 2-daagse
Hosting door BlueYellow
Webklik - gratis website!
Overzicht reizen
Hier adverteren?
Website voor beginners
Houten vloeren
Cursus HTML5 - € 24,00