hubisoft
Goto Top

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
<?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

Content-Key: 233443

Url: https://administrator.de/contentid/233443

Printed on: April 24, 2024 at 03:04 o'clock

Member: colinardo
Solution colinardo Mar 23, 2014, updated at Mar 24, 2014 at 21:28:33 (UTC)
Goto Top
Moin,
schreib den include Pfad in der Admin.php mal so:
<?php
   include "/Login/Auth.php";  
?> 
Grüße Uwe
Member: HubiSoft
HubiSoft Mar 23, 2014 at 18:41:06 (UTC)
Goto Top
Habe mal alle Pfade bearbeitet sodas http:// weg ist.
Jedoch funktioniert es nicht.
Ich kann dir einen Demo ACC zuschicken wenn du willst.

Grüße Goldencreeper
Member: Jannis92
Solution Jannis92 Mar 23, 2014, updated at Mar 24, 2014 at 21:28:35 (UTC)
Goto Top
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');
}
Member: colinardo
Solution colinardo Mar 23, 2014, updated at Mar 24, 2014 at 21:28:36 (UTC)
Goto Top
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
<?php
session_start();
$_SESSION = array();
if(isset($_COOKIE[session_name()])){
  setcookie(session_name(),'', time()-48000,'/');  
}
session_destroy();

header('Location: http://deinedomain.tld/Login');   
?>
Member: HubiSoft
HubiSoft Mar 23, 2014 at 20:37:16 (UTC)
Goto Top
Tut mir leid.
Aber beide Ideen bringen nix.
Habe alle beide ausprobiert aber konnte immer wieder auf die Admin.php zugreiffen.

Grüße Goldencreeper
Member: Jannis92
Solution Jannis92 Mar 23, 2014, updated at Mar 24, 2014 at 21:28:39 (UTC)
Goto Top
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
Member: colinardo
Solution colinardo Mar 24, 2014 updated at 21:28:40 (UTC)
Goto Top
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:
<form action="index.php" method="post">   
hier sollte "login.php" als action drin stehen ...

@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
Member: HubiSoft
HubiSoft Mar 24, 2014 at 15:54:45 (UTC)
Goto Top
Die Lösungen sind zwar akzeptabel jedoch funktionieren die auch nicht.
Ich weiss nicht wiso.
Entweder liegt der Fehler wo anders oder ich weiss nicht weiter.
Fehler werden auch keine ausgeworfen die Admin.php war vollkommen weiß
Also ne leere seite.

Grüße Goldencreeper
Member: Jannis92
Solution Jannis92 Mar 24, 2014 updated at 21:28:41 (UTC)
Goto Top
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
Member: HubiSoft
HubiSoft Mar 24, 2014 updated at 20:47:20 (UTC)
Goto Top
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.

Grüße Goldencreeper
Member: colinardo
Solution colinardo Mar 24, 2014 updated at 21:28:42 (UTC)
Goto Top
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 !
so gehört das...
header('Location: http://deinedomain.tld/Login/index.php');  
Member: Jannis92
Solution Jannis92 Mar 24, 2014 updated at 21:28:43 (UTC)
Goto Top
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.
Member: HubiSoft
HubiSoft Mar 24, 2014 updated at 21:37:01 (UTC)
Goto Top
Zitat von @colinardo:

> 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:
> <form action="index.php" method="post">   
> 
hier sollte "login.php" als action drin stehen ...

@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

@colinardo: Die datei login.php gibts eig. garnicht sie ist in der index.php vondaher ist der Pfad richtig. Auch die Admin.php ist ein eigenes verzeichnis mit einer php Datei. Dabei ist das eh alles ein test um das Script zum laufen zu brigen werde die Struktur eh noch ändern.

So die beiden ;; habe ich weggemacht.
Ich ich muss euch vielmals danken.
Wenn man das Admin verzeichnis aufruft wird man zur Login seite geleitet.
Aber es gibt einen neuen Fehler:
Notice: Undefined index: angemeldet in /var/www/web2/htdocs/Login/index.php on line 7

Ist dieser bereich.

liegt das jetz daran das eine Definition in der Auth.php geändert wurde?

Grüße Goldencreeper


//EDIT: Und wenn man eingeloggt ist kommt dieser Fehler:
Notice: A session had already been started - ignoring session_start() in /var/www/web2/htdocs/Login/Auth.php on line 2

Dieser Bereich:
session_start();
Member: Jannis92
Jannis92 Mar 24, 2014 at 21:43:33 (UTC)
Goto Top
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.
Member: HubiSoft
HubiSoft Mar 24, 2014 at 21:55:10 (UTC)
Goto Top
Ok und warum wird die jetz genau ausgelöst?
Ich meine es sieht nicht grade schön aus und dazu ist sie blöd zu sehen.
Denn wenn es andere PHP fehler gibt denkt man das das dazu gehört.

Grüße Goldencreeper
Member: colinardo
Solution colinardo Mar 25, 2014, updated at Mar 26, 2014 at 16:39:03 (UTC)
Goto Top
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:
Notice: Undefined index: angemeldet in /var/www/web2/htdocs/Login/index.php on line 7
noch unbedingt loswerden möchtest musst du die Login-Seite am Anfang noch so umschreiben:
<?php
  session_start();
  include "DB.php";  

  if (isset($_SESSION['angemeldet'])) {  
    if ($_SESSION['angemeldet']){  
       header('Location: http://http://deinedomain.tld/Admin');  
       exit;
    }
  }
.....
...
..
(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
Member: HubiSoft
HubiSoft Mar 26, 2014 at 16:38:58 (UTC)
Goto Top
Ok vielen Dank geht alles.
Jetz kann ich endlich das ACP bearbeiten.

Grüße Goldencreeper