[PHP & MySQL] Login-Problem.

Yellow
Hey,
Ich habe ein Login erstellt jedoch funktioniert es nicht was mich wundert weil es bei anderen Projekten genauso ohne Probleme klappt...

Fehlermeldung:
code:
1:
2:
3:
4:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /srv/www/web306/html/Lavinia/login.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web306/html/Lavinia/login.php:16) in /srv/www/web306/html/Lavinia/login.php on line 31


login.php
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:
<?php 
// Session starten
session_start ();

include("db.php");

$sql "SELECT ". 
    "id, name". 
  "FROM ". 
    "mitglieder ". 
  "WHERE ". 
    "(name like '".$_REQUEST["name"]."') AND ". 
    "(passwort = '".md5 ($_REQUEST["pwd"])."')"$result mysql_query ($sql); 

if (mysql_num_rows ($result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data mysql_fetch_array ($result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["id"]; 
  $_SESSION["user_name"] = $data["name"]; 

  
  header("Location: index.php?section=intern"); 
  ob_end_flush ();  
} 
else 
{ 
  header("Location: index.php?section=error"); 
  ob_end_flush (); 
} 
?> 


ich hoffen ihr könnt helfen :S

lg
cll
supplied argument is not a valid MySQL result resource
heißt dass deine Abfrage nicht stimmt! Nimm mal die ganzen "." raus, die bringen GAR NICHTS! Dann fällt dir auch auf, dass hinter den Spaltennamen ein Leerzeichen fehlt Augenzwinkern
Yellow
Versteh jetzt nicht genau wie du das meinst? :S
cll
$sql = "SELECT ".
"id, name".
"FROM ".
"mitglieder ".
"WHERE ".
"(name like '".$_REQUEST["name"]."') AND ".
"(passwort = '".md5 ($_REQUEST["pwd"])."')";

sollte so aussehen:
$sql = "SELECT id, name FROM mitglieder WHERE (name like '".$_REQUEST["name"]."') AND (passwort = '".md5 ($_REQUEST["pwd"])."')";
Yellow
Ahso okay, danke, hab das jetzt gemacht, aber bleibt noch immer die gleiche fehlermeldung :S
cll
$sql = "SELECT id, name FROM mitglieder WHERE name='".$_REQUEST["name"]."' AND passwort = '".md5($_REQUEST["pwd"])."'";

(klammern weglassen)

prüf mal, ob die Spalten id, name und passwort existieren!
heißen deine Formularfelder wirklich name und pwd?
Yellow
danke jetzt klappt es smile also es wird richtig angezeigt alles aber trotzdem kann ich mich noch immer nicht einloggen :S kommt immer die meldung als hätte ich falsches pw & name ... :S
cll
ich weiß nicht wie es bei fetch_array aussehen sollte. Ersetz mal mysql_fetch_array einfach durch mysql_fetch_assoc
Den Rest gleich lassen!
Yellow
kommt dann noch immer meine error mitteilung anstatt dass ich ins interne komme ...

& hab jetzt sogar noch extra einen neuen test account erstellt und klappt noch immer nicht...
cll
Log dich mal in dein phpmyadmin ein und geb es dort über der Tabelle bei MYSQL ein. Da kriegst du eine genauere Fehlermeldung

SELECT id, name FROM mitglieder WHERE name='irgendwas' AND passwort = 'md5(test)'
Yellow
der zeigt mir dann folgendes an:

code:
1:
MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 0.0003 sek. )
cll
dann sollte es eigentlich auch von deinem PHP-Skript aus funktionieren.
Yellow
ja aber ich bekomm aber halt immer die meldung dass pw & name nicht stimmen würden und werde nie ins internebereich weitergeleitet.
cll
dann hast du es nicht korrekt geschrieben! Auch großschreiben ist bei md5 sehr wichtig!
Yellow
doch hab ich, habs genau so gemacht wie vorhin in mysql...
cll
dann stell mal die If-Abfrage rein
Yellow
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
if (mysql_num_rows ($result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data mysql_fetch_assoc ($result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["id"]; 
  $_SESSION["user_name"] = $data["name"]; 

  
  header("Location: index.php?section=intern"); 
  ob_end_flush ();  
} 
else 
{ 
  header("Location: index.php?section=error"); 
  ob_end_flush (); 
}
cll
ach stimmt ja, du prüfst nur obs eins mit der Kombination gibt. Ich rufe immer das Passwort von dem Namen ab. Dann kann man
1) prüfen ob der User existiert
2) ob das Passwort gleich ist
1Sm!le
Zitat:
Original von Yellow
der zeigt mir dann folgendes an:

code:
1:
MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 0.0003 sek. )

Das Bedeutet, mySQL meint, die Name-Passwort-Kombination existiere nicht. Dass du dann nicht in den Bereich kommst, ist nur konsequent. Dein Fehler muss also vorher passieren.