Login immer erst beim zweiten Versuch erfolgreich

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

  • Login immer erst beim zweiten Versuch erfolgreich

    Hallo zusammen,


    folgende Loginseite dient zum Login in ein Portal. Problem ist allerdings, dass ich jedesmal Benutzernamen und Passwort zweimal eingeben muss um erfolgreich einzuloggen. Beim ersten Mal passiert gar nichts, erst beim zweiten Versuch klappt der Login. Das gilt für jeden der User.



    PHP-Code:
    <?phpinclude('config.inc.php');
    session_start();
    $pdo = new PDO("mysql:host=$db_server;dbname=$db_dbname", $db_dbuser, $db_dbpasswd);

    if(isset($_GET['login'])) {
        $login = mysqli_real_escape_string($con, $_POST['login']);
        $passwort = mysqli_real_escape_string($con, $_POST['passwort']);

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

        if ($user !== false && password_verify($passwort, $user['passwort'])) {
            $_SESSION['userid'] = $user['uid'];
            if ($_SESSION['userid'] == 8) {
                header("Location: http://www.clouds.sisterjud.de/createUser.php");
                include ('loginTime.php');
            } else {
                header("Location: http://www.clouds.sisterjud.de/costumers.php");
                include ('loginTime.php');
            }
        } else {
            echo "<div class=\"alert alert-danger\" role=\"alert\">";
            echo "<b>Der Login oder das Passwort war falsch! </b>";
            echo "</div>";
        }

    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Login</title>

        <meta name="generator" content="Bluefish 2.2.9" >
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
        <meta name="viewport" content=
                "width=device-width, initial-scale=1.0">
        <title>Kundenportal</title>

        <link href="css/bootstrap.css"
              rel="stylesheet">

        <link href=
                      "bootstrap/addons/bootstrap/jquery.smartmenus.bootstrap.css" rel=
                      "stylesheet">

        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

        <link href=
                      "https://fonts.googleapis.com/icon?family=Material+Icons" rel=
                      "stylesheet">
    </head>
    <body style="padding-top:20px;">
    <div class="row backgroundimg2">
    <div class="container">
        <div class="container">
            <!-- Beispiel-Zeile von Spalten -->
            <div class="row">
                <div class="col-md-12">
                    <img src="img/sisterjud.png" width="1000" height="250" alt="">
                </div>
            </div>
            <div class="row">
                <div class="col-md-3">
                    <br><br>
                </div>
                <div class="col-md-6">
                    <form action="?login=1" method="post">
                        <div class="form-group">
                            <label class="custom-control-label">Ihr Loginname</label><br>
                            <input type="login" autofocus autocomplete="on" size="40" maxlength="250" name="login"><br><br>
                        </div>

                        <div class="form-group">
                            <label class="custom-control-label">Ihr Passwort</label><br>
                            <input type="password" size="40"  maxlength="250" name="passwort"><br><br>
                        </div>
                        <input class="btn btn-info" type="submit" value="Einloggen">
                    </form>
                </div>
                <div class="col-md-3">
                    <br><br>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <br><br>
                </div>
            </div>
            <hr>
            <footer>
                <div style="text-align: center;">
                    © Example 2019
                </div>
                </p>
            </footer>
        </div><!-- /Content container -->
    </div>
    </div>

    <script src="https://code.jquery.com/jquery-1.11.3.min.js">
    </script>
    <script src="js/bootstrap.min.js"> </script>


    <script type="text/javascript" src="js/jquery.smartmenus.js">
    </script>



    <script type="text/javascript" src=
            "bootstrap/addons/bootstrap/jquery.smartmenus.bootstrap.js">
    </script>
    </body>
    </html>

    Könnt ihr mir sagen, was die Ursache ist und wie ich das Verhalten auf beim ersten Versuch einstellen kann?


    Vielen Dank

    Diani

  • #2
    Prüf zuerst auf $_SESSION['userid'] und dann läuft erst der Rest ab if(isset($_GET['login'])) durch.

    Gruß
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hallo Peter,

      kannst mir bitte sagen, warum sich der Login so verhält? Ich möchte das gerne verstehen. Denn wenn ich jetzt die Prüfung auf die SESSION-ID wie bei allen anderen PHP-Dateien einbaue, dann funktioniert die Seite gar nicht mehr.

      PHP-Code:
      <?php
      include('config.inc.php');
      session_start();
      if(!isset(
      $_SESSION['userid'])) {
          
      header("Location: http://www.clouds.sisterjud.de//login.php");
      }
      $pdo = new PDO("mysql:host=$db_server;dbname=$db_dbname"$db_dbuser$db_dbpasswd);

      if(isset(
      $_GET['login'])) {
          
      $login mysqli_real_escape_string($con$_POST['login']);
          
      $passwort mysqli_real_escape_string($con$_POST['passwort']);

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

          
      //Überprüfung des Passworts
          
      if ($user !== false && password_verify($passwort$user['passwort'])) {
              
      $_SESSION['userid'] = $user['uid'];
              if (
      $_SESSION['userid'] == 8) {
                  
      header("Location: http://www.clouds.sisterjud.de//createUser.php");
                  include (
      'loginTime.php');
              } else {
                  
      header("Location: http://www.clouds.sisterjud.de//costumers.php");
                  include (
      'loginTime.php');
              }
          } else {
              echo 
      "<div class=\"alert alert-danger\" role=\"alert\">";
              echo 
      "<b>Der Login oder das Passwort war falsch! </b>";
              echo 
      "</div>";
          }

      }
      ?>
      Grüße


      Diani

      Kommentar


      • #4
        Der ganze Code ergibt recht wenig Sinn.

        - Die mysqli_real_escape_string() machen deine Daten kaputt.
        - SELECT * sollte nicht verwendet werden.
        - Im Code sollten niemals irgendwelche IDs wie 8 vorkommen. IDs haben keine Bedeutung, somit ist deren Wert irrelevant.
        - Du hältst das EVA-Prinzip nicht ein. Machst HTML-Ausgaben vor dem Header-Bereich.
        - Sprachenmischmasch: User, Passwort, Login, usw. Was jetzt? Englisch oder Deutsch? Du solltest dich für eines entscheiden.
        - Variablen wie $db_server sollten nicht durch ein include wie durch Zaubererei erscheinen. Wenn du Config-Werte brauchst, lade sie aus einer Config-Daten und lass den Unsinn mit den magischen Variablen.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Der ganze Code ergibt recht wenig Sinn.

          - Die mysqli_real_escape_string() machen deine Daten kaputt.
          Okay warum? Lasse ich das hier aus, mault irgendeiner, er schaue das erst gar nicht an, weil zu viele CrossSiteScripting-Möglickeiten.
          Zitat von h3ll Beitrag anzeigen
          - SELECT * sollte nicht verwendet werden.
          Ich würde sagen, das ist nur eine Behauptung, das Warum und Wieso inklusive einer Alternative fehlt definitiv.

          Zitat von h3ll Beitrag anzeigen
          - Im Code sollten niemals irgendwelche IDs wie 8 vorkommen. IDs haben keine Bedeutung, somit ist deren Wert irrelevant.
          Warum sollten denn niemals IDs wie 8 vorkommen? Was passiert denn, wenn das dennoch der Fall ist?

          Zitat von h3ll Beitrag anzeigen
          - Du hältst das EVA-Prinzip nicht ein. Machst HTML-Ausgaben vor dem Header-Bereich.
          Dann erkläre mir doch bitte beispielhaft das EVA-Prinzip, so dass ich die Unterschiede erkennen kann. Was ist denn so schlimm, sich nicht an die EVA zu halten?

          Zitat von h3ll Beitrag anzeigen
          - Sprachenmischmasch: User, Passwort, Login, usw. Was jetzt? Englisch oder Deutsch? Du solltest dich für eines entscheiden.
          Warum stört Dich das? Das darf doch jeder Mensch halten wie sie/er es will.

          Zitat von h3ll Beitrag anzeigen
          - Variablen wie $db_server sollten nicht durch ein include wie durch Zaubererei erscheinen. Wenn du Config-Werte brauchst, lade sie aus einer Config-Daten und lass den Unsinn mit den magischen Variablen.
          Meine Güte, was ist denn dann das hier?
          PHP-Code:
          <?php
          include('config.inc.php');
          session_start();

          Kommentar


          • #6
            Zitat von Diani Beitrag anzeigen
            Okay warum? Lasse ich das hier aus, mault irgendeiner, er schaue das erst gar nicht an, weil zu viele CrossSiteScripting-Möglickeiten.
            Du solltest verstehen was du tust und nicht blind irgendwelche Funktionen verstreuen, weil du irgendwo irgendwas mal gelesen hast.

            mysqli_real_escape_string() sollte dort verwendet werden, wo es erforderlich ist und sonst nirgendwo. Und zwar überall dort, wo Werte in SQL-Code eingefügt werden. Das machst du hier aber nicht.

            Zitat von Diani Beitrag anzeigen
            Ich würde sagen, das ist nur eine Behauptung, das Warum und Wieso inklusive einer Alternative fehlt definitiv.
            Ich habe das hier im Forum schon mindesten 50mal erklärt. Du kannst gerne die Suchfunktion verwenden.

            Und Alternative: Gib im SELECT immer alle Spalten an, die du im Ergebnis erwartest.

            Zitat von Diani Beitrag anzeigen
            Warum sollten denn niemals IDs wie 8 vorkommen? Was passiert denn, wenn das dennoch der Fall ist?
            Der Code wird schwer nachvollziehbar. Außerdem wird dadurch der Code an einen gewissen Datenstand gekoppelt. Code und Daten sollten aber getrennt sein. IDs haben deshalb in einem Code nichts verloren.

            Zitat von Diani Beitrag anzeigen
            Dann erkläre mir doch bitte beispielhaft das EVA-Prinzip, so dass ich die Unterschiede erkennen kann. Was ist denn so schlimm, sich nicht an die EVA zu halten?
            Ist hier im Forum auch schon zigmal diskutiert worden. Man braucht nicht jedes Thema 100mal neu aufkochen. In deinem Fall ist das Ergebnis ein kaputter HTML-Code. Und frag jetzt bitte nicht danach, was an kaputtem HTML-Code "so schlimm" ist. Dein Ziel sollte sein etwas nicht kaputtes herzustellen. Ansonsten hast du dir irgendwie das falsche Hobby ausgesucht.

            Zitat von Diani Beitrag anzeigen
            Warum stört Dich das? Das darf doch jeder Mensch halten wie sie/er es will.
            Macht Code schwerer lesbar und verständlich. Was du für dich alleine machst ist deine Sache. Aber sobald andere Leute mit dem Code arbeiten müssen, also du ihn zB. in einem Forum postest, sollten gewisse Grundregeln eingehalten werden. Das bist du den anderen schuldig.

            Zitat von Diani Beitrag anzeigen
            Meine Güte, was ist denn dann das hier?
            PHP-Code:
            <?php
            include('config.inc.php');
            session_start();
            Pfusch.

            Kommentar


            • #7
              Zitat von Diani Beitrag anzeigen
              Okay warum? Lasse ich das hier aus, mault irgendeiner, er schaue das erst gar nicht an, weil zu viele CrossSiteScripting-Möglickeiten.
              Mit Prepared Statements ist das absolut unnötig, völlig falscher Kontext. Ausserdem, was soll password_verify denn mit einem mysqli_real_escape_string anfangen? Du benutzt das an der falschen Stelle.

              XSS? Hast du dir überhaupt angeguckt was das ist? Völlig anderes Thema, da geht es um die Aus- und nicht die Eingabe.

              Zitat von Diani Beitrag anzeigen
              Ich würde sagen, das ist nur eine Behauptung, das Warum und Wieso inklusive einer Alternative fehlt definitiv.
              Deine Behauptung ist auch nur eine Behauptung. Gibt hundert Seiten die das ganz einfach erklären.

              https://php-de.github.io/jumpto/code-smells/#select-all

              Zitat von Diani Beitrag anzeigen
              Warum sollten denn niemals IDs wie 8 vorkommen? Was passiert denn, wenn das dennoch der Fall ist?
              Findest du halt nie wieder. Schlecht, also gar nicht, zu konfigurieren, unübersichtlich, schlecht testbar

              https://en.wikipedia.org/wiki/Magic_...ical_constants

              Zitat von Diani Beitrag anzeigen
              Dann erkläre mir doch bitte beispielhaft das EVA-Prinzip, so dass ich die Unterschiede erkennen kann. Was ist denn so schlimm, sich nicht an die EVA zu halten?
              Warum machst du das nicht mal selber? Warum soll das jemand für deine persönlichen Bedürfnisse machen, anstatt dass du einfach mal guckst was das ist, lernst und ggf. konkrete Fragen stellst falls Probleme auftauchen?

              Zitat von Diani Beitrag anzeigen
              Warum stört Dich das? Das darf doch jeder Mensch halten wie sie/er es will.
              Ja verstehe, das ist hier 'ne Individualleistung, wir sollen uns hier deinen Vorlieben anpassen. Tipp: ausser deinem Interpreter will das dann aber keiner lesen.

              Kommentar


              • #8
                Zitat von h3ll Beitrag anzeigen
                Du solltest verstehen was du tust und nicht blind irgendwelche Funktionen verstreuen, weil du irgendwo irgendwas mal gelesen hast.

                mysqli_real_escape_string() sollte dort verwendet werden, wo es erforderlich ist und sonst nirgendwo. Und zwar überall dort, wo Werte in SQL-Code eingefügt werden. Das machst du hier aber nicht.



                Ich habe das hier im Forum schon mindesten 50mal erklärt. Du kannst gerne die Suchfunktion verwenden.

                Und Alternative: Gib im SELECT immer alle Spalten an, die du im Ergebnis erwartest.



                Der Code wird schwer nachvollziehbar. Außerdem wird dadurch der Code an einen gewissen Datenstand gekoppelt. Code und Daten sollten aber getrennt sein. IDs haben deshalb in einem Code nichts verloren.



                Ist hier im Forum auch schon zigmal diskutiert worden. Man braucht nicht jedes Thema 100mal neu aufkochen. In deinem Fall ist das Ergebnis ein kaputter HTML-Code. Und frag jetzt bitte nicht danach, was an kaputtem HTML-Code "so schlimm" ist. Dein Ziel sollte sein etwas nicht kaputtes herzustellen. Ansonsten hast du dir irgendwie das falsche Hobby ausgesucht.



                Macht Code schwerer lesbar und verständlich. Was du für dich alleine machst ist deine Sache. Aber sobald andere Leute mit dem Code arbeiten müssen, also du ihn zB. in einem Forum postest, sollten gewisse Grundregeln eingehalten werden. Das bist du den anderen schuldig.



                Pfusch.



                Zitat von chorn Beitrag anzeigen
                Mit Prepared Statements ist das absolut unnötig, völlig falscher Kontext. Ausserdem, was soll password_verify denn mit einem mysqli_real_escape_string anfangen? Du benutzt das an der falschen Stelle.

                XSS? Hast du dir überhaupt angeguckt was das ist? Völlig anderes Thema, da geht es um die Aus- und nicht die Eingabe.



                Deine Behauptung ist auch nur eine Behauptung. Gibt hundert Seiten die das ganz einfach erklären.

                https://php-de.github.io/jumpto/code-smells/#select-all



                Findest du halt nie wieder. Schlecht, also gar nicht, zu konfigurieren, unübersichtlich, schlecht testbar

                https://en.wikipedia.org/wiki/Magic_...ical_constants



                Warum machst du das nicht mal selber? Warum soll das jemand für deine persönlichen Bedürfnisse machen, anstatt dass du einfach mal guckst was das ist, lernst und ggf. konkrete Fragen stellst falls Probleme auftauchen?



                Ja verstehe, das ist hier 'ne Individualleistung, wir sollen uns hier deinen Vorlieben anpassen. Tipp: ausser deinem Interpreter will das dann aber keiner lesen.

                Dazu kann ich nur kommentieren: Oberlehrer
                Zuletzt geändert von Diani; 04.04.2019, 11:53.

                Kommentar


                • #9
                  Zitat von Diani Beitrag anzeigen
                  Dazu kann ich nur kommentieren: Oberlehrer
                  Anstatt dass du deine Fehler einsiehst, kommt nur so eine trotzige Kleinkindreaktion. Naja, wenn du eh nicht Programmieren lernen willst, bist du in einem PHP-Forum falsch.

                  Kommentar


                  • #10
                    Zitat von Diani Beitrag anzeigen
                    Dazu kann ich nur kommentieren: Oberlehrer
                    Jo, wenn mehr halt nicht drin ist

                    Kommentar


                    • #11
                      Zitat von Diani Beitrag anzeigen
                      Dazu kann ich nur kommentieren: Oberlehrer
                      Du wolltest Antworten oder verstehe ich deine Frage falsch? Du lehnst Strukturen ab und fragst dann, wieso dein Code nicht funktioniert?

                      Mach wie dir gesagt wurde und du wirst sehen, es stellen sie 2 Erfolge ein.

                      1. dein Code funktioniert
                      2. sollte er nicht funktionieren, findest du den Fehler schnell selber.

                      Ein include nach einem header ist übrigens sinnlos, da du bereits weitergeleitet wurdest und es zum include nicht mehr kommt.


                      Select * kann sinnvoll sein, muss es aber nicht, der Unterschied entsteht, wenn man weiss, was man tut bzw. diese Möglichkeit gezielt einsetzt, das tust du aber offenbar aber beides noch nicht.
                      Folglich lerne zunächst, wie man es richtig macht und spiele dann mit deinem Wissen und nicht umgekehrt.

                      Würdest du alles richtig machen, wäre deine Frage zum Code obsolete und du würdest Fragen beantworten und nicht raten, was bei dir schief geht.

                      Mein Tip an dich ist: Wirf den Quatsch oben weg und mach den Code neu, so viel ist das nicht. In diesem Sinn viel Erfolg beim beheben deiner Fehler.

                      Kommentar


                      • #12
                        Zitat:
                        Zitat von h3ll
                        Du solltest verstehen was du tust und nicht blind irgendwelche Funktionen verstreuen, weil du irgendwo irgendwas mal gelesen hast.

                        mysqli_real_escape_string() sollte dort verwendet werden, wo es erforderlich ist und sonst nirgendwo. Und zwar überall dort, wo Werte in SQL-Code eingefügt werden. Das machst du hier aber nicht.



                        Ich habe das hier im Forum schon mindesten 50mal erklärt. Du kannst gerne die Suchfunktion verwenden.

                        Und Alternative: Gib im SELECT immer alle Spalten an, die du im Ergebnis erwartest.



                        Der Code wird schwer nachvollziehbar. Außerdem wird dadurch der Code an einen gewissen Datenstand gekoppelt. Code und Daten sollten aber getrennt sein. IDs haben deshalb in einem Code nichts verloren.



                        Ist hier im Forum auch schon zigmal diskutiert worden. Man braucht nicht jedes Thema 100mal neu aufkochen. In deinem Fall ist das Ergebnis ein kaputter HTML-Code. Und frag jetzt bitte nicht danach, was an kaputtem HTML-Code "so schlimm" ist. Dein Ziel sollte sein etwas nicht kaputtes herzustellen. Ansonsten hast du dir irgendwie das falsche Hobby ausgesucht.



                        Macht Code schwerer lesbar und verständlich. Was du für dich alleine machst ist deine Sache. Aber sobald andere Leute mit dem Code arbeiten müssen, also du ihn zB. in einem Forum postest, sollten gewisse Grundregeln eingehalten werden. Das bist du den anderen schuldig.



                        Pfusch.





                        Zitat:
                        Zitat von chorn
                        Mit Prepared Statements ist das absolut unnötig, völlig falscher Kontext. Ausserdem, was soll password_verify denn mit einem mysqli_real_escape_string anfangen? Du benutzt das an der falschen Stelle.

                        XSS? Hast du dir überhaupt angeguckt was das ist? Völlig anderes Thema, da geht es um die Aus- und nicht die Eingabe.



                        Deine Behauptung ist auch nur eine Behauptung. Gibt hundert Seiten die das ganz einfach erklärenc

                        https://php-de.github.io/jumpto/code-smells/#select-all
                        192.168.0.1


                        Findest du halt nie wieder. Schlecht, also gar nicht, zu konfigurieren, unübersichtlich, schlecht testbar

                        https://en.wikipedia.org/wiki/Magic_...ical_constants



                        Warum machst du das nicht mal selber? Warum soll das jemand für deine persönlichen Bedürfnisse machen, anstatt dass du einfach mal guckst was das ist, lernst und ggf. konkrete Fragen stellst falls Probleme auftauchen?



                        Ja verstehe, das ist hier 'ne Individualleistung, wir sollen uns hier deinen Vorlieben anpassen. Tipp: ausser deinem Interpreter will das dann aber keiner lesen.



                        Dazu kann ich nur kommentieren: Oberlehrer

                        Vielen Dank für die nützlichen Informationen

                        Kommentar

                        Lädt...
                        X