Ankündigung

Einklappen
Keine Ankündigung bisher.

Login-Script mit Datenbankanfrage funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Login-Script mit Datenbankanfrage funktioniert nicht

    Hi!
    Und zwar habe ich von php-einfach (Link) dieses Tutorial für eine website mit login umzusetzen.
    Die Personen sind in einer Datenbank mit id name und passwort hinterlegt. Funktionieren will das ganze trotzdem nicht :/
    Kann mir da bitte jmd helfen?

    Hier das Formular:
    HTML-Code:
     <form id="login" method="post" action="index.php">
    
        <input class="log_input" type="text" placeholder="Username" name="nickname" value=""/>
        <input class="log_input" type="password" placeholder="Passwort" name="pw" value=""/>
        <input class="log_submit" type="submit" value="Login" name="login"/>
    
     </form>
    Dann noch der zugehöriger php teil mit der db-verbindung:
    PHP-Code:
    session_start();

        
    $pdo = new PDO('mysql:host=host;dbname=user_db','user','password');

        if(isset(
    $_POST['nickname']) && isset($_POST['pw'])){

            
    $nickname $_POST['nickname'];
            
    $password $_POST['pw'];

            
    $statement $pdo->prepare("SELECT * from user WHERE nickname = :nickname");
            
    $result $statement->execute(array('nickname' => $nickname));
            
    $user $statement->fetch();

            
    //pw prüfen
            
    if($user !== false && password_verify($password,$user['password'])){
                
    $_SESSION['userid'] = $user['id'];
                
    header('user.php');
            }
            else{
                
    $login_error '<p style="color:white;">Username oder Passwort falsch</p>';
            }

        } 
    (Ich weiss man sollte auf "select *" verzichten aber ich habe das jetzt einfach so übernommen, anders hat es auch nicht funktioniert )

    die fehlermeldung wird dann über dem formular ausgegeben.

    Dann die geschützte seite:

    PHP-Code:
    session_start();


        if(!isset(
    $_SESSION['userid'])){
            
    header('Location: index.php');
        }

        
    $user $_SESSION['userid']; 
    Mein Problem auf den Punkt gebracht: Ich kann eingeben was ich will: Ich bleib auf der index.php und es erscheint meine fehlermeldung......

    Wäre sehr dankbar für eure Mithilfe.

  • #2
    Zitat von Dodoseen Beitrag anzeigen
    Hi!
    Und zwar habe ich von php-einfach (Link) dieses Tutorial für eine website mit login umzusetzen.
    php-einfach ist keine gute Quelle. Die die dort schreiben haben wohl teilweise selbst wenig Ahnung von PHP.

    Zitat von Dodoseen Beitrag anzeigen
    Dann noch der zugehöriger php teil mit der db-verbindung:
    PHP-Code:
    // ...
    header('user.php'); 
    Was soll das denn sein? Du must schon einen gultigen HTTP-Header schicken.
    Wie der aussehen muss verrät Dir RFC2616. (mit PHP hat das aber nix zu tun)

    Du such für Deinen Fall nach dem Location Header-Field.

    Wobei ich anmerken möchte das Du das garnicht brauchst. Lasse alles vom selben Script erledigen. Du brauchst Da nicht mehrere Scripte zwischen denen Du hin und her hüpfen must. Einfach alles modular aufbauen ist nen guter Anfang.

    Zitat von Dodoseen Beitrag anzeigen
    (Ich weiss man sollte auf "select *" verzichten aber ich habe das jetzt einfach so übernommen, anders hat es auch nicht funktioniert
    BlaaBlaa… Du bist bei programmieren, solche Äußerungen haben hier nix zu suchen. Entweder Du machst es richtig oder Du läst es.
    Jedenfalls ist "Ich weiss das es falsch ist mache es aber erst mal so" schon der Anfang vom Ende.

    MACH ES RICHTIG! Wenn Du Dir diesen kurzen Satz nicht verinnerlichst und Dich auch daran hällst kannst Du eigentlich gleich wieder aufhören zu Programmieren!

    Das klingt hart, aber ist nur zu Deinem Besten!

    Zitat von Dodoseen Beitrag anzeigen
    PHP-Code:
    header('Location: index.php'); 
    Das ist Falsch! Siehe link zum RFC. Da muss eine absolute URL stehen und kein Pfad der auch noch relativ ist!
    und wenn man doch mal einen Location Header braucht dann reicht der Code so auch nicht da das script dannach erst mal weiter läuft. Das Script muss direkt nach dem header beendet werden!

    Zitat von Dodoseen Beitrag anzeigen
    Mein Problem auf den Punkt gebracht: Ich kann eingeben was ich will: Ich bleib auf der index.php und es erscheint meine fehlermeldung......
    Jeder Progammierer, egal ob Anfänger oder Fortgeschrittener muss im Fehlerfall seinen Code debuggen. Wie Du das machst steht in der Wissensammlung vom Forum.

    Kommentar


    • #3
      Vielen Dank für die Antwort erstmal.

      Und du hast recht, ich sollte es direkt richtig machen. Es hat halt nicht funktioniert und darum hab ich das so wie die gemacht.

      Jedenfalls habe ich die header jetzt mit Location und url gemacht.

      Aber mein Problem bleibt gleich.

      Kommentar


      • #4
        Dann debugge (finde Deine Fehler selbst) Lass Dir für den Anfang doch erst mal $user ausgeben

        Kommentar


        • #5
          Ich setz mich ran

          Kommentar


          • #6
            Hast Du auch das Script nach den header hart beendet?

            Und was heist ich setz mich ran? 3 Zeilen Code da kommt man nichtmal zum hinsetzen

            PHP-Code:
            echo '<pre>';
            var_dump$user );
            exit; 

            Kommentar


            • #7
              Und zwar habe ich mir mal user ausgeben lassen, das funktioniert soweit und mir werden die korrekten datensätze der db ausgegeben.

              Was heißt den 'hart beendet'?
              habe es jetzt mal mit exit(); nach header beendet. Hat das Problem jedoch nicht gelöst....

              Kommentar


              • #8
                HTML-Code:
                 <form id="login" method="post" action="index.php">
                
                    <input class="log_input" type="text" placeholder="Username" name="nickname" value="" />
                    <input class="log_input" type="password" placeholder="Passwort" name="pw" value="" />
                    <input type="hidden" name="action" value="login" />
                    <input class="log_submit" type="submit" value="Login" name="login" />
                
                 </form>
                PHP-Code:

                function getUserByNickname($pdo$nickname) {
                    
                $statement $pdo->prepare("
                        SELECT
                            *
                        FROM
                            user
                        WHERE
                            nickname = :nickname
                    "
                );
                    
                $statement->execute(array(
                        
                'nickname' => $nickname
                    
                ));
                    
                $user $statement->fetch();
                    if(!
                $user) {
                        throw new 
                Exception('User not found');
                    }
                    return 
                $user;
                }

                function 
                login($pdo$nickname$password) {
                    
                $user getUserByNickname($pdo$nickname);
                    if(!
                password_verify($password$user['password'])) {
                        throw new 
                Exception('Invalid password');
                    }
                    return 
                $user;
                }

                session_start();
                $pdo = new PDO('mysql:host=host;dbname=user_db','user','password');

                if(isset(
                $_POST['action']) && $_POST['action'] == 'login')) {
                    try {
                        
                $user login($pdo$_POST['nickname'], $_POST['pw']);
                        
                $_SESSION['userid'] = $user['id'];
                        
                // Was soll das bewirken?
                        // header('user.php');
                    
                }
                    catch(
                Exception $exception) {
                        
                $login_error '<p style="color:white;">Username oder Passwort falsch</p>';
                    }

                Kommentar


                • #9
                  Das header soll bewirken, das wenn der user sich erfolgreich einloggt, er zur geschützten seite weiter geleitet wird.

                  Aber danke für den Lösungsvorschlag

                  Werde das mal ausprobieren.

                  Kommentar

                  Lädt...
                  X