PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Login immer erst beim zweiten Versuch erfolgreich (https://www.php-resource.de/forum/php-developer-forum/106565-login-immer-erst-beim-zweiten-versuch-erfolgreich.html)

Diani 02-04-2019 09:05

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

Kropff 02-04-2019 22:14

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

Gruß
Peter

Diani 03-04-2019 09:18

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

h3ll 03-04-2019 10:45

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.

Diani 04-04-2019 08:47

Zitat:

Zitat von h3ll (Beitrag 675547)
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:

Zitat von h3ll (Beitrag 675547)
- SELECT * sollte nicht verwendet werden.

Ich würde sagen, das ist nur eine Behauptung, das Warum und Wieso inklusive einer Alternative fehlt definitiv.

Zitat:

Zitat von h3ll (Beitrag 675547)
- 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:

Zitat von h3ll (Beitrag 675547)
- 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:

Zitat von h3ll (Beitrag 675547)
- 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:

Zitat von h3ll (Beitrag 675547)
- 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();


h3ll 04-04-2019 10:16

Zitat:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
Meine Güte, was ist denn dann das hier?
PHP-Code:

<?php
include('config.inc.php');
session_start();


Pfusch.

chorn 04-04-2019 10:19

Zitat:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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:

Zitat von Diani (Beitrag 675549)
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.

Diani 04-04-2019 11:50

Zitat:

Zitat von h3ll (Beitrag 675550)
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 (Beitrag 675553)
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

h3ll 04-04-2019 12:20

Zitat:

Zitat von Diani (Beitrag 675554)
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.

chorn 04-04-2019 13:29

Zitat:

Zitat von Diani (Beitrag 675554)
Dazu kann ich nur kommentieren: Oberlehrer

Jo, wenn mehr halt nicht drin ist :rolleyes:

SysOp 04-04-2019 16:40

Zitat:

Zitat von Diani (Beitrag 675554)
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.

Ronaldlk 18-08-2019 14:22

Zitat:
Zitat von h3ll https://www.php-resource.de/forum/im...s/viewpost.gif
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 https://www.php-resource.de/forum/im...s/viewpost.gif
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:01 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG