Ankündigung

Einklappen
Keine Ankündigung bisher.

Loginverwaltung direkt auf Formular Datei ausführen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Loginverwaltung direkt auf Formular Datei ausführen

    Guten Tag
    und zwar habe ich ein Problem, bzw. weiß nicht wie ich das realisieren kann.

    Aktuelle Situation:

    Der Nutzer gibt in ein Formular seine Logindaten ein (index.php). Dann wird per Post die Informationen zur login.php übermittelt, dort werden diese überprüft und bei falschen Informationen die passenden Meldungen in Variabeln gespeichert. Diese würde er dann auf der login.php ausgeben.

    Mein Vorhaben:

    Ich würde sehr gerne diese login.php und die index.php zusammenfassen, sodass der Nutzer, bei der fehlerhaften Eingabe von den Logindaten, direkt auch bei dem Loginfenster entsprechend informiert wird und nicht erst auf die login.php weitergeleitet wird, wo dann steht, was falsch war.

    Meine versuchte Umsetzung:

    Ich habe versucht den PHP Code sich selbst aufzurufen, sprich die Action auf:
    PHP-Code:
    action="<?=$_SERVER['PHP_SELF']?>"
    Hier ist der ganze Code der index.php:

    PHP-Code:
    <?php 
            session_start
    ();
            
    session_regenerate_id();
         
            if (empty(
    $_SESSION["login"])) 
            {}
            else
            {
                echo 
    "<meta http-equiv='refresh' content='0; URL=../dashboard.php'>    ";
            }
    ?>
                
            

    <html>


        <head>

            <link rel="stylesheet" href="Style/stylesheet.css" type="text/css" />
            <a name="top"></a>

            <title>Projekt: School Manager</title>

        </head>
        

        <body class="blurBg-false" style="background-color:#909090"  >

            <center>


                

                    <form action="<?=$_SERVER['PHP_SELF']?>" class="stylesheet" style="background-color:#FFFFFF;
                                                    font-size:14px;
                                                    font-family:'Roboto',Arial,Helvetica,sans-serif;
                                                    color:#34495E;
                                                    max-width:480px;
                                                    min-width:150px"
                                                    

                          method="post" align="center" >



                        <div class="title"><h2>Login</h2></div>

                        <div class="element-input">
                            <div class="item-cont">

                                <input class="large" type="text" name="username" 
                                       placeholder="Username"/>

                                <span class="icon-place"></span>

                            </div>
                        </div>

                        <div class="element-password">
                            <div class="item-cont">

                                <input class="large" type="password" name="password" value=""                    placeholder="Password"/>
                                <span class="icon-place"></span>

                            </div>
                        </div>

                        <div class="submit"><input type="submit" value="Senden"/></div>

                    </form>

                
                

            </center>    

                



            <footer>
                    
                    

            </footer>


            
            <?php

                
    if (isset($_POST['submit']))
                    {
                        if (!empty(
    $_POST)) 

                            {
                                if (empty(
    $_POST['username']) || empty($_POST['password'])) 
                                {
                                    
    $message['error'] = 'Es wurden nicht alle Felder ausgefüllt.';
                                }

                                else 
                                {

                                        
    $mysqli = @new mysqli('localhost''xxx''xxx''xxx');

                                        if (
    $mysqli->connect_error
                                            { 
                                                
    $message['error'] = 'Datenbankverbindung fehlgeschlagen: ' $mysqli->connect_error;    
                                            }

                                        
    $query sprintf(
                                                            
    "SELECT username, password, id, userdeactivated FROM users WHERE username = '%s'",
                                                            
    $mysqli->real_escape_string($_POST['username'])
                                                        );

                                        
    $result $mysqli->query($query);

                                        if (
    $row $result->fetch_array(MYSQLI_ASSOC)) 
                                            {
                                                if (
    md5($_POST['password']) == $row['password']) 
                                                    {

                                                        if (
    $row['userdeactivated'] < 1)
                                                            {
                                                                
                                                                
    $_SESSION = array(
                                                                                    
    'login'     => true,
                                                                                    
    'user'      => array('username'  => $row['username']), 
                                                                                    
    'userid'    => array('id'        => $row['id'])              
                                                                                 );

                                                                

                                                                
    $message['success'] = 'Anmeldung erfolgreich, <a href="dashboard.php">weiter zum Inhalt.';
                                                                        
                                                                        
    $userid $_SESSION['userid']['id'];
                                                                        
                                                                        
    mysqli_query($mysqli"UPDATE users Set lastlogin = NOW() WHERE id = $userid");                      // Lastlogin wird aktualisiert
                                                                        
    mysqli_query($mysqli"UPDATE users Set onlinestatus = 1 WHERE id = $userid");                      // Onlinestatus wird auf 1 gesetzt
                                                                        
    header("Location: dashboard.php");

                                                                        exit();

                                                            }
                                                            
                                                        else
                                                            {
                                                                
    $message['error'] = 'Ihr Konto ist deaktiviert!';
                                                            }

                                                    } 

                                                else 
                                                    {
                                                        
    $message['error'] = 'Das Kennwort ist nicht korrekt.';
                                                    }
                                            } 

                                        else 
                                            
                                            {
                                                
    $message['error'] = 'Der Benutzer wurde nicht gefunden.';
                                            }
                                            
                                        
    $mysqli->close();

                                }
                            } 

                            else 
                                {
                                    
    $message['notice'] = 'Geben Sie Ihre Zugangsdaten ein um sich anzumelden.<br />' .
                                    
    'Wenn Sie noch kein Konto haben, gehen Sie <a href="./register.php">zur Registrierung</a>.';
                                    echo 
    "<meta http-equiv='refresh' content='5; URL=../index.html'>    ";
                                }
                    }
            
    ?>

            <?php if (isset($message['error'])): ?>

                    <fieldset class="error"><legend>Fehler</legend><?php echo $message['error'?></fieldset>
            <?php endif;
            if (isset(
    $message['success'])): ?>

                    <fieldset class="success"><legend>Erfolg</legend><?php echo $message['success'?></fieldset>

            <?php endif;
            if (isset(
    $message['notice'])): ?>
                    <fieldset class="notice"><legend>Hinweis</legend><?php echo $message['notice'?></fieldset>
            <?php endif; ?>

            
        </body>

        
    </html>
    Leider passiert da gar nichts, nicht mal eine Fehlermeldung. Er leitet mich nicht weiter auf die dashboard.php und die Fehlermeldungen gibt er auch nichts aus.

    Nun, wo liegt mein Fehler, oder wie kann ich es anders umsetzen?

    Würde mich über Hilfe sehr freuen!


  • #2
    Siehe:
    http://php-de.github.io/jumpto/affenformular/ und http://php-de.github.io/jumpto/eva-prinzip/
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Gut, erstmal Dankeschön für den Tipp.
      Also da war ich ja schon auf den richtigen Weg mit dem sich selber ausrufen.
      Es funktioniert auch nun, er loggt mich ein.
      Mein nächstes Problem ist leider die Ausgabe bei einer fehlerhaften Eingabe.

      Gibt es eine Möglichkeit nun einzelne Felder anzusprechen und dessen Formatierung, zur Laufzeit der Überprüfung, zu verändern? Stichwort: roter Rahmen

      Kommentar


      • #4
        Zitat von ChrisB. Beitrag anzeigen
        Gibt es eine Möglichkeit nun einzelne Felder anzusprechen und dessen Formatierung, zur Laufzeit der Überprüfung, zu verändern?
        Ja gibt es.

        Und $_SERVER['PHP_SELF'] ist böse, füttere google mal mit
        php_self xss
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Alles klar, habe mir mal den Artikel dazu durchgelesen.
          So müsste das wiederum sicher sein, korrekt?

          PHP-Code:
          <form action="<?htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="login" class="stylesheet" 
                            style="background-color:#FFFFFF;
                                   font-size:14px;
                                   font-family:'Open Sans','Helvetica Neue','Helvetica',Arial,Verdana,sans-serif;
                                   color:#666666;max-width:480px;min-width:150px" 
                            method="post">

          Kommentar


          • #6
            Wozu brauchst du das überhaupt?!

            Was spricht gegen das hier?
            PHP-Code:
            <form action="<?php __DIR__.'/index.php' ?>" ...
            Gibt es eine Möglichkeit nun einzelne Felder anzusprechen und dessen Formatierung, zur Laufzeit der Überprüfung, zu verändern? Stichwort: roter Rahmen

            Ich verstehe das Problem nicht. Du baust das hier in deinen HTML-Code ein an die Stelle für den Username. Und für PW etc. dann eben analog.

            PHP-Code:
            <?php
            $classUsername 
            '';

            if (
            $_SERVER['REQUEST_METHOD'] === 'POST') { 
                if (! isset(
            $_POST['username'])) {
                    
            $classUsername ' error';
                }
            }

            echo 
            '<input class="large '.$classUsername.'" type="text" name="username" placeholder="Username"/>';
            ?>
            Und in dein Stylesshet:
            Code:
            input.error { border: 1px solid red; }
            Wo liegt da die Herausforderung?

            (Natürlich kannst du auch noch die $_POST-Werte einbauen sodass sie nicht verloren gehen.)

            Kommentar


            • #7
              Nun, wenn ich mal den Dateinamen ändere, brauch ich nicht in dem Code die Zeile wieder raussuche und diese ändern.

              Aber vermutlich hast du Recht, ich denke so oft wird man wohl nicht die index.php Seite umbenennen.

              Edit:

              Nun, deine Herausforderungen sind ja auch vom Niveau her ganz andere, als bei einem PHP-Einsteiger, in welchem Unterforum wir uns passend dazu befinden.
              Aber Dankeschön.

              Kommentar


              • #8
                $_SERVER['SCRIPT_NAME'] ist eine Lösung
                Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                Kommentar


                • #9
                  @ChrisB.: Ich erwarte nicht dass du so etwas als Lösung präsentierst, aber meiner Meinung nach könnte man auf die ungefähre Vorgehensweise kommen - ohne das jetzt in konkreten Code umzusetzen. Einfach nur: "Ok, also entweder findet ein Aufruf mit GET oder POST statt. Bei ersterem baue ich das Feld ganz normal ein. Bei letzterem mache ich eine Fehlervalidierung und wenn ein Fehler vorliegt baue ich das Feld so ein dass dieser angezeigt wird."

                  Kommentar


                  • #10
                    o müsste das wiederum sicher sein, korrekt?

                    PHP-Code:
                    <form action="<?htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="login" class="stylesheet"
                    Guck mal ins HTML, was das für'n Blödsinn ist.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Ich habe da mir mehre Seiten angeschaut und diese rieten dazu
                      PHP-Code:
                      ($_SERVER["PHP_SELF"]) 
                      zu
                      PHP-Code:
                      htmlspecialchars($_SERVER["PHP_SELF"]) 
                      .

                      http://harrybailey.com/2009/12/using...the-same-page/
                      http://stackoverflow.com/questions/6...p-self-and-xss
                      http://php.net/manual/de/reserved.variables.server.php (Als Kommentar weiter unten)

                      Und als Anfänger verlässt man natürlich sich auf solche Tipps.

                      Kommentar


                      • #12
                        Entscheidend ist der Blick aufs Detail. Also guck in den Browserquelltext.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar

                        Lädt...
                        X