[PHP & MySQL] Problem mit Login

Raindrops
Hey,

ich habe ein kleines Problem mit meinem Login: Wenn ich mich einlogge, werde ich ja logischerweise auf die Seite "login_action.php" weitergeleitet, von wo ich dann in den LogIn-Bereich geleitet werde. Auf der Seite kommt allerdings diese Fehlermeldung:
Zitat:
Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in /users/zsavenue/www/Login/login_action.php on line 18
Wenn ich aber auf "Weiterleiten" klicke, komme ich auf die nächste Seite, so wie's sein soll.

Der Code sieht momentan so aus [& stammt aus dem Login-TuT hier bei GB]:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
<?php
session_start();
include("datenbank.php");
?>
<html>
<head>
 <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?php
if(!empty($_POST["username"]) && !empty($_POST["password"])) 
{

$username $_POST["username"]; 
$password $_POST["password"]; 

$abfrage mysql_query("SELECT Name, Passwort FROM Turnierrieter WHERE name = '$username' LIMIT 1");
$daten mysql_fetch_array("$abfrage");

if($daten[passw] == $passwort)
    {
    $_SESSION["name"] = $username; 
    echo "Login erfolgreich! <br> <b><a href="http://zsavenue.square7.ch/Login/checkuser.php" target="_self">Weiterleitung</a></b>";
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <br><a href="login.php">Login</a>";
    }
}
else
    {
    echo "Bitte fülle alle Felder aus! <br><a href="login.php">Zurück</a>";
}

?>
</body>
</html>


zum ausprobieren:
klick
Benutzername: Admin
Passwort: Admin

Ich hoffe, dass mir jemand helfen kann (:

LG
kext
Und es heißt auch nicht $daten[passw] sondern $daten['Passwort'], wenn deine Query denn richtig ist.

Ansonsten ist die Query falsch, weil die Feldernamen falsch geschrieben sind. Außerdem schreibt man Feldernamen in Backticks (`).
Raindrops
Vroni, danke, nun wird keine Fehlermeldung mehr angezeigt smile Was nun allerdings noch bleibt: Wenn ich mich jetzt mit den im Starpost angegebenen Daten einloggen möchte, erscheint die Meldung, dass Benutzername bzw. Passwort fehlerhaft seien. Dabei bin ich mir hunderpro sicher, dass ich keine Rechtschreibfehler gemacht habe bei der Eingabe des Benutzernamens und Passwort...
Raindrops
nein, daran liegt's nicht :/ habs grad ausgebessert, dennoch, das Problem bleibt...
Raindrops
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
<?php
session_start();
include("datenbank.php");
?>
<html>
<head>
 <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?php
if(!empty($_POST["username"]) && !empty($_POST["password"])) 
{

$username $_POST["username"]; 
$passwort $_POST["password"]; 

$abfrage mysql_query("SELECT 'name' , 'passw' FROM turnierreiter WHERE 'name' = '$username' LIMIT 1");
$daten mysql_fetch_array ($abfrage);

if($daten['passw'] == $passwort)
    {
    $_SESSION['name'] = $username; 
    echo "Login erfolgreich! <br> <b><a href="http://zsavenue.square7.ch/Login/checkuser.php" target="_self">Weiterleitung</a></b>";
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <br><a href="login.php">Login</a>";
    }
}
else
    {
    echo "Bitte fülle alle Felder aus! <br><a href="login.php">Zurück</a>";
}

?>
</body>
</html>
Kuhmuhphu
heißen deine tabellenfelder wirklich name und passw?

Und heißt deine erste interne Seite checkuser?

Denn checkuser sollst du includen aber nich auf die seite direkt weiter leiten
Raindrops
die Tabellenfelder heißen name & passw Augenzwinkern

oh nein, meine erste interne Seite heißt Start.html also muss ich den checkuser.php in login_action.php includen oder auf der Start.html Seite? verwirrt
Kuhmuhphu
auf der start.html

wobei nenn sie mal lieber statt html php Augenzwinkern

gleich oben vor dem <html> includen
Raindrops
okay, hab's jetzt in Start.php umbenannt & auch direkt includet...das ursprüngliche Problem behebt das allerdings nicht =/
Kuhmuhphu
davon ging ich auch nich aus xDD
Habs nur eben bemerkt Augenzwinkern
Raindrops
achsu großes Grinsen
Kuhmuhphu
ok..
php:
1:
if($daten['passw'] == $passwort)


änder hier mal das t zu einem d
Kuhmuhphu
Zitat:
Original von Vroni
Hat sie doch extra schon angepasst, das stimmt schon so.


stimmt du hast recht.. ich hab die ganze Zeit nur d gesehn..^^
Raindrops
hab mir das jetzt mal mit echo ausgeben lassen. Wenn ich mich jetzt einlogge, sieht das so aus:
Zitat:
Der Username ist korrekt
Das Passwort ist korrekt
Benutzername und/oder Passwort waren falsch.
Login
Oli
Hi,

in MySQL gehören Feldnamen in sogenannte Backticks:
´ oder ` - nicht ' oder "

Die von dir verwendeten einfachen Anführungszeichen stellen Text dar.



Somit rufst du bei dieser Abfrage ...
code:
1:
SELECT 'name' , 'passw' FROM turnierreiter WHERE 'name' = '$username' LIMIT 1
... einen Datensatz ab, bei dem der Text 'name', der selbe Text ist, wie das, was in $username steht.

Du vergleichst also nicht, wie du es wohl vor hattest, $username mit dem Feld `name`. Außerdem vermute ich, dass dir MySQL auch nicht die Felder `name` und `passw` zurückgibt, sondern eben die Texte, da auch hier die falschen Zeichen sind.

LG
kext
` - nicht ´ oder ' oder "

Auf der deutschen Tastatur erzeugt man immer zwei davon auf einmal, wenn man mit gedrückt gehaltener Shift-Taste zweimal die Akzenttaste drückt.
Raindrops
Muss ich jetzt überall wo " oder ' sind die austauschen oder wie wie jetz? verwirrt
Oli
Zitat:
Original von kext
` - nicht ´ oder ' oder "

Auf der deutschen Tastatur erzeugt man immer zwei davon auf einmal, wenn man mit gedrückt gehaltener Shift-Taste zweimal die Akzenttaste drückt.


Danke fürs Korrigieren, du hast natürlich Recht, es funktioniert wirklich nur mit ` . Das Andere wäre auch gar kein Backtick gewesen...

Was das Eingeben anbelangt, ich glaube mich zu erinnern, dass man die Taste einmal betätigen und dann die Leertaste drücken kann, um nur eines dieser Zeichen zu erzeugen. Kann das leider nicht testen, arbeite unter Linux, welches (bei meiner Konfiguration) ohnehin immer nur eines eingibt.



@Raindrops:
Du musst:
  • wenn es sich um Feldnamen (Spalten der Datenbanktabelle) handelt, Backticks ` verwenden
  • wenn es sich um Feldwerte (Inhalt) handelt, einfache Anführungszeichen ' verwenden

Außerdem sollte man auch den Tabellennamen in Backticks schreiben. Der Query sieht korrekt also so aus:
code:
1:
SELECT `name` , `passw` FROM `turnierreiter` WHERE `name` = '$username' LIMIT 1
Raindrops
ahh, danke nun klappt es smile