login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Ledensystemen > [Access DB] Membersysteem

[Access DB] Membersysteem

Auteur: Wim - 18 oktober 2006 - 13:18 - Gekeurd door: Wijnand - Hits: 16437 - 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
  1. <?php
  2. require_once('global.inc.php');
  3.  
  4. if(isset($_REQUEST['login']))
  5. {
  6. if(empty($_REQUEST['password']) && isset($_REQUEST[$authtype]))
  7. exit ('Please fill in all fields!');
  8.  
  9. $query = "SELECT id FROM members WHERE ".$authtype."='".$_REQUEST[$authtype]."' AND password='".md5($_REQUEST['password'])."'";
  10. if(better_odbc_num_rows(ODBC, $query) != 1)
  11. exit ('Wrong '.$authtype.' and/or password!!'); //pagina stoppen als de username/email niet met het wachtwoord overeenkomt!
  12.  
  13. setcookie('auth', $_REQUEST[$authtype], time()+365*24*60*60);
  14. setcookie('authtype', $authtype, time()+365*24*60*60);
  15. setcookie('password', md5($_REQUEST['password']), time()+365*24*60*60);
  16.  
  17. echo ('You are now logged in!');
  18. }
  19. else
  20. {
  21. echo ('<form method="post">');
  22. echo ($authtype.': <input type="text" name="'.$authtype.'" /><br />');
  23. echo ('Password: <input type="password" name="password" /><br />');
  24. echo ('<input type="submit" name="login" value="Login!" />');
  25. echo ('</form>');
  26. }
  27. ?>



register.php
  1. <?php
  2. require_once('global.inc.php');
  3.  
  4. if(isset($_REQUEST['register']))
  5. { // form submitted
  6. 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
  7. {
  8. 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)');
  9. exit(); // pagina stoppen als er een foutmelding is
  10. }
  11.  
  12. // als er een fout is, dan is de pagina reeds gestopt => geen else-lus nodig!
  13.  
  14. // controle anti-dubbele-username
  15. $query = "SELECT id FROM members WHERE username='".$_REQUEST['username']."'";
  16. if(better_odbc_num_rows(ODBC, $query) > 0)
  17. exit ('Deze username is al in gebruik!'); //pagina stoppen als de username al voorkomt in de db (meer dan 0 resultaten!)
  18.  
  19. // controle anti-dubbele-email
  20. $query = "SELECT id FROM members WHERE password='".$_REQUEST['email']."'";
  21. if(better_odbc_num_rows(ODBC, $query) > 0)
  22. exit ('Dit e-mail adres is al in gebruik!'); //pagina stoppen als het mailadres al voorkomt in de db (meer dan 0 resultaten!)
  23.  
  24. // alle controles zijn gebeurd! De usern kan nu geregistreerd worden!
  25.  
  26. $insert = "INSERT INTO members (username, password, email) VALUES ('".$_REQUEST['username']."', '".md5($_REQUEST['password'])."', '".$_REQUEST['email']."')"; // query opstellen
  27.  
  28. if(odbc_exec(ODBC, $insert)) // query uitvoeren
  29. echo ('Account aangemaakt!'); // succesvol
  30. else
  31. echo ('Uw account kon niet worden aangemaakt!'); // mislukt
  32. }
  33.  
  34. else
  35. { // form not submitted
  36. echo ('<form method="post">');
  37. echo ('Username: <input type="text" name="username" /><br />');
  38. echo ('Password: <input type="password" name="password" /><br />');
  39. echo ('Password (2): <input type="password" name="password2" /><br />');
  40. echo ('E-mail: <input type="text" name="email" /><br />');
  41. echo ('<br />');
  42. echo ('<input type="submit" name="register" value="Registreer account!" />');
  43. echo ('</form>');
  44. }
  45. ?>



global.inc.php
  1. <?php
  2. $odbcconn = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\\htdocs\\membersysteem_access\membersysteem.mdb", "", ""); //database openen!
  3.  
  4. define ('ODBC', $odbcconn, false); // defineeer constante voor connectie
  5.  
  6. $authtype = 'email'; // 'username' or 'email'
  7.  
  8.  
  9.  
  10. 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
  11. $result = odbc_exec($con,$sql);
  12. $count=0;
  13. while($temp = odbc_fetch_into($result, &$counter)){
  14. $count++;
  15. }
  16. return $count;
  17. }
  18.  
  19. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (4)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.048s