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:

basti1012

Erfahrenes Mitglied
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) {
 

Ericson

Grünschnabel
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:

basti1012

Erfahrenes Mitglied
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:

Yaslaw

n/a
Moderator
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
 

Jan-Frederik Stieler

Monsterator
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.
 
Zuletzt bearbeitet:

Ericson

Grünschnabel
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:

Ericson

Grünschnabel
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.
 

Ericson

Grünschnabel
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?
 

basti1012

Erfahrenes Mitglied
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
 

basti1012

Erfahrenes Mitglied
Dein Session start kommt eigentlich am anfang des Codes zb so
PHP:
<?php
if(!isset($_SESSION)){
     session_start();
}

und dann weiter mit den anderen code
 

ComFreek

Mod | @comfreek
Moderator
Bitte Code-Tags nutzen, siehe meine Signatur. Außerdem sollte man Passwörter nie im Klartext speichern.
Die komplette Abfrage in ein if zu packen, ist das ok ?
Ja, warum sollte das nicht i. O. sein? :) Ich finde es trotzdem ein bisschen verwirrend.
Dein Session start kommt eigentlich am anfang des Codes zb so
Du kannst session_start() immer aufrufen, kein Grund if(!$_SESSION) zu prüfen.

@Ericson: Man speichert in Datenbanken Passwörter niemals im Klartext. Dazu gibt es Unmengen an Quellen im Internet, warum man das nicht tut. Siehe password_verify und verwandte Funktionen.

ich habe auch mit php 4 angefangen weil mein Anwe Lehrer mir nur unterlagen dazu gegeben hat das hat nochmal in meine Verwirrung reingespielt.
Ich weiß nicht, wofür "Anwe" steht, aber ich würde gehörig fachlichen (!) Abstand von Leuten nehmen, die dir im Jahre 2020 noch PHP4-Zeugs andrehen :)
 

Jan-Frederik Stieler

Monsterator
Moderator
Also bzgl. session_start()
schreib das wirklich als erstes ohne das if. Ich hab deshalb schon mal tierische Probleme gehabt.
Aber grundsätzlich muss man ja sagen dass es gut ist sich Kontrolstrukturen anzugewöhnen .
 

Ericson

Grünschnabel
Dein Session start kommt eigentlich am anfang des Codes zb so
PHP:
<?php
if(!isset($_SESSION)){
     session_start();
}

und dann weiter mit den anderen code
Bitte Code-Tags nutzen, siehe meine Signatur. Außerdem sollte man Passwörter nie im Klartext speichern.

Ja, warum sollte das nicht i. O. sein? :) Ich finde es trotzdem ein bisschen verwirrend.

Du kannst session_start() immer aufrufen, kein Grund if(!$_SESSION) zu prüfen.

@Ericson: Man speichert in Datenbanken Passwörter niemals im Klartext. Dazu gibt es Unmengen an Quellen im Internet, warum man das nicht tut. Siehe password_verify und verwandte Funktionen.


Ich weiß nicht, wofür "Anwe" steht, aber ich würde gehörig fachlichen (!) Abstand von Leuten nehmen, die dir im Jahre 2020 noch PHP4-Zeugs andrehen :)
Das ist mein Anwendungsenwicklungslehrer in meiner Berufsschule...
Ich weiß das mit den Passwörtern ich wollte es einmal zum laufen bringen bevor ich noch mehr Infos falsch verstehe.
 

basti1012

Erfahrenes Mitglied
Ja, warum sollte das nicht i. O. sein? :) Ich finde es trotzdem ein bisschen verwirrend.
Das ist verwirrend und hatte es so noch nicht gesehen deswegen mußte ich das fragen.
Du kannst session_start() immer aufrufen, kein Grund if(!$_SESSION) zu prüfen.
Weiss nicht warum,aber hatte mir das irgendwann mal angewöhnt mit den if weil ich bei irgendein Projekt mal ohne den if Probleme hatte.Wahr aber meine Anfangszeit ,keine Ahnung was da damals schief gelaufen ist
Ich weiß das mit den Passwörtern ich wollte es einmal zum laufen bringen bevor ich noch mehr Infos falsch verstehe.
Ich kann dich verstehen.
Muß aber sagen das es eigentlich nicht gut ist.
Man lernt es erst falsch und lern dann wieder das richtige.
Versuche es lieber gleich richtig zu lernen weil das verwirrt dich nur,gerade bei schweren sachen.
 

Ericson

Grünschnabel
Hi meine Sessions wollen nicht.

ich habe das außerhalb meiner sonstigen Seite getestet und es wir auf der Seite z nur das b ausgegeben und nicht das z.
Code:
<?
session_start()


$_SESSION['e'] = 'z';

?> <!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <a href="z.php">z</a>
</body>
</html>
z.php

Code:
<?
session_start()


    $_SESSION['e'] = $test;
    
 ?>
 <!DOCTYPE html>
 <html>
 <head>
     <title></title>
 </head>
 <body>b
     <? echo "$test" ;?>
 </body>
 </html>
 

Neue Beiträge