Login Skript mit OOP, Sessions und einer MySql Datenbank (Teil 1)

Realisierung eines Login Skriptes mit einer MySql Datenbank, Sessions und PHP mit Objekt orientierter Programmierung.

Willkommen zu meinen ersten Tutorial bei PHP-Resource. In dem Tutorial möchte ich
euch zeigen wie ein Login Skript unter Verwendung von OOP in PHP realisiert werden kann.

Projektübersicht

Hier eine schematische Darstellung was wir entwickeln wollen.

 



Der Besucher kommt auf ihre index.php Seite, dort wird anhand von Sessions überprüft ob der Besucher eingeloggt ist, falls ja dann wird ihm die Seite index.php angezeigt, falls nein wird der Besucher zur Seite Login.php weitergeleitet.
Auf Login.php wird nochmals überprüft ob der Besucher eingeloggt ist (werde im laufe des Tutorials klären warum diese
erneute Prüfung notwendig ist), falls er eingeloggt ist wird er zu index.php weitergeleitet, falls nicht wird ihm das
Login Formular angezeigt. Nachdem der Besucher seinen username und password eingegeben hat werden die Daten mit der
Datenbank TutLogin überprüft. Je nach Ergebnis wird der Besucher entweder an Index.php weitergeleitet oder ihm wird
erneut das Login Formular gezeigt mit der entsprechenden Fehlermeldung.

Vorraussetzungen

Um den Tutorial folgen zu können, sollten euch die Grundlagen von PHP, MySql und OOP geläufig sein.
Ihr solltet also bereits wissen wie man eine Datenbank anlegt und grundlegende Abfragen ausführt. Desweiteren
setze ich vorraus das ihr wisst was ein Klasse ist und wie ihr mit diesen arbeitet. Ich werde in diesem Tutorial nicht
auf die Grundlagen eingehen.

Technische Vorraussetzungen

Eine funktionierende Testumgebung z.B. Wamp oder Mamp. Ich benütze für dieses Tutorial den Wamp-Server auf einen
Windows PC.
Configuration: Apache Version 2.2.1.1
PHP Version 5.3.0
MySQL Version 5.1.36

Vorbereitungen - Projekt Setup

Ordnerstruktur

Legt einen Projekt Ordner mit beliebigen Namen im Verzeichnis C:wampwww an. Das Verzeichnis kann abweichen, je nachdem an
welcher Stelle ihr den WampServer installiert habt. Ich nenne meinen Ordner TutLogin. In dem von euch angelegten Ordner
fügt ihr dann noch folgende Unterordner ein : includes und stylesheets.

Anm1: Man kann hier bereits schon in der Projekt/Ordner Struktur sicherheitsrelevante Maßnahmen ergreifen, wie z. B. die Einteilung in öffentliche und nicht öffentlichen Bereich/Ordner, bzw. sicherheitsrelevante Dateien in andere Ordner auf den Server plazieren und den Zugriff regeln. Um das Tutorial nicht zu komplizieren verzichte ich auf die Maßnahmen.

Datenbank

Erstellt nun eine kleine Datenbank mit einem beliebigen Namen, meine nenne ich TutLogin. Ich habe hierfür die
MySql Console verwendet(siehe Screenshoot).

Anm2: Man kann in dieser Tabelle noch weitere Felder hinzufügen wie z. B. Vorname, Nachname, Email etc.
Wichtig ist hier die Länge des Feldes Password, da wir natürlich die Passwörter nicht als reinen Text in der
Datenbank ablegen, sondern die Passwörter verschlüsseln werden. Die verschiedenen Algorithmen für die
Verschlüsselung generieren verschieden lang verschlüsselte Passwörter.

Um uns den Zugriff auf die Datenbank zu erleichtern erstellen wir noch ein ein kleines Php skript mit den Namen
constants.php, in welchen wir unsere Zugangsdaten für die Datenbank definieren können. Speichert das Skript constants.php
in den Ordner includes eures Projektverzeichnisses.


1  <?php
2 defined
('DB_SERVER') ? null define("DB_SERVER""localhost");
3 
defined('DB_USER') ? null define("DB_USER""euer_username");
4 
defined('DB_PASS') ? null define("DB_PASS""euer_passwort");
5 
defined('DB_NAME') ? null define("DB_NAME""TutLogin");
6 
?>

Das Skript überprüft ob die Konstanten DB_SERVER, DB_USER, DB_PASS, DB_NAME definiert sind, falls nicht werden diese
mit euren Zugangsdaten definiert. Ihr müsst hier euere Zugangsdaten für den MySQl Server eintragen.

Anm3: Wie ihr bestimmt schon bemerkt habt werden in dem constants.php eure MySql Server Zugangsdaten abgelegt,
daher ist es unbedingt erforderlich diese Datei vor unbefugten Zugriff zu schützen (siehe Anm1).

 

Datenbank Klasse database erstellen

Nachdem wir nun alle notwendigen Vorbereitungen erledigt haben können wir uns mit der Datenbank Klasse beschäftigen. Als erstes erstellen wir eine neue Datei mit den Namen database.php und speichern diese in den von uns bereits erstellten Unterordner includes ab. Wir sollten uns erst überlegen was die Klasse alles können soll:

1. Verbindung zum Datenbank Server herstellen
2. Datenbank auswählen
3. Abfrage an DB-Server schicken
4. Ergebnisse ausgeben/bearbeiten etc.
5. Verbindung zum Server schließen
6. sonstige Methoden (Funktionen)

Das folgende Listing ist eine erste Version unserer database class, welche wir aber noch weiter verbessern werden um näher an das Modell der OOP heranzukommen.


 1  <?php 
 2 
 3 
require_once("config.php");
 4 
 5 class 
MySqlDatabase {
 6     
 7     private 
$connection;
 8     
 9     
10     
11     function 
__construct() {
12         
$this->open_connection();
13         
14     }
15     
16     public function 
open_connection() {
17         
$this->connection mysql_connect(DB_SERVERDB_USERDB_PASS);
18         if (!
$this->connection) {
19             die(
"Datenbankverbindung konnte nicht hergestellt werden: " mysql_error());
20         }
21             
22     }
23     public function 
select_db(DB_NAME$this->connection);
24                 
$db_select mysql_select_db(DB_NAME$this->connection);
25                 if(!
db_select) {
26                            die(
"Datenbankauswahl scheiterte: " mysql_error());
27                }
28         }
29         
30 
31     public function 
close_Connection() {
32         if(isset(
$this->connection)) {
33             
mysql_close($this->connection);
34             unset(
$this->connection);
35         }
36     }
37     
38     public function 
query($sql) {
39         
$this->last_query$sql;
40         
$result mysql_query($sql$this->connection);
41         
$this->confirm_query($result);
42         return 
$result;
43     }
44     
45     private function 
confirm_query($result) {
46         if(!
$result) {
47             
$output "Database query failed: " mysql_error() . "<br /><br />";
48             
$output .= "Last Sql query: " $this->last_query;
49             die( 
$output );
50         }
51     }
52     
53     public function 
escape_value$value ) {
54         
55         if( 
$this->new_enough_php ) {
56             if( 
$this->magic_quotes_active ) { $value stripslashes($value); }
57             
$value mysql_real_escape_string$value );
58         } else {
59             if (!
$this->magic_quotes_active) {$value addslashes$value ); }
60     }
61         return 
$value;
62 }
63 
64     public function 
fetch_array($result_set) {
65         return 
mysql_fetch_array($result_set);
66     }
67     
68     public function 
num_rows($result_set) {
69         return 
mysql_num_rows($result_set);
70     }
71     
72     public function 
insert_id() {
73         return 
mysql_insert_id($this->connection);
74     }
75     
76     public function 
affected_rows() {
77         return 
mysql_affected_rows($this->connection);
78     }
79 }
80 
$database = new MySqlDatabase();
81 
82 
?> 

Ratings


Stimmt dein Password?
Written by admin At 03.11.2014 11:33:58

Wenn ich [code]create database Test;[/code] eingebe, kommt jedes Mal der Fehler :
[code]ERROR 1040 <42000>: Acces denied for User ''@'localhost' to database 'Test'[/code]
Was mache ich falsch ? Ich komme einfach nicht auf die Lösung für das Problem , trotz dreistündiger Suche.
Written by MasterSnoopy At 02.11.2014 03:54:14

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

Definition of stored procedures - an introduction

Stored procedures are predefined SQL code blocks that are stored in a database and can be called up as required. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Category: mySQL-Tutorials

Wie schreibt man ein Forum mit PHP und Mysql

Wie schreibt man ein Forum mit PHP und Mysql

Wie erstellt man ein kleines Forum mit PHP und MYSQL? Dieses Tutorials zeigt wie es geht ...

Moqui

Autor : Moqui
Category: PHP-Tutorials

Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!

Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...

ndo@

Autor : ndo@
Category: PHP-Tutorials

abhängige Listen

In einem Formular sollen neben mehreren anderen Eingabefeldern auch zwei Listen (Select-Felder) zum Einsatz kommen. Dabei soll der Inhalt der zweiten Liste vom gewählten Wert der ersten Liste abhängig verändert werden. ...

Patrick_PQ

Autor : Patrick_PQ
Category: mySQL-Tutorials

Das 'Nested Sets' Modell - Bäume mit SQL

Das 'Nested Sets' Modell - Bäume mit SQL

Dieses Tutorial beschreibt die 'Nested Sets'-Technik, mit der man solche Bäume mit SQL performant konstruieren kann. ...

gorski@

Autor : gorski@
Category: mySQL-Tutorials

Gästebuch mit Datenbankanbindung

Dieses Tutorial beschreibt ausführlich wie ein Gästebuch in PHP und mySQL programmiert wird. ...

andy@

Autor : andy@
Category: PHP-Tutorials

Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!

Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...

ndo@

Autor : ndo@
Category: PHP-Tutorials

phpinfo() shows nothing

Today I want to show you how to output the phpinfo(). ...

Webmasterfreaky

Autor : Webmasterfreaky
Category: PHP-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial