MYSQL und PHP Login Script
Hallo liebe Administrator Community.
Ich habe Arbeite grade an einer Status Seite für einen Hoster.
Die Seite ist auch schon Online und funktioniert auch.
Aber das Aktualisieren der Server bzw hinzufügen und löschen erfolgt immer noch per Hand via Editor.
Nun möchte ich ein CMS dafür schreiben.
Da ich nicht der beste in PHP bin habe ich im Internet nach einem Login script gesucht.
Ich bin auch fündig geworden.
Login und alles andere geht.
Es gibt nur ein Problem.
Wenn man http://deinedomain.tld/Login eingibt geht alles.
Wenn man aber den Admin Pfad kennt (http://deinedomain.tld/Admin) wird man nicht aufgefordert sich anzumelden.
Sondern bekommt zugriff.
Von daher ist es egal ob man eingelogt ist oder nicht.
Hier mal alles Quellcodes:
Login.php
DB.php
Auth.php
Admin.php
Logout.php
Quelle des Scriptes:
http://www.der-webdesigner.net/tutorials/php/74-silentstormer_login
Würde mich über Hilfe freuen.
Grüße Goldencreeper
Ich habe Arbeite grade an einer Status Seite für einen Hoster.
Die Seite ist auch schon Online und funktioniert auch.
Aber das Aktualisieren der Server bzw hinzufügen und löschen erfolgt immer noch per Hand via Editor.
Nun möchte ich ein CMS dafür schreiben.
Da ich nicht der beste in PHP bin habe ich im Internet nach einem Login script gesucht.
Ich bin auch fündig geworden.
Login und alles andere geht.
Es gibt nur ein Problem.
Wenn man http://deinedomain.tld/Login eingibt geht alles.
Wenn man aber den Admin Pfad kennt (http://deinedomain.tld/Admin) wird man nicht aufgefordert sich anzumelden.
Sondern bekommt zugriff.
Von daher ist es egal ob man eingelogt ist oder nicht.
Hier mal alles Quellcodes:
Login.php
<?php
session_start();
include "DB.php";
if (isset($_SESSION['angemeldet']) || $_SESSION['angemeldet']) {
header('Location: http://http://deinedomain.tld/Admin');
exit;
}
else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$sql = mysql_query("SELECT $mysqlname FROM $mysqltable WHERE $mysqlname='$username' AND $mysqlpwd='$passwort'");
$num = mysql_num_rows($sql);
if ($num != 0) {
$_SESSION['angemeldet'] = true;
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
if (php_sapi_name() == 'cgi') {
header('Status: 303 See Other');
}
else {
header('HTTP/1.1 303 See Other');
}
}
header('Location: http://deinedomain.tld/Admin');
exit;
}
else {
echo "<p><b>Falsche Login-Daten.</b></p>";
}
}
?>
<form action="index.php" method="post">
<table border="0">
<tr>
<td>Username:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" name="passwort" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Einloggen" /></td>
</tr>
</table>
</form>
DB.php
<?php
$mysqlhost="localhost";
$mysqluser="username";
$mysqlpasswd="passwort";
$mysqldbname="datenbankname";
$mysqltable="user";
$mysqlpwd="pw";
$mysqlname="name";
$link = @mysql_pconnect($mysqlhost, $mysqluser, $mysqlpasswd);
if ($link == FALSE) {
echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.";
echo "Bitte versuchen Sie es später noch einmal.</b></p>";
exit();
}
mysql_select_db($mysqldbname);
?>
Auth.php
<?php
session_start();
if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
header('Location: http://deinedomain.tld/Login');
exit;
}
?>
Admin.php
<?php include "http://deinedomain.tld/Login/Auth.php"; ?>
<p>Willkommen im neuen Admin-Bereich dieser Homepage!!</p>
<p> <p>
<p>Viel Spaß noch!</p>
<form action="http://deinedomain.tld/Login/Logout.php" method="post">
<input type="submit" value="Ausloggen" />
</form>
Logout.php
<?php
session_start();
session_destroy();
header('Location: http://deinedomain.tld/Login');
?>
Quelle des Scriptes:
http://www.der-webdesigner.net/tutorials/php/74-silentstormer_login
Würde mich über Hilfe freuen.
Grüße Goldencreeper
Please also mark the comments that contributed to the solution of the article
Content-Key: 233443
Url: https://administrator.de/contentid/233443
Printed on: May 3, 2024 at 00:05 o'clock
17 Comments
Latest comment
Hey,
normalerweise sieht die Syntax für den include Befehl wie folgt aus:
include('Pfad'); <<-- könntest das Ganze noch einmal mit den Klammern ausprobieren.
oder:
include('Auth.php');
Dennoch hätte ich persönlich die Admin.php anders aufgebaut (vllt. noch eine Idee, falls es mit den Klammern nicht funktioniert:
Admin.php
<?php
session_start();
IF($_SESSION['angemeldet'] == true)
{
Hier nun der Quelltext für den Admin
}
else
{
include('Login.php');
}
normalerweise sieht die Syntax für den include Befehl wie folgt aus:
include('Pfad'); <<-- könntest das Ganze noch einmal mit den Klammern ausprobieren.
oder:
include('Auth.php');
Dennoch hätte ich persönlich die Admin.php anders aufgebaut (vllt. noch eine Idee, falls es mit den Klammern nicht funktioniert:
Admin.php
<?php
session_start();
IF($_SESSION['angemeldet'] == true)
{
Hier nun der Quelltext für den Admin
}
else
{
include('Login.php');
}
kann es gerade nicht testen, aber vermutlich werden die Session-Variablen nicht richtig gelöscht, probier es mal mit dieser Variante der Logout.php welche die Variablen zurücksetzt und eventuelle Cookies löscht.
Logout.php
Logout.php
<?php
session_start();
$_SESSION = array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'', time()-48000,'/');
}
session_destroy();
header('Location: http://deinedomain.tld/Login');
?>
Lässt du dir php Fehler anzeigen?
EDIT:
so, habe nun zwei Varianten für dich:
1. Variante | Admin.php
<?php
session_start();
include '../Auth.php';
if(auth()==false)
{
echo "Nicht angemeldet";
}
else
{
echo '
<p>Willkommen im neuen Admin-Bereich dieser Homepage!!</p>
<p> <p>
<p>Viel Spaß noch!</p>
<form action="http://deinedomain.tld/Login/Logout.php" method="post">
<input type="submit" value="Ausloggen" />
</form>
';
}
?>
2. Variante | Admin.php
<?php
session_start();
IF($_SESSION['angemeldet'] == true)
{
echo '
<p>Willkommen im neuen Admin-Bereich dieser Homepage!!</p>
<p> <p>
<p>Viel Spaß noch!</p>
<form action="http://deinedomain.tld/Login/Logout.php" method="post">
<input type="submit" value="Ausloggen" />
</form>
';
}
else
{
include('http://deinedomain.tld/Login/login.php');
}
?>
FÜR Variante 1 muss die Auth.php wie folgt angepasst werden:
<?php
session_start();
function auth()
{
header('Location: http://deinedomain.tld/Login/login.php');
return false; Wenn keine Sitzung existiert, gebe False zurück
}
else
{
return true;Wenn eine Sitzung exisitiert, gebe true zurück.
}
}
?>
Wie gesagt, bei mir haben beie Varianten funktioniert.
Mit dem ursprünglichen Quelltext mit dem "Exit" hat bei mir auch nicht funktioniert, was eigentlich auch logisch ist,
da der Interpreter den PHP Code "interpretiert, bei exit, stoppt und anschließend den restlichen HTML Text ausgibt.
Ich hoffe die alternative ist für die akzeptabel :p
EDIT:
so, habe nun zwei Varianten für dich:
1. Variante | Admin.php
<?php
session_start();
include '../Auth.php';
if(auth()==false)
{
echo "Nicht angemeldet";
}
else
{
echo '
<p>Willkommen im neuen Admin-Bereich dieser Homepage!!</p>
<p> <p>
<p>Viel Spaß noch!</p>
<form action="http://deinedomain.tld/Login/Logout.php" method="post">
<input type="submit" value="Ausloggen" />
</form>
';
}
?>
2. Variante | Admin.php
<?php
session_start();
IF($_SESSION['angemeldet'] == true)
{
echo '
<p>Willkommen im neuen Admin-Bereich dieser Homepage!!</p>
<p> <p>
<p>Viel Spaß noch!</p>
<form action="http://deinedomain.tld/Login/Logout.php" method="post">
<input type="submit" value="Ausloggen" />
</form>
';
}
else
{
include('http://deinedomain.tld/Login/login.php');
}
?>
FÜR Variante 1 muss die Auth.php wie folgt angepasst werden:
<?php
session_start();
function auth()
{
return false; Wenn keine Sitzung existiert, gebe False zurück
}
else
{
return true;Wenn eine Sitzung exisitiert, gebe true zurück.
}
}
?>
Wie gesagt, bei mir haben beie Varianten funktioniert.
Mit dem ursprünglichen Quelltext mit dem "Exit" hat bei mir auch nicht funktioniert, was eigentlich auch logisch ist,
da der Interpreter den PHP Code "interpretiert, bei exit, stoppt und anschließend den restlichen HTML Text ausgibt.
Ich hoffe die alternative ist für die akzeptabel :p
Zitat von @HubiSoft:
Tut mir leid.
Aber beide Ideen bringen nix.
Habe alle beide ausprobiert aber konnte immer wieder auf die Admin.php zugreiffen.
Tut mir auch leid, aber hier geht's so einwandfrei, auch wenn es keine wasserdichte Lösung ist ... du hast in der Zeile 40 der login.php noch einen Fehler:Tut mir leid.
Aber beide Ideen bringen nix.
Habe alle beide ausprobiert aber konnte immer wieder auf die Admin.php zugreiffen.
<form action="index.php" method="post">
@Jannis92
Mit dem ursprünglichen Quelltext mit dem "Exit" hat bei mir auch nicht funktioniert, was eigentlich auch logisch ist, da der Interpreter den PHP Code "interpretiert, bei exit, stoppt und anschließend den restlichen HTML Text ausgibt.
aber nicht wenn vor dem exit der Header auf eine andere Location gesetzt wird, dann wird die Seite gar nicht erst angezeigt, sondern direkt umgeleitet.Grüße Uwe
Du, ohne Witz...
ich habe den Quelltext bei mir ausprobiert und es hat funktioniert.
Was steht denn in deiner php.ini ?!
Ist hier überhaupt eingestellt, dass Fehlermeldungen ausgegeben werden sollen?
Ich weiß jetzt nicht, wie weit deine PHP- Kenntnisse reichen, daher die Frage ;).
Suche sonst in der php.ini einmal nach "error_reporting".
Hier sollte "E_ALL" eingestellt sein.
Zusätzlich noch einmal die einstellunge für "display_errors" überprüfen.
Sollte auf "On" gestellt sein.
Alternativ dazu einmal die php.ini posten oder so.
Wie gesagt, ich habe den Quelltext, den ich dir hochgeladen habe, ausprobiert.
Bin ich in das Admin Verzeichnis gegangen, und habe die admin.php geöffnet, anschließend wurde ich zur Login.php geleitet.
Beste Grüße & viel Erfolg :p
ich habe den Quelltext bei mir ausprobiert und es hat funktioniert.
Was steht denn in deiner php.ini ?!
Ist hier überhaupt eingestellt, dass Fehlermeldungen ausgegeben werden sollen?
Ich weiß jetzt nicht, wie weit deine PHP- Kenntnisse reichen, daher die Frage ;).
Suche sonst in der php.ini einmal nach "error_reporting".
Hier sollte "E_ALL" eingestellt sein.
Zusätzlich noch einmal die einstellunge für "display_errors" überprüfen.
Sollte auf "On" gestellt sein.
Alternativ dazu einmal die php.ini posten oder so.
Wie gesagt, ich habe den Quelltext, den ich dir hochgeladen habe, ausprobiert.
Bin ich in das Admin Verzeichnis gegangen, und habe die admin.php geöffnet, anschließend wurde ich zur Login.php geleitet.
Beste Grüße & viel Erfolg :p
Zitat von @HubiSoft:
Sry habe nicht gesehen das die einstellungen aus sind.
Also der Fehler liegt in der Auth.php:
Parse error: syntax error, unexpected ';' in /var/www/web2/htdocs/Login/Auth.php on line 7
das wäre dieser bereich:
header('Location: http://deinedomain.tld/Login/index.php';);
Jedoch ist da alles richtig eingestellt.
ähm, eben nicht !!! wie die Fehlermeldung schon sagt hast du ein bzw. zwei Semikolon zu viel !Sry habe nicht gesehen das die einstellungen aus sind.
Also der Fehler liegt in der Auth.php:
Parse error: syntax error, unexpected ';' in /var/www/web2/htdocs/Login/Auth.php on line 7
das wäre dieser bereich:
header('Location: http://deinedomain.tld/Login/index.php';);
Jedoch ist da alles richtig eingestellt.
so gehört das...
header('Location: http://deinedomain.tld/Login/index.php');
Jips,
colinardo hat recht.
Wenn du meinen Quelltext von oben kopiert hast, dann tut es mir leid.
Da hat sich wohl ausversehen ein Fehler eingeschlichen.
header('Location: http://deinedomain.tld/Login/login.php';);
nach .php' darf das Semikolon nicht sein.
colinardo hat recht.
Wenn du meinen Quelltext von oben kopiert hast, dann tut es mir leid.
Da hat sich wohl ausversehen ein Fehler eingeschlichen.
header('Location: http://deinedomain.tld/Login/login.php';);
nach .php' darf das Semikolon nicht sein.
Hallo Goldencreeper,
das ist schön zu hören....
Der "Fehler" wird ausgegeben, da die Session "angemeldet" noch nicht existiert. Du setzt Sie ja erst auf true, wenn
die Anmeldung erfolgreich war.
Würde sagen, dass du die Meldung fürs Erste ignorieren kannst.
Geht das Ganze ins produktive über, so werden die php Meldungen, die du gerade eingeschaltet hast,
eh ausgeschaltet.
das ist schön zu hören....
Der "Fehler" wird ausgegeben, da die Session "angemeldet" noch nicht existiert. Du setzt Sie ja erst auf true, wenn
die Anmeldung erfolgreich war.
Würde sagen, dass du die Meldung fürs Erste ignorieren kannst.
Geht das Ganze ins produktive über, so werden die php Meldungen, die du gerade eingeschaltet hast,
eh ausgeschaltet.
Wenn du die Fehlerausgabe einschaltest erscheinen dort auch Warnings / Notices die aber die Funktionsweise nicht beeinträchtigen, und die wenn die Fehlerausgabe für den Produktivbetrieb wieder ausgeschaltet wird, auch nicht mehr erscheinen.
Wenn du diese Notice:
noch unbedingt loswerden möchtest musst du die Login-Seite am Anfang noch so umschreiben:
(Hinweis für Dummies: Die Punkte zum Schluss gehören natürlich nicht dazu ...., nur das nachher nicht wieder Beschwerden kommen das das alles doch gar nicht funktioniert ...)
Damit sollte das Thema hier gegessen sein ...
Ansonsten: http://www.php-einfach.de/
Grüße Uwe
Wenn du diese Notice:
Notice: Undefined index: angemeldet in /var/www/web2/htdocs/Login/index.php on line 7
<?php
session_start();
include "DB.php";
if (isset($_SESSION['angemeldet'])) {
if ($_SESSION['angemeldet']){
header('Location: http://http://deinedomain.tld/Admin');
exit;
}
}
.....
...
..
Damit sollte das Thema hier gegessen sein ...
Ansonsten: http://www.php-einfach.de/
Grüße Uwe