Ankündigung

Einklappen
Keine Ankündigung bisher.

Mein Formular oder meine Session funktioniert nicht?

Einklappen

Neue Werbung 2019

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

  • Mein Formular oder meine Session funktioniert nicht?

    PHP-Code:
    <?php
    include_once '../inc/config.inc.php';
    include_once 
    './openxml.php';
    ob_start();
    session_start();
    //check Login input with datbase
    function executeLogin($username$password) {    
        
    $xmldbase xmlOpen('../'.USERDB);
        
    $password md5($password);
        foreach(
    $xmldbase->user as $key) {
            
    $db_userId $key->id;
            
    $db_username $key->username;
            
    $db_userpw $key->userpassword;
            
    $db_lastlogin $key->lastlogin;
            
    $db_role $key->role;
            if(
    $db_username == $username && $db_userpw == $password) {

                
    $_SESSION['uid'] = uniqid($db_usernametrue);
                
    $_SESSION['userid'] = $db_userId;
                
    $_SESSION['username'] = $db_username;
                
    $_SESSION['lastlogin'] = $db_lastlogin;
                
    $_SESSION['userrole'] = $db_role;
                
    header('Location:../index.php');
            }
        }
    }
    if (isset(
    $_POST['username']) && isset($_POST['password'])) {
        
    executeLogin($_POST['username'], $_POST['password']);
    }
    }
    Das ist mein Skript, wenn das Formular abgeschicht wird.

    PHP-Code:
    <?php
        
    include './inc/config.inc.php';
    ?>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title><?php echo PAGEMAINTITLE?> :: LOGIN :: BACKEND</title>
            <!-- CSS -->
            <link href="../css/bootstrap.min.css" rel="stylesheet" />
            <link href="../css/jquery-ui.min.css" rel="stylesheet" />
            <link href="../css/style_be.css" rel="stylesheet" />
        </head>
        <body>
            <div class="container" id="login">
                <div class="row">
                    <div class="col-lg-12">
                        <form method="post" action="./function/loginHandler.php" class="form-control">

                            <fieldset class="form-control">
                                <label><?php echo PAGEMAINTITLE?> :: Login</label>
                                <label class="form-label" for="username">Benutzername</label>
                                <input index="1" class="form-control form-control-lg" name="username" type="text" id="username" required />
                                <label for="password">Passwort</label>
                                <input index="2" class="form-control form-control-lg" type="password" name="password" id="password" required />
                            </fieldset>
                            <input index="3" type="submit" class="form-control form-control-lg" name="submit" id="submit" value="Einloggen" />
                        </form>
                    </div>
                </div>
            </div>
        </body>
    </html>
    Das ist mein Login-Formular.

    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
        
    ini_set('display_errors'1);
        
    ob_start();
        
    session_start();
        if (!isset(
    $_SESSION['uid'])) {
            
    header('Location:login.php');
            exit;
        }
    ?>
    Das ist der Head-Teil der in die Seiten geladen wird.

    Nun werde ich, wenn ich mich einloggen möchte immer wieder auf die Login-Seite zurückgeworfen, was wohl daran liegen muss das die Session nicht funktioniert. Ich weiß leider keinen Rat mehr, darum frage ich hier mal nach.

  • #2
    Warum wird hier, ob_start() verwendet, ich würde darauf verzichten.
    Es können auch PHP-Fehler ausgegeben werden bevor session_start aktiviert ist, eine Session wird dann nicht gesetzt.
    Enthalten die inkludierten Dateien PHP-Fehler und wurde das schließende ?> Tag weggelassen?

    Kommentar


    • #3
      Warum wird hier, ob_start() verwendet, ich würde darauf verzichten.
      Ich hatte das so in einer Anleitung gesehen.

      Es können auch PHP-Fehler ausgegeben werden bevor session_start aktiviert ist, eine Session wird dann nicht gesetzt.
      Bis jetzt hatte ich keine Fehler angezeigt bekommen.

      Enthalten die inkludierten Dateien PHP-Fehler und wurde das schließende ?> Tag weggelassen?
      Immer da, wo kein HTML folgt, lasse ich "?>" weg. Ein Fehler habe ich in der "config.inc.php" wo ich eine Datei aufrufe, um die letzte Bearbeitung in eine Konstante zu speichern.

      Kommentar


      • #4
        Ich hatte das so in einer Anleitung gesehen.
        Das ist keine Begründung, man muss immer wissen bzw. sich informieren was eine Funktion genau macht: https://www.php.net/de/ob_start

        Kommentar


        • #5
          Im ersten Script zähle ich eine schliessende geschweifte Klammer zuviel..
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Zitat von Werner123 Beitrag anzeigen
            Das ist keine Begründung, man muss immer wissen bzw. sich informieren was eine Funktion genau macht: https://www.php.net/de/ob_start
            Ich war eben verzweifelt, und habe nach jedem Strohhalm gegriffen.

            @Istegelitz, den Code habe ich zwischenzeitlich geändert:

            <?php

            include_once '../inc/config.inc.php';
            include_once './openxml.php';

            session_start();

            if (isset($_POST['username']) && isset($_POST['password'])) {

            $xmldbase = xmlOpen('../'.USERDB);
            $username = htmlspecialchars($_POST['username']);
            $password = htmlspecialchars($_POST['password']);
            $password = md5($password);

            foreach($xmldbase->user as $key) {

            $db_userId = $key->id;
            $db_username = $key->username;
            $db_userpw = $key->userpassword;
            $db_lastlogin = $key->lastlogin;
            $db_role = $key->role;

            if($db_username == $username && $db_userpw == $password) {

            $_SESSION['uid'] = uniqid($db_username, true);
            $_SESSION['userid'] = $db_userId;
            $_SESSION['username'] = $db_username;
            $_SESSION['lastlogin'] = $db_lastlogin;
            $_SESSION['userrole'] = $db_role;

            header('Location:../index.php');
            }
            }
            }
            Funktioniert aber auch nicht.

            Kommentar


            • #7
              Zitat von DanulShenenMaf Beitrag anzeigen
              PHP-Code:
              $username htmlspecialchars($_POST['username']);
              $password htmlspecialchars($_POST['password']);
              $password md5($password); 
              Alle drei Zeilen sind falsch. htmlspecialchars() brauchst du um den Kontextwechsel nach HTML zu behandeln, so machst du dir u.U. nur deine Daten kaputt da hier kein Kontextwechsel vorliegt. md5() ist ebenfalls falsch: md5 gilt als geknackt womit die Speicherung als md5-Hash (ungesalzen noch dazu!) eine Speicherung im Klartext gleichkommt - verwende pasword_hash() bzw. password_verify() um Passwörter zu speichern bzw. zu überprüfen.

              Zur Fehlersuche: wird das zweite if in deinem Code aus #6 true (werden also die Zugangsdaten gefunden)? Wird $_SESSION in diesem Script gesetzt? Wird das Session-Cookie gesetzt? Für welchen Pfad wird das Cookie gesetzt (wenn der Pfad für die Login-Datei gesetzt wird und du dann ein Verzeichnis höher gehst, wird das Cookie nicht an die index.php geschickt)?

              Funktioniert aber auch nicht.
              "Funktioniert nicht" ist keine Fehlerbeschreibung und Fehler suchen können wir kaum bis garnicht da wir nicht alle Teile kennen.

              Kommentar


              • #8
                Zitat von tk1234 Beitrag anzeigen
                Alle drei Zeilen sind falsch. htmlspecialchars() brauchst du um den Kontextwechsel nach HTML zu behandeln, so machst du dir u.U. nur deine Daten kaputt da hier kein Kontextwechsel vorliegt. md5() ist ebenfalls falsch: md5 gilt als geknackt womit die Speicherung als md5-Hash (ungesalzen noch dazu!) eine Speicherung im Klartext gleichkommt - verwende pasword_hash() bzw. password_verify() um Passwörter zu speichern bzw. zu überprüfen.

                Zur Fehlersuche: wird das zweite if in deinem Code aus #6 true (werden also die Zugangsdaten gefunden)? Wird $_SESSION in diesem Script gesetzt? Wird das Session-Cookie gesetzt? Für welchen Pfad wird das Cookie gesetzt (wenn der Pfad für die Login-Datei gesetzt wird und du dann ein Verzeichnis höher gehst, wird das Cookie nicht an die index.php geschickt)?


                "Funktioniert nicht" ist keine Fehlerbeschreibung und Fehler suchen können wir kaum bis garnicht da wir nicht alle Teile kennen.
                Ich habe htmlspecialchars so verstanden, dass es die Variable die ich aus dem Formular auslese von HTML befreit.

                Ich würde gerne eine bessere Beschreibung liefern als "funktioniert nicht", das Problem ist nur, wie beschreibt man etwas das man nicht versteht?

                Ich meine aber den Fehler gefunden zu haben: session id vor session start ...

                Kommentar


                • #9
                  Zitat von DanulShenenMaf Beitrag anzeigen
                  Ich habe htmlspecialchars so verstanden, dass es die Variable die ich aus dem Formular auslese von HTML befreit.
                  Dann hast du die Funktion falsch verstanden. Die macht u.a. aus < ein &lt; (der Rest: siehe Handbuch) damit ein "<strong>" in einem Text nicht dafür sorgt dass alles danach fett ausgegeben wird sondern das "<strong" genau so angezeigt wird.

                  Ich würde gerne eine bessere Beschreibung liefern als "funktioniert nicht", das Problem ist nur, wie beschreibt man etwas das man nicht versteht?
                  Du wirst verstehen dass es für uns dann noch viel schwieriger ist das Problem zu verstehen … Im Grunde musst du dann eben einen möglichst kurzen Code posten mit dem sich das Problem nachvollziehen lässt - mit dem aktuell geposteten Code geht das aufgrund der verschiedenen eingebundenen Dateien nicht.

                  Ich meine aber den Fehler gefunden zu haben: session id vor session start ...
                  Wenn du vor session_start() auf $_SESSION zugreifen willst, sollte dir PHP das in Form einer Fehlermeldung mitteilen (richtig eingestelltes error_reporting und ggf. display_errors vorausgesetzt).

                  Kommentar


                  • #10
                    Zitat von tk1234 Beitrag anzeigen

                    Wenn du vor session_start() auf $_SESSION zugreifen willst, sollte dir PHP das in Form einer Fehlermeldung mitteilen (richtig eingestelltes error_reporting und ggf. display_errors vorausgesetzt).
                    Nein, erst muss die session_id() und dann session_start() und dann geht es mit $_SESSION etc. so ist das gemeint.

                    Kommentar

                    Lädt...
                    X