[Access DB] Membersysteem
Auteur: Wim - 18 oktober 2006 - 13:18 - Gekeurd door: Wijnand - Hits: 16684 - Aantal punten: 2.50 (3 stemmen)
Dit is een ledensysteem gebaseerd op een Access Database!
Vereist:
+ Enige kennis van access om de database te maken
+ ODBC drivers (om een connectie te maken naar de Access database)
+ php
De database bestaat uit 1 tabel members:
id - Autonummering - Primary key
username - Tekst
password - Tekst
email - Tekst - veldlengte: 100
In het geval van dit script, werkt alles perfect op een localhost; apache op dezelfde partitie als je database/scripts; en in dit geval staat de database op C:\htdocs\membersysteem_access\membersysteem.mdb (vergeet de dubbele slashes (\\) niet bij het path naar je DB!)
Het script is meer bedoeld als voorbeeld voor het gebruik van een access database ipv het gebruik van dit script. Dit is mijn eerste script met een access db en ik zou er niet van verschieten mochten er nog serieuze beveiliginslekken inzitten! (even geen rekening gehoud met de POST gegevens, aangezien deze redelijk insecure zijn)
Veel plezier hiermee,
GDX^
|
Code: |
login.php
<?php
require_once('global.inc.php');
if(isset($_REQUEST['login']))
{
if(empty($_REQUEST['password']) && isset($_REQUEST[$authtype]))
exit ('Please fill in all fields!');
$query = "SELECT id FROM members WHERE ".$authtype."='".$_REQUEST[$authtype]."' AND password='".md5($_REQUEST['password'])."'";
if(better_odbc_num_rows(ODBC, $query) != 1)
exit ('Wrong '.$authtype.' and/or password!!'); //pagina stoppen als de username/email niet met het wachtwoord overeenkomt!
setcookie('auth', $_REQUEST[$authtype], time()+365*24*60*60);
setcookie('authtype', $authtype, time()+365*24*60*60);
setcookie('password', md5($_REQUEST['password']), time()+365*24*60*60);
echo ('You are now logged in!');
}
else
{
echo ('<form method="post">');
echo ($authtype.': <input type="text" name="'.$authtype.'" /><br />');
echo ('Password: <input type="password" name="password" /><br />');
echo ('<input type="submit" name="login" value="Login!" />');
echo ('</form>');
}
?>
<?php require_once('global.inc.php'); if(isset($_REQUEST['login'])) { if(empty($_REQUEST['password']) && isset($_REQUEST[$authtype])) exit ('Please fill in all fields!'); $query = "SELECT id FROM members WHERE ".$authtype."='".$_REQUEST[$authtype]."' AND password='".md5($_REQUEST['password'])."'"; if(better_odbc_num_rows(ODBC, $query) != 1) exit ('Wrong '.$authtype.' and/or password!!'); //pagina stoppen als de username/email niet met het wachtwoord overeenkomt! echo ('You are now logged in!'); } else { echo ('<form method="post">'); echo ($authtype.': <input type="text" name="'.$authtype.'" /><br />'); echo ('Password: <input type="password" name="password" /><br />'); echo ('<input type="submit" name="login" value="Login!" />'); } ?>
register.php
<?php
require_once('global.inc.php');
if(isset($_REQUEST['register']))
{ // form submitted
if(empty($_REQUEST['username']) || empty($_REQUEST['password']) || empty($_REQUEST['password2']) || empty($_REQUEST['email']) || $_REQUEST['password'] != $_REQUEST['password2'] || !preg_match('#@#i', $_REQUEST['email']) || !preg_match ('#.#i', $_REQUEST['email']) || strlen($_REQUEST['username']) < 3 || strlen($_REQUEST['username']) > 20 || strlen($_REQUEST['password']) < 6) // controles... zie echo op volgende lijnen voor het doel
{
echo ('Er is een fout opgetreden. Vul alle velden correct in aub (wachtwoord = wachtwoord controle; gebruikersnaam is minimum 3 en maximum 20 tekens lang, wachtwoord is minimum 6 tekens lang, een correct email adres)');
exit(); // pagina stoppen als er een foutmelding is
}
// als er een fout is, dan is de pagina reeds gestopt => geen else-lus nodig!
// controle anti-dubbele-username
$query = "SELECT id FROM members WHERE username='".$_REQUEST['username']."'";
if(better_odbc_num_rows(ODBC, $query) > 0)
exit ('Deze username is al in gebruik!'); //pagina stoppen als de username al voorkomt in de db (meer dan 0 resultaten!)
// controle anti-dubbele-email
$query = "SELECT id FROM members WHERE password='".$_REQUEST['email']."'";
if(better_odbc_num_rows(ODBC, $query) > 0)
exit ('Dit e-mail adres is al in gebruik!'); //pagina stoppen als het mailadres al voorkomt in de db (meer dan 0 resultaten!)
// alle controles zijn gebeurd! De usern kan nu geregistreerd worden!
$insert = "INSERT INTO members (username, password, email) VALUES ('".$_REQUEST['username']."', '".md5($_REQUEST['password'])."', '".$_REQUEST['email']."')"; // query opstellen
if(odbc_exec(ODBC, $insert)) // query uitvoeren
echo ('Account aangemaakt!'); // succesvol
else
echo ('Uw account kon niet worden aangemaakt!'); // mislukt
}
else
{ // form not submitted
echo ('<form method="post">');
echo ('Username: <input type="text" name="username" /><br />');
echo ('Password: <input type="password" name="password" /><br />');
echo ('Password (2): <input type="password" name="password2" /><br />');
echo ('E-mail: <input type="text" name="email" /><br />');
echo ('<br />');
echo ('<input type="submit" name="register" value="Registreer account!" />');
echo ('</form>');
}
?>
<?php require_once('global.inc.php'); if(isset($_REQUEST['register'])) { // form submitted if(empty($_REQUEST['username']) || empty($_REQUEST['password']) || empty($_REQUEST['password2']) || empty($_REQUEST['email']) || $_REQUEST['password'] != $_REQUEST['password2'] || !preg_match('#@#i', $_REQUEST['email']) || !preg_match ('#.#i', $_REQUEST['email']) || strlen($_REQUEST['username']) < 3 || strlen($_REQUEST['username']) > 20 || strlen($_REQUEST['password']) < 6) // controles... zie echo op volgende lijnen voor het doel { echo ('Er is een fout opgetreden. Vul alle velden correct in aub (wachtwoord = wachtwoord controle; gebruikersnaam is minimum 3 en maximum 20 tekens lang, wachtwoord is minimum 6 tekens lang, een correct email adres)'); exit(); // pagina stoppen als er een foutmelding is } // als er een fout is, dan is de pagina reeds gestopt => geen else-lus nodig! // controle anti-dubbele-username $query = "SELECT id FROM members WHERE username='".$_REQUEST['username']."'"; if(better_odbc_num_rows(ODBC, $query) > 0) exit ('Deze username is al in gebruik!'); //pagina stoppen als de username al voorkomt in de db (meer dan 0 resultaten!) // controle anti-dubbele-email $query = "SELECT id FROM members WHERE password='".$_REQUEST['email']."'"; if(better_odbc_num_rows(ODBC, $query) > 0) exit ('Dit e-mail adres is al in gebruik!'); //pagina stoppen als het mailadres al voorkomt in de db (meer dan 0 resultaten!) // alle controles zijn gebeurd! De usern kan nu geregistreerd worden! $insert = "INSERT INTO members (username, password, email) VALUES ('".$_REQUEST['username']."', '".md5($_REQUEST['password'])."', '".$_REQUEST['email']."')"; // query opstellen if(odbc_exec(ODBC, $insert)) // query uitvoeren echo ('Account aangemaakt!'); // succesvol else echo ('Uw account kon niet worden aangemaakt!'); // mislukt } else { // form not submitted echo ('<form method="post">'); echo ('Username: <input type="text" name="username" /><br />'); echo ('Password: <input type="password" name="password" /><br />'); echo ('Password (2): <input type="password" name="password2" /><br />'); echo ('E-mail: <input type="text" name="email" /><br />'); echo ('<input type="submit" name="register" value="Registreer account!" />'); } ?>
global.inc.php
<?php
$odbcconn = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\\htdocs\\membersysteem_access\membersysteem.mdb", "", ""); //database openen!
define ('ODBC', $odbcconn, false); // defineeer constante voor connectie
$authtype = 'email'; // 'username' or 'email'
function better_odbc_num_rows($con,$sql){ // odbc_num_rows() is bugged with an Access db... => better_odbc_num_rows(); functie komt van de php.net notas! http://be2.php.net/manual/nl/function.odbc-num-rows.php#46138
$result = odbc_exec($con,$sql);
$count=0;
while($temp = odbc_fetch_into($result, &$counter)){
$count++;
}
return $count;
}
?>
<?php $odbcconn = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\\htdocs\\membersysteem_access\membersysteem.mdb", "", ""); //database openen! define ('ODBC', $odbcconn, false); // defineeer constante voor connectie $authtype = 'email'; // 'username' or 'email' function better_odbc_num_rows($con,$sql){ // odbc_num_rows() is bugged with an Access db... => better_odbc_num_rows(); functie komt van de php.net notas! http://be2.php.net/manual/nl/function.odbc-num-rows.php#46138 $result = odbc_exec($con,$sql); $count=0; while($temp = odbc_fetch_into($result, &$counter)){ $count++; } return $count; } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|