Tutorials

Activatie URL systeem

Uitleg over hoe je een registreer systeem maakt, waarbij de gebruiker zijn account moet activeren.

Pagina 1

De MySQL tabel

CREATE TABLE voorbeeld_gebruikers (
id int(11) not null auto_increment primary key
, login varchar(20) not null
, pass varchar(200) not null
, email varchar(150) not null
, activeer varchar(100) null
);

Deze SQL is eventueel nog uit te breiden met meer velden, maar voor het voorbeeld houden we het simpel.
Pagina 2

Het registreren

Het registreren kan via een normaal simpel HTML formulier.

<?
// maak de database connectie
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "Er kon geen connectie worden gemaakt met de database.";
exit();
}

// functie om het e-mail adres te controleren op geldigheid
// ten eerste of de parameters goed zijn
// ten tweede of het domein achter het apestaartje bestaat
function check_email($mail)
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
{
$email_adres = $mail;
$email = explode("@", $email_adres);

if (gethostbyname($email[1]) == $email[1])
$valid = "no";
}
else
$valid = "no";

return $valid;
}

// functie om een random key aan te maken
function makekey($num)
{
// genereer het random paswoord
mt_srand((double)microtime()*1000000);

// loop totdat het $pass(woord) dezelfde lengte heeft als $num
while (strlen($pass) <= $num)
{
$i = chr(mt_rand (0,255));
if (eregi("^[a-z0-9]$", $i))
$pass = $pass.$i;
}

// return het random paswoord
return ($pass);
}

// defineer de tabel in een variabele
$table = "voorbeeld_gebruikers";

// defineer het activatie URL adres
// BEGIN DE ACTIVATIE URL MET HTTP://!
// EINDIG DE ACTIVATIE URL --ZONDER-- SLASH (/)
$activatie_url = "http://www.phphulp.nl/voorbeeld/activatie";;

// bekijk of de username al niet in gebruik is
if ($HTTP_POST_VARS["submit"] && $HTTP_POST_VARS["login"] && $HTTP_POST_VARS["pass"] && $HTTP_POST_VARS["email"] && !check_email($HTTP_POST_VARS["email"]))
{
$sql = "SELECT id FROM $table WHERE login = '$HTTP_POST_VARS[login]'";
$res = mysql_query($sql);

if (mysql_num_rows($res) >= 1)
$usrname = 1;
}

// bekijk of alle velden zijn ingevuld
if ($usrname || !$HTTP_POST_VARS["submit"] || !$HTTP_POST_VARS["login"] || !$HTTP_POST_VARS["pass"] || !$HTTP_POST_VARS["email"] || check_email($HTTP_POST_VARS["email"]))
{
if ($HTTP_POST_VARS["submit"])
echo "<p><b>U heeft niet alle velden ingevuld, uw e-mail adres is niet juist of de login naam is al in gebruik.</b></p>";

echo "
<html>
<head>
<title>Registreren</title>
</head>
<body>

<form method=\"post\" action=\"$PHP_SELF\">
Login naam:<br>
<input type=\"text\" name=\"login\" size=\"20\" maxlength=\"20\"><br>
Wachtwoord:<br>
<input type=\"text\" name=\"pass\" size=\"20\" maxlength=\"20\"><br>
E-mail adres:<br>
<input type=\"text\" name=\"email\" size=\"20\"><br>
<input type=\"submit\" name=\"submit\" value=\"Registreren\">
</form>

</body>
</html>";
}
// je weet nu dat alle velden ingevuld zijn
else
{

$insert_login = addslashes($HTTP_POST_VARS[login]);
$insert_pass = md5($HTTP_POST_VARS[pass]);
$key = makekey(5);

// zet de gegevens in de database
$sql = "INSERT INTO $table (id, login, pass, email, activeer) VALUES ('', '$insert_login', '$insert_pass', '$HTTP_POST_VARS[email]', '$key')";
$res = mysql_query($sql);

// kijk of het invoegen in de database goed ging
if ($res)
{
$aan = $HTTP_POST_VARS[email];
$subject = "Account activatie";
$van = "Webmaster <[email protected]>";

$bericht = "===========================================\n";
$bericht .= "Account activeren\n";
$bericht .= "===========================================\n\n";

$bericht .= "Uw account is aangemaakt. Het moet alleen nog even \n";
$bericht .= "geactiveerd worden.\n\n";

$bericht .= "Uw login naam: $HTTP_POST_VARS[login]\n";
$bericht .= "Uw wachtwoord: $HTTP_POST_VARS[pass]\n\n";

$bericht .= "Uw wachtwoord is encrypted opgeslagen en kan dus \n";
$bericht .= "niet worden opgevragen. Schrijft u uw wachtwoord \n";
$bericht .= "daarom op.\n\n";

$bericht .= "Activatie URL:\n";
$bericht .= "$activatie_url/activeer.php?email=$aan&key=$key\n\n";

$bericht .= "Bedankt voor het registreren.\n\n";

$bericht .= "===========================================\n";
$bericht .= "Einde automatisch gegenereerde bericht\n";
$bericht .= "===========================================";

// kijk of de e-mail verstuurd kan worden
if (mail($aan, $subject, $bericht, "From: $van"))
{
echo "<p>Uw account is aangemaakt maar u kunt nog niet inloggen.</p>";

echo "<p>Er is een bevestigings e-mail gestuurd met een URL adres. U moet uw ";
echo "account eerst activeren voordat u kunt inloggen.</p>";
}
// als het e-mail niet verstuurd kan worden, geef dan een error bericht
else
{
echo "<p>Uw account is aangemaakt maar er kon geen e-mail verstuurd worden.</p>";

echo "<p>Probeert u het opnieuw. Krijgt u dan nog steeds niet de melding ";
echo "dat er een activatie e-mail is gestuurd, neemt u dan contact met ons op.</p>";
}
}
// als het niet goed ging
else
{
echo "<p>Uw account is niet aangemaakt.</p>";

echo "<p>Probeer het a.u.b. nogmaals. Werkt het vervolgens weer niet, neemt dan contact op.</p>";
}
}
?>

Voorbeeld: www.phphulp.nl/voorbeeld/activatie/registreren.php
Pagina 3

Het activeren

Voor het activeren kun je dit script gebruiken (lees de comments!)

www.phphulp.nl/voorbeeld/activatie/activeer.php

<?
// maak de database connectie
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "Er kon geen connectie worden gemaakt met de database.";
exit();
}

// defineer de tabel in een variabele
$table = "voorbeeld_gebruikers";

// bekijk of de key en het email opgegeven zijn
if ($HTTP_GET_VARS["key"] && $HTTP_GET_VARS["email"])
{
// match de gegevens uit de URL, met de gegevens in de database
$sql = "SELECT id,activeer FROM $table WHERE activeer = '$HTTP_GET_VARS[key]' AND email = '$HTTP_GET_VARS[email]'";
$res = mysql_query($sql);

// kijk of er een match is
if (mysql_num_rows($res) >= 1)
{
$row = mysql_fetch_array($res);

// bekijk of het al eerder geactiveerd is
if ($row[activeer])
{
// reset de key
$sql = "UPDATE $table SET activeer = NULL WHERE activeer = '$HTTP_GET_VARS[key]' AND email = '$HTTP_GET_VARS[email]'";
$res = mysql_query($sql);

if ($res)
echo "<p>Uw account is geactiveerd. U kunt nu <a href=\"inloggen.php\">inloggen</a>.</p>";
else
echo "<p>Er is iets mis gegaan. U kunt niet inloggen. Probeert u het opnieuw.</p>";
}
// geef melding dat het account al eerder is geactiveerd
else
echo "<p>Het account is al eerder geactiveerd.</p><p><a href=\"inloggen.php\">inloggen</a></p>";
}
// geef melding dat het account niet bestaat
else
echo "<p>Het account bestaat niet of is al eerder geactiveerd.</p><p><a href=\"inloggen.php\">inloggen</a></p>";
}
// geef melding dat de gegevens niet correct zijn
else
echo "<p>U heeft niet de juiste gegevens om dit account te activeren.</p>";
?>
Pagina 4

Het inloggen

Lees de comments weer :)

www.phphulp.nl/voorbeeld/activatie/inloggen.php

<?
session_start();

// maak de database connectie
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "Er kon geen connectie worden gemaakt met de database.";
exit();
}

// defineer de tabel in een variabele
$table = "voorbeeld_gebruikers";

// bekijk of de gene al is ingelogd
if ($HTTP_SESSION_VARS["ingelogd"] && !$loguit)
{
echo "<p>U bent ingelogd. U kunt nu nog niks ;).</p>";

echo "<p><a href=\"$PHP_SELF?loguit=1\">uitloggen</a></p>";
}
// uitloggen
elseif ($HTTP_GET_VARS["loguit"])
{
session_unregister(ingelogd);

echo "<p>U bent uitgelogd.</p>";

echo "<p><a href=\"$PHP_SELF\">inloggen</a></p>";
}
// bekijk of het formulier verzonden is en de gegevens juist zijn
elseif ($HTTP_POST_VARS["submit"] && $HTTP_POST_VARS["login"] && $HTTP_POST_VARS["pass"])
{
// encrypt pass om te matchen met encrypte pass in de database
$passwd = md5($HTTP_POST_VARS[pass]);

// selecteer login/pass uit de database en match ze met ingevoerde gegevens
$sql = "SELECT id FROM $table WHERE login = '$HTTP_POST_VARS[login]' AND pass = '$passwd' AND activeer IS NULL";
$res = mysql_query($sql);

// bekijk of de gegevens juist zijn
if (mysql_num_rows($res) >= 1)
{
// registreer sessie (of cookie)
$ingelogd = mysql_result($res, 0);
session_register(ingelogd);
// setcookie("ingelogd", "$ingelogd", time() + 1 * 86400);

echo "<p>U bent succesvol ingelogd.</p>";

echo "<p>Ga <a href=\"$PHP_SELF\">verder</a>.</p>";

echo "<p><a href=\"$PHP_SELF?loguit=1\">uitloggen</a></p>";
}
// zo niet, geef foutmelding
else
{
echo "<p>U heeft een ongeldige login naam of wachtwoord ingevuld.</p>";

echo "<p>Ook kan het zijn dat uw account nog niet is geactiveerd.</p>";

echo "<p>Probeert u het <a href=\"$PHP_SELF\">opnieuw</a>.</p>";
}
}
// toon formulier
else
{
echo "<form method=\"post\" action=\"$PHP_SELF\">";
echo "Login naam:<br>";
echo "<input type=\"text\" name=\"login\" size=\"20\" maxlength=\"20\"><br>";
echo "Wachtwoord:<br>";
echo "<input type=\"password\" name=\"pass\" size=\"20\"><br>";
echo "<input type=\"submit\" name=\"submit\" value=\"inloggen\">";
echo "</form>";
}
?>

Voorbeeld van het script kun je zien op:
www.phphulp.nl/voorbeeld/activatie/registreren.php
www.phphulp.nl/voorbeeld/activatie/activeer.php
www.phphulp.nl/voorbeeld/activatie/inloggen.php

Reacties

0
Nog geen reacties.