U bevindt zich hier: Forum » Tutorials » [PHP] Login systeem OOP
   Actief Topic: [PHP] Login systeem OOP

Vorige ( 1,2 ) Volgende

superkluns
Tester
avatar
# Gepost op 15-11-2010 20:48
Bewerkt door superkluns op 15-11-2010 20:49


Ik heb nog wel een ideetje voor een nieuwe 'database_velden-flag'. Ik ben ff vergeten hoe die php-functie heet, maar er is er 1 waarbij je kan controleren of een string uit bepaalde tekens bestaat en zo niet geeft ie false.
Dan kun je bv. als flag ???=[A-Za-z0-9_.-] (vervang die ??? door de flag-naam die ik ff niet weet.) gebruiken voor bv. een gebruikersnaam die alleen uit letters, cijfers of die 3 tekens mag bestaan. (k gloof dat ik al een fout heb gemaakt, volgens mij moet er een backslash voor die punt, maarja dat maakt voor het voorbeeld ff niks uit)
Volg je me nog een beetje:P??

sebastiaan
member
avatar
# Gepost op 24-11-2010 15:04


Kun je daar niet beter is_string voor gebruiken?

Mijn software heeft geen bugs. Het ontwikkelt gewoon ongedocumenteerde functies.

simon
member
avatar
# Gepost op 05-02-2011 00:53


zit er zo op het eerste gezicht leuk uit.
morgen maar even kijken wat het nu precies is;)

ud2011
member
avatar
# Gepost op 28-02-2011 13:02


Mooie code.

Ik heb wel een vraag, wanneer ik in de database een extra kolom toevoeg met naam: "Locaties". Deze worden gebruikt om een gebruiker na het inloggen door te verwijzen naar een bepaalde pagina.

Bijv: gebruiker 1 heeft als locatie: amsterdam en gebruiker 2 locatie: Utrecht.

Hoe kan ik dit in de code zo aanpassen dat de gebruikers automatisch worden doorverwezen naar de juiste pagina.

vlerknozem
Admin
avatar
# Gepost op 12-03-2011 15:49


Late reactie maar als je het nog nodig hebt,

Je kunt informatie opvragen met:
Plain | Plain new window | PHP code:
  1. login::get_login_info('veldnaam');


Dus in jou geval kan je zoiets maken:
Plain | Plain new window | PHP code:
  1. <?php
  2. if($locatie = login::get_login_info('Locaties'))
  3. {
  4.     $url = '/url/naar/locaties/locatie_'.$locatie.'.php';
  5.     header("Location: ".$url);
  6. }
  7. ?>


Stel de gebruiker is niet ingelogd dan returned de login info method een bool false waardoor hij de if-lus niet uitvoert.

Vervolgens maak je de url dus bij Utrecht zou dat zijn /url/naar/locaties/locatie_Utrecht.php. Eventueel zou je kunnen controleren of die bestaat en de link pas je natuurlijk aan naar wat jij wilt.

Let wel op dat je een header moet uitvoeren voordat er informatie naar de client wordt verzonden (dus bij echo, print, tekst en/of spaties, enters en/of code boven de <?php tag.

Lees de forum regels

ud2011
member
avatar
# Gepost op 14-03-2011 09:10


Bedankt voor de reactie, ik wilde het gaan testen maar krijg (nog voordat ik de code aangepast heb) de volgende errors:

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\php\PEAR\Config.php on line 80

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\php\PEAR\Config.php on line 166

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\php\PEAR\Config\Container.php on line 111

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: Host is onbekend. in C:\xampp\htdocs\test\classes\header.php on line 69

Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: Host is onbekend. (trying to connect via tcp://mysql_host:3306) in C:\xampp\htdocs\test\classes\header.php on line 69

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: Host is onbekend. in C:\xampp\htdocs\test\classes\header.php on line 69

Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in C:\xampp\htdocs\test\classes\header.php on line 70

Fatal error: Uncaught exception 'Exception' with message 'MySQL liep tegen de volgende fout aan: <br />php_network_getaddresses: getaddrinfo failed: Host is onbekend. ' in C:\xampp\htdocs\test\classes\header.php:78 Stack trace: #0 C:\xampp\htdocs\test\classes\header.php(378): login->__construct() #1 C:\xampp\htdocs\test\index.php(3): include('C:\xampp\htdocs...') #2 {main} thrown in C:\xampp\htdocs\test\classes\header.php on line 78
  1. text


Enig idee wat het probleem kan zijn?

ud2011
member
avatar
# Gepost op 15-03-2011 14:00


Ik heb het al opgelost, dit is wat ik veranderd heb:

In de config.php:
Plain | Plain new window | PHP code:
  1.  
  2. # De mysql host, waar je database op draait. Is meestal localhost
  3. define("mysql_host", 'localhost');
  4.  
  5. # De mysql gebruikersnaam. Is meestal niet root
  6. define("mysql_user", 'root');
  7.  
  8. # Het mysql wachtwoord, is eigenlijk nooit leeg
  9. define("mysql_password", '');
  10.  
  11. # De tabel waar het systeem op draait. Als je de SQL niet hebt uitgevoerd moet je deze aanpassen
  12. define("mysql_database", 'loginsysteem');
  13.  
  14. # De login sessie tijd, het aantal uren dat je bent ingelogd dus.
  15. define("login_session_time", 24);
  16.  
  17. # MD5 gebruiken om wachtwoorden te coderen? Staat standaard uit
  18. define("login_password_md5", false);
  19.  
  20. # Fouten weergeven ? Alleen handig als je aan het testen bent!
  21. define("show_errors", false);
  22.  


Werd:
Plain | Plain new window | PHP code:
  1.  
  2. # De mysql host, waar je database op draait. Is meestal localhost
  3. $this->host = "localhost");
  4.  
  5. # De mysql gebruikersnaam. Is meestal niet root
  6. $this->user = "root");
  7.  
  8. # Het mysql wachtwoord, is eigenlijk nooit leeg
  9. $this->password = "");
  10.  
  11. # De tabel waar het systeem op draait. Als je de SQL niet hebt uitgevoerd moet je deze aanpassen
  12. $this->database = "test");
  13.  
  14. # De login sessie tijd, het aantal uren dat je bent ingelogd dus.
  15. $this->login_session_time = 24);
  16.  
  17. # MD5 gebruiken om wachtwoorden te coderen? Staat standaard uit
  18. $this->login_password_md5 = true);
  19.  
  20. # Fouten weergeven ? Alleen handig als je aan het testen bent!
  21. $this->show_errors = false);
  22.  


En in de header:
Plain | Plain new window | PHP code:
  1.  
  2. $verbinding = mysql_connect(mysql_host, mysql_user, mysql_password);
  3.         mysql_select_db(mysql_database, $verbinding);
  4.  


Werd:
Plain | Plain new window | PHP code:
  1.  
  2. $verbinding = mysql_connect($this->host,$this->user,$this->password);
  3.         mysql_select_db($this->database,$verbinding);
  4.  


Ik vermoed dat de define in config.php niet goed werkte.

sebastiaan
member
avatar
# Gepost op 03-07-2011 21:40


Beetje laat misschien maar ik heb (alweer) een complete rewrite van de header gemaakt. Eentje die consequent is met foutmeldingen (en MySQL foutmeldingen). Ook is de login pagina wat anders geworden omdat de fouten variabele een array is geworden.

login.inc.php
Plain | Plain new window | PHP code:
  1.  
  2. <?php if(count($login->fouten) > 0) : ?>
  3. <p><?php print $login->toonFouten();?></p>
  4. <?php endif;?>
  5. <form method="post" action="<?php print $_SERVER['REQUEST_URI'];?>">
  6.     <input type="hidden" name="actie" value="login" />
  7.     <dl>
  8.         <dd><input type="text" name="gebruikersnaam" placeholder="Gebruikersnaam" /></dd>
  9.         <dd><input type="text" name="wachtwoord" placeholder="Wachtwoord" /></dd>  
  10.         <dd><input type="submit" value="Login" /></dd>
  11.     </dl>
  12. </form>
  13.  


En de login header
Plain | Plain new window | PHP code:
  1.  
  2. <?php
  3. if(file_exists('config.php'))
  4. {
  5.     include_once('config.php');
  6. }
  7. else
  8. {
  9.     die('Fout: config.php kon niet gevonden worden.');
  10. }
  11.  
  12. class login
  13. {
  14.     private static $loginsessie = false;
  15.     public $fouten = array();
  16.     private static $gebruikersinfo = array();
  17.     public $databaseVelden = array();
  18.     private $recheck = 0;
  19.    
  20.     public function __construct()
  21.     {
  22.         $verbinding = mysql_connect(constant('mysql_hostname'), constant('mysql_username'), constant('mysql_password'));
  23.         mysql_select_db(constant('mysql_database'), $verbinding);
  24.        
  25.         if(constant('debug') === true && mysql_error())
  26.         {
  27.             die(mysql_error());
  28.         }
  29.        
  30.         $this->checkSession();
  31.        
  32.         if(isset($_GET['actie']) && $_GET['actie'] == 'uitloggen' && self::$loginsessie === true)
  33.         {
  34.             $this->endSession();
  35.         }
  36.     }
  37.    
  38.     public function toonFouten()
  39.     {
  40.         foreach($this->fouten as $fout)
  41.         {
  42.             $out .= $fout;
  43.         }
  44.        
  45.         return $out;
  46.     }
  47.    
  48.     public function init()
  49.     {
  50.         if($_SERVER['REQUEST_METHOD'] == 'POST' && self::$loginsessie === false)
  51.         {
  52.             if(isset($_POST['actie']))
  53.             {
  54.                 switch($_POST['actie'])
  55.                 {
  56.                     case 'login': $this->controleerGegevens(); break;
  57.                 }
  58.             }
  59.         }
  60.        
  61.         return $this;
  62.     }
  63.    
  64.     public function getIP()
  65.     {
  66.         if(isset($_SERVER))
  67.         {
  68.             if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  69.             {
  70.                 $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  71.             }
  72.             elseif(isset($_SERVER['HTTP_CLIENT_IP']))
  73.             {
  74.                 $realip = $_SERVER['HTTP_CLIENT_IP'];
  75.             }
  76.             else
  77.             {
  78.                 $realip = $_SERVER['REMOTE_ADDR'];
  79.             }
  80.         }
  81.         else
  82.         {
  83.             if(getenv('HTTP_X_FORWARDED_FOR'))
  84.             {
  85.                 $realip = getenv('HTTP_X_FORWARDED_FOR');
  86.             }
  87.             elseif(getenv('HTTP_CLIENT_IP'))
  88.             {
  89.                 $realip = getenv('HTTP_CLIENT_IP');
  90.             }
  91.             else
  92.             {
  93.                 $realip = getenv('REMOTE_ADDR');
  94.             }
  95.         }
  96.        
  97.         return $realip;
  98.     }
  99.    
  100.     private function controleerGegevens()
  101.     {
  102.         if(isset($_POST['actie']) && $_POST['actie'] == 'login')
  103.         {
  104.             $gebruiker = strip_tags(mysql_real_escape_string($_POST['gebruikersnaam']));
  105.             $wachtwoord = strip_tags(mysql_real_escape_string($_POST['wachtwoord']));
  106.            
  107.             if(constant('login_password_md5') === true)
  108.             {
  109.                 $wachtwoord = md5($wachtwoord);
  110.             }
  111.            
  112.             $query = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '".$gebruikersnaam."' AND wachtwoord = '".$wachtwoord."'");
  113.            
  114.             if(mysql_num_rows($query) > 0)
  115.             {
  116.                 self::$gebruikersinfo = array();
  117.                 self::$gebruikersinfo['info'] = mysql_fetch_array($query);
  118.                 return $this->startSession();
  119.             }
  120.             else
  121.             {
  122.                 if(constant('debug') === true && mysql_error())
  123.                 {
  124.                     die(mysql_error());
  125.                 }
  126.                 else
  127.                 {
  128.                     array_push($this->fouten, 'Gebruikersnaam of wachtwoord bestaat niet');
  129.                 }
  130.             }
  131.         }
  132.     }
  133.    
  134.     private function checkSession()
  135.     {
  136.         if($this->recheck >= constant('login_attempts'))
  137.         {
  138.             array_push($this->fouten, 'Er is een ongeldige sleutel gevonden');
  139.             return false;
  140.         }
  141.        
  142.         if(isset($_COOKIE['sid']) && !empty($_COOKIE['sid']))
  143.         {
  144.             $sid = strip_tags(mysql_real_escape_string($_COOKIE['sid']));
  145.             $query = mysql_query("SELECT * FROM logins WHERE sid = '".$sid."' AND ip = '".$this->getIP()."'");
  146.            
  147.             if(mysql_num_rows($query) > 0)
  148.             {
  149.                 $f = mysql_fetch_object($query);
  150.                 $query = mysql_query("SELECT * FROM gebruikers WHERE id = '".$f->uid."'");
  151.                
  152.                 if(mysql_num_rows($query) > 0)
  153.                 {
  154.                     self::$loginsessie = true;
  155.                     self::$gebruikersinfo = array();
  156.                     self::$gebruikersinfo['info'] = mysql_fetch_array($query);
  157.                 }
  158.             }
  159.            
  160.             if(constant('debug') === true && mysql_error())
  161.             {
  162.                 die(mysql_error());
  163.             }
  164.         }
  165.         else
  166.         {
  167.             $secondes = constant('login_session_time') * 3600;
  168.             setcookie('sid', null, time() - $secondes, '/');
  169.             $this->recheck++;
  170.         }
  171.     }
  172.    
  173.     public function startSession()
  174.     {
  175.         self::$gebruikersinfo['sleutel'] = md5(rand(0,99999999999).date('dmyhis'));
  176.         $info = self::$gebruikersinfo['info'];
  177.         $sql = "INSERT INTO logins ";
  178.         $sql .= "SET uid = '".mysql_real_escape_string($info['id'])."', ";
  179.         $sql .= "sid = '".mysql_real_escape_string(self::$gebruikersinfo['sleutel'])."', ";
  180.         $sql .= "ip = '".$this->getIP()."', ";
  181.         $sql .= "datum = NOW()";
  182.        
  183.         mysql_query($sql);
  184.        
  185.         if(constant('debug') === true && mysql_error())
  186.         {
  187.             die(mysql_error());
  188.         }
  189.        
  190.         $secondes = constant('login_session_time') * 3600;
  191.         setcookie('sid', self::$gebruikersinfo['sleutel'], time() + $secondes, '/');
  192.         header('Location: '.$_SERVER['REQUEST_URI']);
  193.     }
  194.    
  195.     private function endSession()
  196.     {
  197.         $sid = strip_tags($_COOKIE['sid']);
  198.         mysql_query("DELETE FROM logins WHERE sid = '".$sid."' AND ip = '".$this->getIP()."'");
  199.        
  200.         if(constant('debug') === true && mysql_error())
  201.         {
  202.             die(mysql_error());
  203.         }
  204.        
  205.         $secondes = constant('login_session_time') * 3600;
  206.         setcookie('sid', null, time() - $secondes, '/');
  207.         $url = str_replace('?actie=uitloggen', '', $_SERVER['REQUEST_URI']);
  208.         header('Location: '.$url);
  209.     }
  210.    
  211.     public static function getLoginInfo($wat=false)
  212.     {
  213.         if(!self::$loginsessie || !count(self::$gebruikersinfo))
  214.         {
  215.             return false;
  216.         }
  217.         else
  218.         {
  219.             if($wat === 'alles')
  220.             {
  221.                 return self::$gebruikersinfo['info'];
  222.             }
  223.             elseif(isset(self::$gebruikersinfo['info'][$wat]))
  224.             {
  225.                 return self::$gebruikersinfo['info'][$wat];
  226.             }
  227.             else
  228.             {
  229.                 return true;
  230.             }
  231.         }
  232.     }
  233. }
  234. ?>
  235.  


Ik heb nog geen tijd gehad om deze code te testen dus ik weet niet 100% zeker of het foutloos is!

Mijn software heeft geen bugs. Het ontwikkelt gewoon ongedocumenteerde functies.

jakeng
member
avatar
# Gepost op 04-09-2011 18:43


beste webmaster

ik wou vandaag uw inlogscript toe passen op mijn site.
maar ik ziet steeds bij de inlog pagina de php code. hoe kan ik dit weg doen?
ik heb funpic als hoster.

wat ook is als ik inlog krijg ik geen fout melding maar een 404 pagina.

help me aub

vlerknozem
Admin
avatar
# Gepost op 24-09-2011 14:40


De bestanden waarin je php gebruikt moeten de extensie .php hebben. Ook moet jou host PHP ondersteunen.

Lees de forum regels

Vorige ( 1,2 ) Volgende

U moet aangemeld zijn om een reactie te kunnen plaatsen.

Indien u nog geen account heeft kunt u zich hier registreren.



© copyright 2009/2010 WebProjects 1.02 - Template van Sebastaan Franken