Login-Probleme

Ericson

Grünschnabel
Hey, ich habe meine Registrierung script ist fertig, beim Login script wird in der URL der SQL error den ich gesetzt habe ausgegeben und ich weiß nicht wich ich das beheben kann.: header("Location:../Inhalt/singin.php?sqlerror"); //this ist what the URL said
Wenn ihr noch ein paar tipps habt immer her damit.


PHP:
<?php
include 'LOGINDATA.php';

//$stmt = $pdo->prepare("DELETE FROM users WHERE id = 1");
//$stmt->execute(array());
if (isset($_POST['loginSUB'])) {
    if ($pdo = new PDO($dsn, $user, $pass)) {
        $UNEM = $_POST['UNEM'];
        $PS = $_POST['PS'];

        if (empty($UNEM) or empty($PS)) {
            echo "empty";
        }
        else {
             $sql = "SELECT * FORM users WHERE username=? OR email=?;";
             $stmt = mysqli_stmt_init($pdo);

            if (!mysqli_stmt_prepare($stmt, $sql)) {
                 header("Location:../Inhalt/singin.php?sqlerror"); //this ist what the URL said
                 exit();
            } 
            else {
                 
                 mysqli_stmt_bind_param($stmt, "ss", $UNEM, $UNEM);
                 msqli_stmt_execute($stmt);
                 
                 $result = mysqli_stmt_result($stmt);

                if ($row = mysqli_fetch_assoc($result)) {
                    $pwdCheck = password_verify($PS, $row['password']);

                    if ($pwdCheck == false) {
                         header("Location:../Inhalt/singin.php?worngpassword");
                         exit();
                    } elseif ($pwdCheck == false) {
                         session_start();

                         $_SESSION['uid'] = $row['id'];
                         $_SESSION['uname'] = $row['username'];
                         
                         header("Location:../index.php?logedin");

                         exit();
                         exit();
                    } 
                    else {
                        header("Location:../Inhalt/singin.php?worngpassword");
                        exit();
                    }
                } 
                else {
                    header("Location:../Inhalt/singin.php?nouser");
                    exit();
                }
            }
        }
        header("Location:../Inhalt/singin.php?nodata");
        exit();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
beim Login script wird in der URL der SQL error den ich gesetzt habe ausgegeben und ich weiß nicht wich ich das beheben kann.:
Verstehe nicht ganz was du meinst.
aber

Man sagt ja doppelt hält besser.
Trifft hier aber nicht zu
Code:
exit();
exit();

Das hier ergibt für mich auch kein sinn
Code:
 if ($pwdCheck == false) {
        header("Location:../Inhalt/singin.php?worngpassword");
        exit();
 } elseif ($pwdCheck == false) {
 
Ich bin das jetzt noch einmal durchgegangen habe das Programm auf das Minimum beschränkt um den Code besser zu verstehen und den Rest in Commands gesteckt das wo ich keinen sinn gesehen habe habe ich gelöscht. Mein Jetziger Fehler ist

12
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\accounts\BACKLOAG\Login.php on line 22

Warning
: PDOStatement::execute() expects parameter 1 to be array, bool given in C:\xampp\htdocs\accounts\BACKLOAG\Login.php on line 24
Fail
Notice: Undefined variable: row in C:\xampp\htdocs\accounts\BACKLOAG\Login.php on line 50

Notice
: Trying to access array offset on value of type null in C:\xampp\htdocs\accounts\BACKLOAG\Login.php on line 50
string

Wenn ich es Richtig verstanden habe ist die Variable nicht richtig der Fehler beschreibt die Zeile:
PHP:
else {
    $STH = $pdo->prepare("SELECT * FORM users WHERE username= :UNEM && password = :pS");
    $STH->execute(array('username' == $UNEM , 'password' == $PS));

    if ($STH->execute('username' == $UNEM)) {
        echo "nice";
    }
    else {
        echo "Fail";
    }
}

Wie muss ich die Variablen setzen damit ich die Werte vergleichen kann. Danke für deine Hilfsbereitschaft.
PHP:
<?php
include 'LOGINDATA.php';

if (isset($_POST['loginSUB'])) {
    if ($pdo = new PDO($dsn, $user, $pass)) {
        $UNEM = $_POST['UNEM'];
        $PS = $_POST['PS'];
        echo "$PS";

        if (empty($UNEM) or empty($PS) ) {
            echo "empty";
        }
        else {
            $STH = $pdo->prepare("SELECT * FORM users WHERE username= :UNEM && password = :pS");
            $STH->execute(array('username' == $UNEM , 'password' == $PS));
            
            if ($STH->execute('username' == $UNEM)) {
                echo "nice";
            }
            else {
                echo "Fail";
            }
        }
         $pwdCheck = password_verify($PS, $row['password']);

        if ($pwdCheck == false) {
            echo "string";
            exit();
        }
        elseif ($pwdCheck == false) {
             session_start();

             $_SESSION['uid'] = $row['id'];
             $_SESSION['uname'] = $row['username'];

            header("Location:../index.php?logedin");

            exit();
            exit();
        }
        else{

        }
    }
}
else {

}
 
Zuletzt bearbeitet von einem Moderator:
ich weiß nicht mehr was ich sagen soll.,
Code:
}
else echo "Fail";
}
und als nächstes formatiere deinen Code mal richtig ( einrücken ) und dann poste den Code mal so wie ich es gerade mache,
PHP:
<?php
    echo " dein Code ";
?>
Neben den smilies sind drei Punkte [ ... ] , klicke darauf und gebe mal deinen Code da rein.
Code der nicht gebraucht wird ( zb den du auskomentiert hast ) kannst du dann auch weg lassen oder richtig rein formatieren.

EDIT:
Und die Hinweiße aus meinen ersten Beitrag hier hast du auch noch nicht behoben( geändert )
 
Zuletzt bearbeitet:
Bitte Code in PHP-Code-Tags setzen, damit das Zeugs auch lesbar wird
Im Eingabeenster auf die ... klicken, dann <>Code auswählen und PHP auswählen
 
Dein session_start(); muss ganz an den Anfang der Seite.
In Zeile 11 hast Du auch ein Anführungszeichenfehler drinnen.
und gewöhn Dir an bei eienr Schreibweise zu bleiben. Du hattest ein klassisches If angefangen und dann Shorthand für das else verwendet.
Und irgendwas stimmt in Deinem Editor mit de nIntends nicht. Normalerweise hat man zwei Leerzeichen oder vier aber nicht drei oder fünf. Oder man verwendet tabs. Aber das finde ich ganz komisch :) .
Bei mir gibts immer vier Spaces bei einem Tab.
 
Zuletzt bearbeitet:
Danke für die Tipps ich habe noch weiter geschaut und nochmal neu angefangen das er Cleaner aussieht. Danke für die Info wie ich den Code ordentlich Formatiere.
Ich habe die einzelnen Schritte abgefragt der Browser zeigt mir alles bis Bind also execute und session nicht. Irgendetwas muss ich komplett falsch verstanden haben.


hier ist mein Neuer code:
Code:
<?php

include 'LOGINDATA.php';

$UNEM = $_POST['UNEM'];


$PS = $_POST['PS'];
echo "$UNEM";
$sth = $pdo->prepare('SELECT email AND password
    FROM users
    WHERE email = :UNEM AND passowrd = :PS');
if ($sth = $pdo->prepare('SELECT email AND password
    FROM users
    WHERE email = :UNEM AND passowrd = :PS')) {
    echo "PRep";
    $sth->bindParam(':UNEM', $UNEM);
$sth->bindParam(':PS', $PS);
if ($sth->bindParam(':PS', $PS)) {
    echo "bind";
    $sth->execute();
if ($sth->execute()) {
    echo "execute";
    session_start();
    if (session_start()) {
        echo "Session";
    }
    }
}
}


?>

Besser so?
 
Zuletzt bearbeitet von einem Moderator:
Dein session_start(); muss ganz an den Anfang der Seite.
In Zeile 11 hast Du auch ein Anführungszeichenfehler drinnen.
und gewöhn Dir an bei eienr Schreibweise zu bleiben. Du hattest ein klassisches If angefangen und dann Shorthand für das else verwendet.
Und irgendwas stimmt in Deinem Editor mit de nIntends nicht. Normalerweise hat man zwei Leerzeichen oder vier aber nicht drei oder fünf. Oder man verwendet tabs. Aber das finde ich ganz komisch :) .
Bei mir gibts immer vier Spaces bei einem Tab.
An den Leerzeichen habe ich wahrscheinlich rumgefuscht. Das mit der schreibweise habe ich weil ich mich vorher bei verschieden Quellen informiert habe. Werde ich nicht mehr machen hat mich offensichtlich nur verwirrt, ich habe auch mit php 4 angefangen weil mein Anwe Lehrer mir nur unterlagen dazu gegeben hat das hat nochmal in meine Verwirrung reingespielt.
 
Dein session_start(); muss ganz an den Anfang der Seite.
In Zeile 11 hast Du auch ein Anführungszeichenfehler drinnen.
und gewöhn Dir an bei eienr Schreibweise zu bleiben. Du hattest ein klassisches If angefangen und dann Shorthand für das else verwendet.
Und irgendwas stimmt in Deinem Editor mit de nIntends nicht. Normalerweise hat man zwei Leerzeichen oder vier aber nicht drei oder fünf. Oder man verwendet tabs. Aber das finde ich ganz komisch :) .
Bei mir gibts immer vier Spaces bei einem Tab.

Ich Lies mir Gleich nochmal genau durch wie das mit den Sessions läuft. Offensichtlich habe ich das auch falsch verstanden. Aber Weißt du Warum execute beim neuen Code nicht ausgegeben wird?
 
Ich muss da jetzt auch mal nee Frage reinhauen die mir hoffentlich einer von den Php Profis erklären kann.
Was der TE da macht
PHP:
if ($sth = $pdo->prepare('SELECT email AND password
    FROM users
    WHERE email = :UNEM AND passowrd = :PS')) {

Die komplette Abfrage in ein if zu packen, ist das ok ?
Habe das so auch noch nie gesehen
 
Zurück