Problem bei Login System

  • Hallo zusammen!
    Ich habe ein Problem und zwar, wollte ich ein kleinse Login system machen, einfach das man in ein Textfeld "Name"(Benutzername) und in das nächste "123"(Passwort)
    schreiben kann und wenn die zwei dinge stimmen, sollte man einfach wieder zu meiner Startseite (index.html) zurückgeleitet werden. Also ich habe es versucht, aber er überprüft irgendwie nicht ob man alles richtig eingibt und wenn ja wird man auch nicht weiter geleitet...
    Ich habe jetzt schon den halben Tag irgendwie versucht es hinzubekommen, aber es funktioniert einfach nicht :(
    Könnte mir vielleicht jemand erklären wie ich das machen müsste?


    Das hier ist mein Code:


    Danke für eure Antworten!


    PS: Wäre sehr nett wenn ihrs für Anfänger verständlich machen könntet. Danke!


    MFG Marius

  • Hey Marius,
    also als erstes: session_start() muss man vor jeglicher Ausgabe aufrufen (also noch vor dem <html>-Tag. Das hat etwas mit dem Header zu tun, der vom Server gesendet wird, sobald er irgendetwas ausgibt).


    Für eine Weiterleitung kannst du übrigens den Header selbst ein wenig Modifizieren, einfach header("location: meineSeite.php");
    Auch hier musst du darauf achten, dass du den Header modifizierst bevor dieser versendet wird (was ja irgendwo logisch klingt^^), also gaaanz am Anfang des Scriptes.


    Allgemein baut sich ein Script als erstes eigentlich aus einem Teil auf, wo Sachen "berechnet" werden.
    Also sind Passwörter richtig? Sind die benötigten Session oder Cookie-Variablen gesetzt? Evtl. via header() die Seite ändern usw.
    Dann erst wird die Seite ausgegeben.


    Ich hoffe ich konnte dir helfen und du hast alles verstanden.
    Bei Fragen, du weißt wo du mich/uns findest :wink:


    Sarkkan

  • Also meinst du, dass ich dann ganz oben:


    Mache und dann bei der Abfrage das:

    Code
    if( $Benutzername == "Name" and "1234" == $Passwort)
    {
        echo "<p>Sie sind eingeloggt!</p>";
        $_SESSION['eingeloggt'] = TRUE;
    }
    if( $_SESSION['eingeloggt'] == TRUE)
    {
       header();
    }


    Oder was habe ich falsch gemacht?


    Danke für eure antworten!


    Gruß Marius

  • So wird man ja immer umgeleitet und es wird gar nichts überprüft.


    Du kannst die Umleitung in die Überprüfung schreiben, also, wenn beides richtig ist, wird man weitergeleitet.
    Dann musst du die Überprüfung auch ganz an den Anfang packen.


    Ausgeben kannst du da oben zwar schlecht etwas, aber wenn man weitergeleitet wird, musst du ja eh nichts ausgeben.

  • Ok also meinst du das ich das so machen so:


    Aber wenn ich das so mache, werde ich trodzdem nicht auf die index.html seite weitergeleitet :cry:
    Könntest du mir viellleicht wenn du irgendwan zeit haben solltest nochmal helfen, weil ich werde einfach nicht umgeleitet :(

  • Jetzt gibts du vorher etwas aus ("Sie sind eingeloggt!"), das darfst du aber, wie Sarkkan dir erklärt hat, nicht vor den Header-Befehlen machen.
    Diese Ausgabe brauchst du auch gar nicht, der Benutzer merkt ja, dass er eingeloggt ist dadurch, dass er weitergeleitet wird.

  • Aber auch wenn ich es so mache, werde ich nicht wertergeleitet:


    :cry:


    PS: Sorry das ich dich so nerv...

  • Öhm.. du sagtest du seist Anfänger?
    Dir ist Bewusst, dass PHP-Code nur in einer PHP-Datei interpretiert wird, wenn man nicht gerade schon einiges an Kenntnissen mit Apache hat?^^
    Und das man natürlich einen PHP-Fähigen Webserver oder localserver (wie z.B. Xampp) benötigt?


    Also anstelle von Login.html muss es Login.php heißen :D
    Außerdem wählt man Dateinamen meist klein :) Aber das ist noch recht unwichtig^^


    Edit: Nein, an der Designdatei kann es überhaupt nicht liegen :D

  • :lol: :lol:
    Shit...
    Die ändung war html :cry:
    JA ich bin ein Anfänger^^


    :D Du bist ein Geni!
    Also ich hatte XAMPP schon auf meinem Rechner, habe aber völlig vergessen das ich php über das machen mus :cry:
    Also jetzt klappt eigentlich alles :D
    Danke vielmals!

  • Hätte da aber noch eine Frage...
    und zwar kann man ja mit

    Code
    * {
            margin: 0;
            padding: 0;
        }


    die weißen Ränder bei der Website wegmachen.
    Also wenn ich bei Scriptly F9 drücke wird mir ja die Browservorschau gezeigt, und da sieht man keinen weißen rand, aber wenn ich dan Firefox benutze, ist da plötzlich wieder der weiße Rand. Kannst du mir sagen warum?

  • 1. Verlasse dich NIEMALS auf die Scriptly-Vorschau!
    2. Öhm.. stylst du vllt. irgendwo ein Objekt mit margin und padding? Es ist ja irgendwo ziemlich klar, dass wenn ich später etwas definiere die ältere Definierung überschrieben wird :/

  • Habe ich am Anfang auch gedach und nachgeschaut, aber ich habe nur das nur einmal verwendet und das in meiner design datein.
    Ist die so eigentlich richtig:

  • Ok jetzt hab ich nur noch eine Frage an dich. Also nur wenn du halt grad no zeit hast.
    Wie kann ich des machen, dass wenn er sich eingeloggt hat, "Logout" da steht und wenn er ausgeloggt ist "Login".
    Ich denke mal das geht mit ner Variable, aber ich weis nicht wie das gehen soll.
    Weil ich habe ja meine "Navigation" mit HTML gemacht also

    Code
    <a>Startseite</a>  |  <a href="impressum.html">Impressum</a>  |  <a href="uebermich.html">&Uuml;ber mich</a>  |  <a href="login.php">Login</a>


    Aber in HTML kann ich ja keine If abfragen machen (also ich denke mal ich müsste den ja mit ner If abfrage des überprüfen).
    Also müsste ich dies ja mit PHP machen, aber in PHP kann ich " <a href="login.php">Login</a>" das wiederrum nicht machen :cry:


    Wie könnte ich das machen? Ich habe schon versuch in den geschweiften klammern einfach en HTML "Raum" zu erstellen aber dan bring die abfrage ja wieder nichts?
    Wäre nett wenn du mir helfen könntest!


    Mit freundlichen Grüßen Marius

  • Doch, dass ist ohne Probleme möglich :)
    Musterlösung:

    PHP
    <span class="syntaxhtml"><a href="home.php">Startseite</a><br /><span class="syntaxdefault"><?php<br /></span><span class="syntaxcomment">// Kurzschreibweise von $_SESSION['eingeloggt'] == true<br />// Gegenstück dazu wäre if(!$_SESSION['eingeloggt']) was lang soviel heißt wie if($_SESSION['eingeloggt'] == false)<br /></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">]){<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">'<a href="logout.php">Logout</a>'</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">'<a href="login.php">Login</a>'</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault">?><br /></span><a href="Impressum.php">Impressum</a></span>
  • Also bei mir kommt dan einfach keins von beiden. Egal ob die SESSION eingeloggt TRUE oder FALSE ist.
    Was mach ich falsch? Du hast doch gesagt das es so geht oder?:

  • Wie da kommt überhaupt nichts raus? O.o
    Wenigstens in den else-Teil müsste der doch springen.. öhm.. dann schreib das mal aus ( == true).. und lass dir vor der If-Anweisung die Variabel mit var_dump() ausgeben.


    Öhm.. aber das ist 100%ig eine PHP-Datei, ja?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!