login  Naam:   Wachtwoord: 
Registreer je!
Scripts > PHP > Beveiliging > Loginclass[simpel in gebruik]


Reacties op het script Loginclass[simpel in gebruik]

Offline  nemesiskoen
Gepost op: 22 april 2006 - 13:55
Gouden medaille

PHP expert




Ik neem aan dat jij L.A. S bent op phpfreakz?

  1. function CheckAdmin() {
  2. if($this->rank == 2) { //2 = Admin 1 = User 0 = Banned
  3. $resultaat = true;
  4. } else {
  5. $resultaat = false;
  6. }
  7.  
  8. return $resultaat;
  9. }
  10.  
  11. function CheckBan() {
  12. if($this->rank == 0) { //0 = Banned
  13. $resultaat = true;
  14. } else {
  15. $resultaat = false;
  16. }
  17. return $resultaat;
  18. }


Kan iets korter worden geschreven:

  1. function CheckAdmin() {
  2. return $this->rank == 2;
  3. }
  4.  
  5. function CheckBan() {
  6. return $this->rank == 0;
  7. }


Ik zou overigens de databaseverbinding BUITEN de klasse zetten omdat dit niet direct met een 'gebruiker' te maken heeft.

  1. if($aantal == 1) {
  2. while($row = mysql_fetch_assoc($querySQL)) {
  3. $rank = $row['rank'];
  4. }
  5. } else {
  6. $rank = 0;
  7. }
  8.  
  9. return $rank;


Die while loop mag er uit.

  1. if($aantal == 1) {
  2. $row = mysql_fetch_assoc($querySQL);
  3. $rank = $row['rank'];
  4. } else {
  5. $rank = 0;
  6. }
  7.  
  8. return $rank;


Dit hier:

  1. if(mysql_num_rows($queryChecker) == 1) { // Als er 1 resultaat is. Is het goed.
  2. $resultaat = 1;
  3. } else { // Anders is het niet goed
  4. $resultaat = 0;
  5. }
  6.  
  7. return $resultaat;

Zou ik ook veranderen in:

  1. return mysql_num_rows($queryChecker) == 1;


Zo kan je ineens kijken of checkLogin true of false terugstuurt:

  1. if($checkLogin) ... else ...


Als laatste zou ik ook met cookies werken. Zo kan je op het begin van elke pagina volgende code uitvoeren:

  1. $lid = new Login;
  2. $lid->setGegevens($_COOKIE['username'], $_COOKIE['pass']);


Of iets dergelijks.

Verder ziet het er wel aardig en bruikbaar uit!

Offline  lasdesigner
Gepost op: 22 april 2006 - 14:17
PHP beginner



Ja, ik ben inderdaad L.A. S in PHPfreakz;) Ik dacht misschien hebben ze er op Sitemasters ook nog wat aan. En ik heb zelf ook nog bruikbare tips gekregen. Je hebt gelijk. Het kan allemaal veel korter. Ik zou dit veranderen! (Nieuwe script komt dus zometeen ;) ).

Offline  nemesiskoen
Gepost op: 22 april 2006 - 16:08
Gouden medaille

PHP expert




Zo is het al wat beter. Die enkele functies waar er 1 wordt teruggestuurd ipv true kunnen nog aangepast worden. Ik zal ook eens een worp gooien naar een (uitgebreide) loginklasse.

Offline  lasdesigner
Gepost op: 22 april 2006 - 16:10
PHP beginner



Hahaha, oké, ik krijg concerentie moet ik nog beter mijn best doen (gaat met toch niet lukken ;) Heb pas 2 weken ervaring met classes)

Offline  nemesiskoen
Gepost op: 22 april 2006 - 16:37
Gouden medaille

PHP expert




  1. <?php
  2.  
  3. class UpdateCommand {
  4.  
  5. private $tabel;
  6. private $collumns = array();
  7.  
  8. public function UpdateCommand($tabel) {
  9. $this->tabel = $tabel;
  10. }
  11.  
  12. public function add($collumn, $value) {
  13. $this->collumns[] = $collumn . " = " . $value;
  14. }
  15.  
  16. public function buildQuery() {
  17.  
  18. $qString = "UPDATE ". $this->tabel ." SET";
  19. return ($qString . implode(",", $collumns));
  20.  
  21. }
  22.  
  23. }
  24.  
  25. interface Login_Abstract {
  26.  
  27. public function isLogin();
  28. public function isAdmin();
  29. public function isBanned();
  30.  
  31. public function getUsername();
  32. public function getPasswd();
  33. public function getRank();
  34.  
  35. public function setUsername($username);
  36. public function setPasswd($passwd);
  37. public function setRank($rank);
  38.  
  39. public function save();
  40.  
  41. }
  42.  
  43. class Login implements Login_Abstract {
  44.  
  45. private $username;
  46. private $passwd;
  47. private $usertable;
  48. private $bannedLevel = 0; // 0 = banned
  49. private $adminArray = array(2 => "admin", 3 => "super-admin", 4 => "administrator"); // edit if needed
  50. private $login = false;
  51.  
  52. static private $instance = null;
  53.  
  54. private function __construct() {}
  55.  
  56. public function getInstance() {
  57. if(self::$instance == null) {
  58. self::$instance = new Login;
  59. }
  60.  
  61. return self::$instance;
  62. }
  63.  
  64. public function init($usertable, $username = null, $passwd = null) {
  65.  
  66. $this->username = $username == null ? $_COOKIE['username'] : $username;
  67. $this->passwd = $passwd == null ? $_COOKIE['passwd'] : $passwd;
  68. $this->usertable = $usertable;
  69.  
  70. if(!$this->passwd == null && !$this->username == null) {
  71.  
  72. $rankQueryString = "SELECT rank FROM ". $usertable ." WHERE username = '". addslashes($username) ."' and passwd = '". md5($this->passwd) ."'";
  73. $rankQuery = mysql_query($rankQueryString);
  74.  
  75. echo $rankQueryString;
  76.  
  77. if($rankQuery) {
  78.  
  79. $this->rank = mysql_result($rankQuery, 0);
  80. $this->login = true;
  81. setCookie("username", $username, time()+(3600*24*7), "/");
  82. setCookie("passwd", $passwd, time()+(3600*24*7), "/");
  83.  
  84. }
  85.  
  86. }
  87.  
  88. return $this->login;
  89.  
  90. }
  91.  
  92. public function login($username = null, $passwd = null) {
  93.  
  94. return $this->init($this->usertable, $username, $passwd);
  95.  
  96. }
  97.  
  98. public function getUsername() {
  99. return $this->username;
  100. }
  101. public function getPasswd() {
  102. return $this->passwd;
  103. }
  104. public function getRank() {
  105. return $this->rank;
  106. }
  107. // add more if needed
  108.  
  109. public function getRankTitle() {
  110. switch($this->rank) {
  111. case 0: $ret = "Banned";
  112. break;
  113. case 1: $ret = "Member";
  114. break;
  115. default: $ret = isset($this->adminArray[$this->rank]) ? $this->adminArray[$this->rank] : "unknown";
  116. }
  117.  
  118. return $ret;
  119. }
  120.  
  121. public function setUsername($username) {
  122. $this->username = $username;
  123. }
  124. public function setPasswd($passwd) {
  125. $this->passwd = $passwd;
  126. }
  127. public function setRank($rank) {
  128. $this->rank = $rank;
  129. }
  130.  
  131. public function isAdmin() {
  132. return in_array($this->rank, $this->adminArray);
  133. }
  134. public function isBanned() {
  135. return $this->rank == 0;
  136. }
  137. public function isLogin() {
  138. return $this->login;
  139. }
  140.  
  141. public function save() {
  142. $updateQuery = new UpdateCommand($this->usertable);
  143. $updateQuery->add("username", $this->username);
  144. $updateQuery->add("passwd", $this->passwd);
  145. $updateQuery->add("rank", $this->rank);
  146. // add more if needed
  147.  
  148. return mysql_query($updateQueryString->buildQuery());
  149. }
  150.  
  151. public function logOff() {
  152. setCookie("username", " ", time()-100, "/");
  153. setCookie("passwd", " ", time()-100, "/");
  154. $this->login = false;
  155. $this->username = "";
  156. $this->passwd = "";
  157. $this->rank = 0;
  158. }
  159.  
  160. }


Ik heb even iets in elkaar geknutseld. Heb het niet kunnen testen want php doet even raar op deze computer. Zal het later thuis testen en een beetje uitbreiden, vervolgens ook aan de scriptlibrary toevoegen. Het concept is leuk (zoals bosgroen's tutorial demonstreerde).

Offline  lasdesigner
Gepost op: 22 april 2006 - 16:51
PHP beginner



Ik heb paar vraagjes bij je script, wat ik zelf niet helemaal snap:

1) Wat is interface?

Het ziet er ingewikkelder uit, maar volgens mij valt dit wel mee of niet? Zou je misschien // wat meer informatie willen toevoegen? (DMV // ) Zodat ik het snap?

Offline  Frederic
Gepost op: 22 april 2006 - 16:55
PHP ver gevorderde



Je zegt: als je gebanned ben krijg je als $rank 0. Nu, in de code hieronder op regel 9 (denk ik) kijk je als het resultaat van de check 0 is. Wanner dit 0 is is deze persoon toch gebanned?
  1. <?
  2. function CheckBan() {
  3. return $this->rank == 0;
  4. }
  5.  
  6. function CheckLogin() {
  7. $resultaatBan = Login::CheckBan(); //Kijken als ie gebanned is, 0 teruggeven als het zo is?
  8. if($resultaatBan == 0) { //Persoon is gebanned??
  9.  
  10. $queryCheck = "SELECT gebruikersnaam, wachtwoord FROM users WHERE gebruikersnaam = '". $this->gebruikersnaam. "' AND wachtwoord = '". $this->wachtwoord. "'";
  11. $queryChecker = mysql_query($queryCheck);
  12.  
  13. if(mysql_num_rows($queryChecker) == 1) { // Als er 1 resultaat is. Is het goed.
  14. $resultaat = 1;
  15. $_SESSION['gebruikersnaam'] = $this->gebruikersnaam;
  16. $_SESSION['rank'] = $this->rank;
  17. } else { // Anders is het niet goed
  18. $resultaat = 0;
  19. }
  20.  
  21. return $resultaat;
  22. } else { //Persoon is niet gebanned?
  23. echo 'Je bent gebanned, of je hebt verkeerde gebruikersnaam / wachtwoord!';
  24. }
  25. }
  26. ?>

Offline  lasdesigner
Gepost op: 22 april 2006 - 17:24
PHP beginner



aaah je hebt gelijk! != moet het zijn.

Offline  Tim2
Gepost op: 22 april 2006 - 17:27
PHP interesse



Het is mischien mijn mening en mischien is niet iedereen het er mee eens maar ik vind dit een enorme rompslomp om niets. Volgens mij kan dit veel en vele malen korten als je geen classes gebruikt

Offline  Gerard
Gepost op: 22 april 2006 - 17:53
Ouwe rakker



Tim2, heb je zelf al een keer met classes gewerkt? Het klasse model is misschien wat groot, alsmede de klasse zelf, maar het zorgt ervoor dat de code op je gewone pagina (waarmee je het object aanstuurt) een stuk kleiner wordt alsmede een stuk overzichtelijker.

Offline  lasdesigner
Gepost op: 22 april 2006 - 17:53
PHP beginner



Dat is waar, het kan korter met gewoon PHP, dat weet ik ook wel. Maar dit is netter, en je kan gemakkelijk dingen aanpassen. Als je bijv opeens ook een hulp-admin hebt. Je kan snel nieuwe dingen toevoegen, of dingen verwijderen. Dat is het voordeel van classes.

Offline  nemesiskoen
Gepost op: 22 april 2006 - 20:12
Gouden medaille

PHP expert




Reusability, het is op het eerste zicht veel werk maar eens het af is is het gewoon kinderspel om het juiste paneel aan je leden te laten zien (met eenvoudig aan te passen code).

Offline  zwobbel
Gepost op: 23 april 2006 - 08:05
PHP gevorderde



@lasdesigner Hoe ben je de classes beginnen leren?
Staat er ergens een duidelijke tutorial hiervan?

Thx..

Offline  lasdesigner
Gepost op: 23 april 2006 - 18:46
PHP beginner



Veel oefenen! 
En hier staat een tutorial!! en op PHP freakz, en google kan je natuurlijk ook altijd gebruiken!

(en veel vragen.. )

Offline  Gerard
Gepost op: 24 april 2006 - 11:51
Ouwe rakker



Koen heeft uitstekende tutorials gepost in het verleden. Het kan ook geen kwaad om classes te leren met bv een VB.NET tutorial, het idee erachter blijft hetzelfde, alleen de code is anders.

Offline  Ibrahim
Gepost op: 01 mei 2006 - 08:54
PHP expert



bij classes hoor je de class naam met een [HOOFDLETTER] te beginnen en functies met een [kleine] letter.

alleen moet niet 

Offline  Gerard
Gepost op: 03 mei 2006 - 00:15
Ouwe rakker



Ook de naam van de functie die dient als constructor dient met een hoofdletter te zijn. Alle private variabelen dienen als volgt opgebouwd te worden:

$_privatevar

Maar dan zijn eigenlijk alleen maar guidelines. Het is natuurlijk hardstikke mooi als iedereen een codeerstijl zou aanmeten die al aangeboden wordt. Het gebeurt alleen jammergenoeg nog niet vaak genoeg. Vandaard dat je dus vooral krijgt dat coders hun eigen stijl aanmeten.

Heb het hier ook wel eens met koen over gehad.

Offline  zwobbel
Gepost op: 07 januari 2007 - 17:00
PHP gevorderde



Citaat:
[I][B]Proximus[/B] schreef op 22 April 2006 - 17:53[/I]

Tim2, heb je zelf al een keer met classes gewerkt? Het klasse model is misschien wat groot, alsmede de klasse zelf, maar het zorgt ervoor dat de code op je gewone pagina (waarmee je het object aanstuurt) een stuk kleiner wordt alsmede een stuk overzichtelijker.

En dit is inderdaad supper handig. Ook is een classe handig als je ooit weer is een ander website begint ofzo dan is het gewoon copy past classe en voila .. ;)

Offline  Martindo
Gepost op: 05 april 2008 - 16:28
Lid



Hoe maak je een tabel?
ik snap dat niet!
Wie wilt me helpen?

Offline  KoenVR
Gepost op: 18 april 2008 - 10:46
Lid



er staat dat er een voorbeeld bij zit,
maar waar is dit voorbeeld?

het werkt helemaal wel,
maar ik snap niet hoe ik andere pagina's moet beveiligen hiermee
(1 pagina geen probleem, maar meerdere pagina's....)

Offline  lasdesigner
Gepost op: 20 april 2008 - 19:20
PHP beginner



ONderaan de pagina kan je dit zien..


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.133s