Die eigene kleine Community (mit MySQL)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anmelden
befehl
benutzen
benutzer
code
datei
datenbank
datum
eingabe
email
fehler
formular
http
mode
not
null
problem
rang
schutz
session
-
Das hier ist die Alternative MySQL Version. Hier arbeiten wir nicht mit Dateien als Datenbank sondern mit einer MySQL Datenbank.
Update 14.01.04:
-Es ist ein Rangsystem eingef?hrt worden. (1=Admin, 2=Normal User, 0=Gast). Dieses System ist leicht zu erweitern.
-Man kann jetzt sein ganzes Profilbearbeiten und nicht nur das Passwort
Dieses Tutorial soll eine alternative variante f?r "Meine eigene kleine Community (mit Dateien)" sein. Hier werden wir anstatt mit Dateien mit einer MySQL Datenbank arbeiten.
Anforderungen:
-Webspace mti PHP unterst?tzung
-eine MySQL Datenbank
Dieses Tutorial vermittelt die Grundliegenden Scripte zum erschaffen einer Community. Diese werden bestimmt kein Sch?nheitswettbewerb gewinnen da sie sehr schlicht gehalten sind damit sie gut an das Eigene Design angepasst werden k?nnen.
Ich habe in diesem Tutorial auf ein Templatesystem verzichtet da ich der Meinung bin das man die Scripte erst richtig verstehen sollte und sich nicht direkt mit Templates zu "plagen". Nat?rlich w?re der Code sch?ner aber darauf kommt es ja nicht immer an, oder?
Als erstes m?ssen wir die ben?tigte MySQL Tabelle erstellen.
CREATE TABLE `usertabelle` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`pw` varchar(100) NOT NULL default '',
`rang` int(2) NULL default '',
`email` varchar(150) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Diesen Code m?sst ihr in das SQLeingabefenster in eurem PHP MyAdmin reinkopieren und ausf?hren. PHP MyAdmin d?rfte in den meisten F?llen ?ber das Webinterface eures Webspaceanbieters zu erreichen sein.
Also n?chstes w?nden wir uns der Datei zu in der Die MySQL Datenbank ge?ffnet wird.
mysql.php
<?php
$db_host = "localhost";
$db_user = "User";
$db_password = "Passwort";
$db_name = "Datenbank_Name";
$usertable = "Tabellen_Name(in diesem Beispiel: "usertabelle")";
Wir haben jetzt einiege Variablen bestimmt die es uns gleich erm?glichen werden die MySQL Datenbank zu "?ffnen"
mysql_connect($db_host,$db_user,$db_password) or die (mysql_error());
mysql_select_db($db_name) or die (mysql_error());
?>
Mit mysql_connect greifen wir auf den "MySQL-Account" zu. Mit mysql_select_db wh?len wir die richtige Datanbank aus.
Nachdem wir dies gekl?rt h?tten(will ich zumindest hoffen =)) wenden wir uns nun dem Herzst?ck des Scriptes zu.
schutz.php
<?php session_start();
include("mysql.php");
Wir starten eine Session per session_start. ACHTUNG!:hierbei ist zu beachten das der Befehl ganz vorne im Script vorkommt sonst kann es zu Problemen kommen. Per include("mysql.php"); f?gen wir die im vorheriegen Abschnitt besprochene Datei ein. Das spart Zeit da wir dann nicht in jeder Datei wieder die MySQL Daten angeben m?ssen.
$connect = mysql_query("SELECT * FROM $usertable WHERE LCASE(name) = LCASE('$name1') AND pw = '". md5($pw1) ."'");
Hier fordern wir alle Felder der Tablle (*=alle Felder) an. Aber nur die Spqalten in denen der Name steht der Eingegeben wurde (LCASE bewirkt das Gro?- und Kleinschreibung ignoriert wird.) und das Passwort genause ist wie das in der Tabellenspalte.
Interressant ist hier noch der Befehl md5();.
MD5 ist ein Hashalgorithmus! MD5 erzeugt aber einen immergleich langen Schl?ssel - einen HASH - der nicht reversibel - umkehrbar - ist.
-Danke an MrVisual
Das sich der md5 nicht umkeren l?sst kommt uns zum Vorteil da es so sehr viel schwerer ist an das Passwort zu kommen. Wer sich jetzt: "H?h wie kann das ganze denn dann Funktionieren" denkt dem muss ich sagen "Ganz einfach" bevor wir die Passw?rter vergleichen "verschl?sseln" wir das eingegebene Passwort einfach und vergleichen dann die beiden Versionen. Da md5 immer gleich "verschl?sslet" klapp es bei exakt der selben eingabe also auch(aber nur ein Buchstabe der anstatt Gro? Kleingeschrieben wurde ver?ndert die ganze Verschl?sselung)
if (mysql_num_rows($connect) == 1)
{
$row=mysql_fetch_array($connect);
Wir Testen per if-Schleife ob das Passwort und Name richtig waren.
Danach fordern wir nocheinmal mit mysql_fetch_array den Inhalt der genanten Spalte an der dann als Array ($row) zur verf?gung steht.
$name1 = $row['name'];
session_register("name1");
session_register("pw1");
$userid = $row['id'];
$rang = $row['rang'];
$email = $row['email'];
Wenn alles geklappt hat schreiben wir den eingegebenen Namen und das Passwort in die Session. Dann holen wir die Userid (z.B. zum ?ndern des Passwortes ben?tigt) aus dem Array und schreiben sie ebenfalls in die Session.
}else{
if(isset($login)){
echo "Deine Eingaben waren fehlerhaft.";
};
echo "
<table width='200'>
<tr>
<td width='50'>
Name:
</td>
<td width='150'>
<form method='POST' action='schutz.php'>
Ihr k?nnt auch
<form method='POST' action='$PHP_SELF'>
benutzen was allerdings nciht immer funktioniert. Bei php_self werden die Daten an die Datei in der ihr euch gerade befindet gesendet.
<input type='hidden' name='login' value='login'>
<input type='text' name='name1' value='$name1' size='20'>
</td>
</tr>
<tr>
<td width='50'>
Passwort:
</td>
<td width='150'>
<input type='PASSWORD' size='20' value='$pw1' name='pw1'><br>
</td>
</tr>
<tr>
<td width='50'></td>
<td width='150'>
<input type='submit' name='login' value='Login'>
</td>
</tr>
</table>
</form>";
$rang = "0";
};
Falls das Passwort nicht richtig war oder es den Benutzer nicht gibt (oder beides) wird eine Fehlermeldung ausgegeben.
Darauf folgt dann das Loginfenster was nat?rlich auch ?ffnet wenn du noch garnicht versucht hast dich einzuloggen
if($logout=="1"){
session_destroy();
echo "Sie wurden erfolgreich ausgeloggt";
$rang = "0";
};
?>
Eine kleine Bonusfunktion ist Logout (ihr k?nnt sie ?ber den Link schutz.php?logout=1 aufrufen). Als erstes wird geüpr?ft ob die Funktion aufgerufen wurde. Wenn ja wird die Session gel?scht und somit gilt der User nciht mehr auf den gesch?tzten Bereich zugreifen. Mit exit; wird dann der Script abgebrochen so das auch wirklich nichtd mehr ausgegeben wird.
F?r den Fall das sich ein neuer benutzer anmelden will gibt es die Datei anmelden.php
<?php
include("mysql.php");
Wieder beginnen wir den Script mit dem einf?gen der MySQL-Connect-Datei.
if(isset($new)){
$fehler = "Folgende Fehler traten auf: <br>";
$usertest = mysql_query("SELECT * FROM $usertable WHERE LCASE(name) = LCASE('$nick')");
if (mysql_num_rows($usertest) == 1)
{
$fehler = "$fehler -Dieser Benutzername wird bereits benutzt<br>";
$fehler2 = "1";
};
if($nick==""){
$fehler = "$fehler -Sie hast keinen Nicknamen angegeben.<br>";
$fehler2 = "1";
};
if($email==""){
$fehler = "$fehler -Sie haben keine E-Mail Adresse angegeben.<br>";
$fehler2 = "1";
};
if($passwort1=="" or $passwort1!=="$passwort2"){
$fehler = "$fehler -Ihre beiden Passwort eingaben sind unterschiedlich:<BR>";
$fehler2 = "1";
};
Falls das Formular (kommt am Ende dieser Datei) abgesendet wurde werden die eingaben gepr?ft. Es wird bei allen gepr?ft ob ?berhaupt etwas angegeben wurde und beim Passwort noch ob die Widerholungseingabe mit der ersten ?bereinstimmt.
Zus?tzlich ?berpr?fen wir ob es schon einen Benutzer mit diesem Namen gibt.
Falls ein Fehler gefunden wurde wird die Variable $fehler um eine Fehlermeldung bereichert. Zus?tzlich wird der Variable $fehler2 der Wert 1 zugewiesen. Dies dient nacher dazu herrauszufinden ob es fehler gab.
if(!isset($fehler2)){
Falls es die Variable $fehler2 nicht gibt (der !-Operator vor dem isset bewirkt das man nach dem gegenteil fragt|das es die Variable nicht gibt trifft nat?rlich nur ein wenn kein Fehlergab weil sie nur deffiniert wird wenn einer auftritt).
$passwort3 = md5($passwort1);
Wir Weisen der Variable $passwort3 den durch md5 Verschl?sselten wert von $passwort1 zu.
$new = "
INSERT INTO $usertable
(name, pw, email, rang)
VALUES
('$nick', '$passwort3', '$email','2')";
mysql_query($new) OR die(mysql_error());
In $new bestimmen wir die SQL Befehle die in disem Fall bewirken das eine neue Spalte mit dem Inhalt des Benutzer in die Benutzertabelle eingef?gt wird. Danach f?hren wir den SQL-Code aus. Falls ein Fehlerautritt lassen wir die Datenbank ihre Probleme ausprechen =).
echo "<br>Ihre Anmeldung war erfolgreich.";
exit;
Wir geben eine "Es hat geklappt" Meldung aus und brechen den Script an dieser Stelle ab damit das Formular nicht nocheinmal ausgegeben wird.
}else{
echo "$fehler";
};
};
Falls beim ?berpr?fen der Eingaben ein Fehler bemerkt wurde kommt hier der Zeitpunkt an dem wir ihn dem User mitteilen und ihm direkt nocheinmal das Formular mit seinen Angaben ausgeben damit er es Verbessern kann.
echo"
<form action='anmelden.php' method='post'>
<table><tr>
<td>Nick:</td>
<td><input type='text' name='nick' value='$nick'></td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type='text' name='email' value='$email'></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type='password' name='passwort1' value='$passwort1'></td>
</tr><tr>
<td>Passwort wiederholen:</td>
<td><input type='password' name='passwort2' value='$passwort2'></td>
</tr>
<td>
<input type='hidden' name='new' value='$new'>
<input type='submit' name='new' value='Anmelden'></td>
</form>
<td></td>
<td>
</td>
</tr>
</table>";
?>
Das war halt noch das Formular
Und zum Profil?ndern profil.php
<?php
include("schutz.php");
if($rang>0){
Wir laden die Schutz.php (dies ist also das erste externe gesch?tzte Dokument).
Dann pr?fen wir mit $rang>0 ob der User eingeloggt ist.
if(isset($edit)){
$passwort3 = md5($passwort1);
$usertest = mysql_query("SELECT * FROM $usertable WHERE id='$userid'");
if (mysql_num_rows($usertest) == 1)
{
$fehler = "$fehler -Dieser Benutzername wird bereits benutzt.<br>";
$fehler2 = "1";
};
if($passwort1!=="$passwort2"){
$fehler = "$fehler -Ihre beiden Passwort eingaben sind nicht identisch.<br>";
$fehler2 = "1";
};
if($passwort3=$row['pw']){
$passwort3 = $row['pw'];
};
Falls das Passwort?ndernformular abgesendet wurde werden die Eingaben einiegen Test (schon bekannt aus anmelden.php) durchgef?hrt.
if(!isset($fehler)){
$sql= "UPDATE $db_name.".$usertable."
SET
name = '$username',
email = '$emailadr',
pw = '$passwort3'
WHERE id = '$userid'";
mysql_query($sql) OR die(mysql_error());
$pw1 = "$passwort3";
session_register("pw1");
echo "<br>Ihr Passwort wurde ge?ndert.";
exit;
};
};
Wenn es keinen Fehler gab wird das Passwort verschl?sslt und bei dem User in seiner MySQL-Datenbank-Tabellenspalte gespeichert. Danach wird das neue Passwort in die Session geschrieben und der User bekommt eine Best?tigungsnachricht.
echo "
<form action='profil.php' method='post'>
<table>
<tr>
<td>
Username:
</td>
<td>
<input type='text' name='username' value='$name1'>
</td>
</tr>
<tr>
<td>
E-Mail
</td>
<td>
<input type='test' name='emailadr' value='$email'>
</td>
</tr>
<tr>
<td>
Neues Passwort:
</td>
<td>
<input type='password' name='passwort1' value='$passwort1'>
</td>
</tr>
<tr>
<td>
Neues Passwort wiederholen:
</td>
<td>
<input type='password' name='passwort2' value='$passwort2'>
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type='hidden' name='edit' value='$edit'>
<input type='submit' name='edit' value='?nderungen ?bernehmen'></td>
</form>
</td>
</tr>
</table>";
}
?>
Zum Abschluss wie immer das Formular
So und das wars auch schon mit diesem Tutorial. Vieleicht bringe ich bald ja noch kleine Erweiterungen wie z.B. eine Userliste oder ?hnliches aber dies soll ja auch nur eine kleine Anfangsst?tze sein.
Die Dokumente die du nun sch?tzen willst m?ssen PHP Dateiensein. Ihr f?gt ganz vorne einfach
<?php
include("schutz.php");
jetzt muss man bestimmen f?r wessen augen die Seite bestimmt ist:
ihr k?nnt
if($rang>0){
benutzen. Das w?rde bewirken das jeder eingeloggte die Seite einsehen kann.
Dann kannst du
if($rang==1){
machen wenn nur Admins die Seite sehen sollen.
Wenn jeder die Seite sehen soll kannst du das ganze weg lasse oder
if(isses($rang)){
benutzen.
?>
Das dieser Code ganz vorne in der Datei steht ist sehr wichtig da es sonst h?ufig zu Problemen in der Session kommt.
Als n?chstes w?rde dann
<html>
<head>
...
kommen. Hier bei m?sst ihr dann aber garnichts beachten da mann hier (meines wissens) nichts falsch machen kann was zu Problemen mit dem Script f?hrt.
Ganz am Ende macht ihr dann
}else{
echo "Sie haben keine Berechtigung die Seite einzusehen.";
};
hin. Das wars schon.
Ich hoffe wir haben heute wieder was dazu gelernt und w?nsche euch viel Spa? mit diesem Script.
cYa Bo
PS.: Bei Fragen r.sudkamp@web.de oder einfach per Kommentar. Ich werde mich schnellstm?glich darum k?mmern.
Zusatzscripte:
1. Userlist:
In diesem kleinem Zusatzscript werden alle User ausgegeben:
userlist.php
<?php
include("mysql.php");
Wir f?gen die MySQL Daten ein.
echo "
<table>
";
$sql = "
SELECT
*
FROM
$usertable
ORDER by
name";
$result = mysql_query($sql);
while($row=mysql_fetch_array($result)) {
echo "
<tr>
<td>".$row["name"]."</td>
<td>".$row["email"]."</td>
</tr>
";
}
Wir fragen den Tabelleninhalt per while-Schleife ab und geben imemr eine Zeile mit User und Email aus.
echo "
</table>
";
?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dieses Thema wurde mit folgender Begr?ndung von kenny197902 geschlossen:
Langsam macht mir das Schlie?en so richtig Spa?... wie gesagt: Gr?nde gleich wie die anderen auch:
http://www.lima-city.de/board.php?mode=thread&id=9439
http://www.lima-city.de/board.php?mode=thread&id=9440
http://www.lima-city.de/board.php?mode=thread&id=9441
http://www.lima-city.de/board.php?mode=thread&id=9442
http://www.lima-city.de/board.php?mode=thread&id=9443
(Dies ist eine automatische Antwort durch das System). -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage