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

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
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?
Kuhmuhphu
auf der start.html
wobei nenn sie mal lieber statt html php
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
Raindrops
achsu
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?
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