Warum funktioniert dieses einfache PHP Script nicht ?
Das Unten stehende Php Script liefert mit immer Sie haben kein gültiges Passwort eingegeben. Was bei den Variabeln ausgegeben wird stimmt immer. Nur irgendwie mag er meine If schleife nicht. Woran kanns liegen ??? Ich bin echt am verzweifeln. Wenn ich im vorgeschalteten html Formular nix eingebe dann heist es Willkommen.
<?php
include 'odbc.php';
$user = $_GET['user'] ;
$passwd = $_GET['passwd'] ;
$query = odbc_exec($odbc, "SELECT username, passwort FROM users where username = '$user' ") or die (odbc_errormsg());
while($row = odbc_fetch_array($query)){
$var1 = " ".$row['username']." ";
$var2 = " ".$row['passwort']." ";
}
if ($var1 == "$user" && $var2 == "$passwd")
{
echo "Willkommen
";
}
else
{
echo "Sie haben kein gültiges Passwort eingegeben
";
}
echo "var1 $var1
";
echo "var2 $var2
";
echo "username $user
";
echo "passwort $passwd
";
odbc_close($odbc);
?>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 8674
Url: https://administrator.de/contentid/8674
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
ist zwar schon lange her mit php, aber vielleicht kann ich meine grauen Zellen noch aktivieren und ein bisschen helfen.
Wie funktioniert die Übergabe der Variablen? Wird alles in einem Script ausgeführt oder lässt du die Benutzerdaten in Script A eingeben und in Script B auswerten?? Das könnte evtl. dann schon ein Fehler sein. Am besten in einem Script übergeben und überprüfen. Zudem würde ich die SQL-Abfrage ändern:
SELECT username, passwort FROM users where username = ... && passwort = ...
Danach kannst du die Abfrage machen
Wenn user = leer => FALSCH, sonst Login
dürfte eigentlich besser sein, wenn mein Hirn sich so früh morgens nicht irrt.
MfG
B.Böcherer
P.S.: So viel ich weiß, kann es öfters Probleme geben bei der Übergabe von Variablen mit GET. Meistens muss man dann mit Cookies oder Sessions arbeiten.
ist zwar schon lange her mit php, aber vielleicht kann ich meine grauen Zellen noch aktivieren und ein bisschen helfen.
Wie funktioniert die Übergabe der Variablen? Wird alles in einem Script ausgeführt oder lässt du die Benutzerdaten in Script A eingeben und in Script B auswerten?? Das könnte evtl. dann schon ein Fehler sein. Am besten in einem Script übergeben und überprüfen. Zudem würde ich die SQL-Abfrage ändern:
SELECT username, passwort FROM users where username = ... && passwort = ...
Danach kannst du die Abfrage machen
Wenn user = leer => FALSCH, sonst Login
dürfte eigentlich besser sein, wenn mein Hirn sich so früh morgens nicht irrt.
MfG
B.Böcherer
P.S.: So viel ich weiß, kann es öfters Probleme geben bei der Übergabe von Variablen mit GET. Meistens muss man dann mit Cookies oder Sessions arbeiten.
include 'odbc.php';
1.) Willst du mit den folg. Anweisungen die Formulardaten in Variablen speichern?
$user = $_GET['user'] ; ???
$passwd = $_GET['passwd'] ; ???
Dann laß dir mal mit der Anweisung : echo $_GET['user'] den Inhalt ausgeben. Ich vermute mal, da kommt nichts.
Wenn der Name der Textfelder in Formular user bzw. passwd ist, dann ist eine explizite Übergabe eh überflüssig, du kannst die Namen der
Textfelder direkt in die Abfrage einfügen, wie du es bereits gemacht hast.(siehe unten)
$query = odbc_exec($odbc, "SELECT username, passwort FROM users where username = '$user' ") or die (odbc_errormsg());
2.) Überprüfe mit : if($query) { echo "Gefunden.";}else { echo "Nichts gefunden.";} ob überhaupt ein Datensatz gefunden wurde.
3.) Da nur ein Datensatz gefunden wird(Benutzernamen sind ja i.d.R. einmalig), ist die while-Schleife unnötig.
while($row = odbc_fetch_array($query)){
$row = odbc_fetch_array($query) würde ausreichen.
4.) Mit den folg. Anweisungen übergibst du an $var1 bzw. an $var2 mit " " ein Leerzeichen, dann den usernamen bzw. das Passwort, und dann mit " " wieder ein Leerzeichen.
$var1 = " ".$row['username']." ";
$var2 = " ".$row['passwort']." ";
Wenn also wenn der Username z.B. 'Peter' ist steht in $var1 ' Peter ' und nicht 'Peter'.
}
5.) Der Spaltenname in $row[Spaltenname] darf nicht in Anführungszeichen stehen.
$var1 = $row[username]; wäre richtig.
6.) Die folg. If-Struktur und die anschl. echo-Anweisungen mußt du dann auch zusammenfassen, du kannst nicht im Else-Zweig
sagen, sie haben kein gültiges usw. eingegeben, und dann dir die Variablen ausgeben lassen.
if ($var1 == "$user" && $var2 == "$passwd")
{
echo "Willkommen";
}else{
echo "Sie haben kein gültiges Passwort eingegeben";
}
echo "var1 $var1";
echo "var2 $var2";
echo "username $user";
echo "passwort $passwd";
odbc_close($odbc);
Benutze statt dessen die Überprüfung unter 2.), etwa in der Form:
if($query) {
$row = odbc_fetch_array($query);
echo "Gefunden.";
echo "Username: $row[username]";
echo "Passwort: $row[passwort]";
}else {
echo "Nichts gefunden.";
}
?>
Ich hoffe, meine Korrekturen waren richtig.
Gruß Günni
1.) Willst du mit den folg. Anweisungen die Formulardaten in Variablen speichern?
$user = $_GET['user'] ; ???
$passwd = $_GET['passwd'] ; ???
Dann laß dir mal mit der Anweisung : echo $_GET['user'] den Inhalt ausgeben. Ich vermute mal, da kommt nichts.
Wenn der Name der Textfelder in Formular user bzw. passwd ist, dann ist eine explizite Übergabe eh überflüssig, du kannst die Namen der
Textfelder direkt in die Abfrage einfügen, wie du es bereits gemacht hast.(siehe unten)
$query = odbc_exec($odbc, "SELECT username, passwort FROM users where username = '$user' ") or die (odbc_errormsg());
2.) Überprüfe mit : if($query) { echo "Gefunden.";}else { echo "Nichts gefunden.";} ob überhaupt ein Datensatz gefunden wurde.
3.) Da nur ein Datensatz gefunden wird(Benutzernamen sind ja i.d.R. einmalig), ist die while-Schleife unnötig.
while($row = odbc_fetch_array($query)){
$row = odbc_fetch_array($query) würde ausreichen.
4.) Mit den folg. Anweisungen übergibst du an $var1 bzw. an $var2 mit " " ein Leerzeichen, dann den usernamen bzw. das Passwort, und dann mit " " wieder ein Leerzeichen.
$var1 = " ".$row['username']." ";
$var2 = " ".$row['passwort']." ";
Wenn also wenn der Username z.B. 'Peter' ist steht in $var1 ' Peter ' und nicht 'Peter'.
}
5.) Der Spaltenname in $row[Spaltenname] darf nicht in Anführungszeichen stehen.
$var1 = $row[username]; wäre richtig.
6.) Die folg. If-Struktur und die anschl. echo-Anweisungen mußt du dann auch zusammenfassen, du kannst nicht im Else-Zweig
sagen, sie haben kein gültiges usw. eingegeben, und dann dir die Variablen ausgeben lassen.
if ($var1 == "$user" && $var2 == "$passwd")
{
echo "Willkommen";
}else{
echo "Sie haben kein gültiges Passwort eingegeben";
}
echo "var1 $var1";
echo "var2 $var2";
echo "username $user";
echo "passwort $passwd";
odbc_close($odbc);
Benutze statt dessen die Überprüfung unter 2.), etwa in der Form:
if($query) {
$row = odbc_fetch_array($query);
echo "Gefunden.";
echo "Username: $row[username]";
echo "Passwort: $row[passwort]";
}else {
echo "Nichts gefunden.";
}
?>
Ich hoffe, meine Korrekturen waren richtig.
Gruß Günni