mysql_num_rows sowie header problem.

Exilas-mer

Member
7 September 2008
17
0
Ich versuch grad ein kleines LoginScript mit PHP/Mysql zu schreiben(bin ein totaler Newbie) und hab folgende 2 Probleme gekriegt:

Warning: mysql_num_rows() expects parameter 1 to be resource, null given in C:\xampplite\htdocs\login.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\login.php:14) in C:\xampplite\htdocs\login.php on line 28

Was die Meldungen bedeuten ist mir ja halbwegs klar, nur wie ich das ganze richtig hinkriege nicht :D

PHP:
<?php
	session_start ();
	$connectionid = mysql_connect ("localhost", "admin", "79850405");  
	if (!mysql_select_db ("user", $connectionid))  {  
		die ("Keine Verbindung zur Datenbank");  
	}  
	 $sql = "SELECT ".  
		"ID, Username, Password ".  
		"FROM ".  
			"User ".  
		"WHERE ".  
			"(Username like '".$_REQUEST["Username"]."') AND ".  
			"(Kennwort = '".$_REQUEST["Password"]."')";
	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_username"] = $data["Username"];  
		$_SESSION["user_password"] = $data["Password"];  

		header ("Location: intern.php");  
	}  
	else  
	{  
		header ("Location: formular.php?fehler=1");  
	}  
?>


Mfg
 
Du hast in $sql nur einen String (Text) stehen und in der nächsten Zeile willst du $result auswerten. Dazwischen fehlt noch
PHP:
$result = mysql_query($sql);
Das schickt deinen Befehl an den MySQL-Server und gibt eine weiterverwertbare Rückgabe.

Der zweite Fehler bedeutet, dass du irgendwo einen HTTP-Header mit der Funktion header() schicken willst. Das geht aber nur solange noch keine Ausgabe an den Browser stattgefunden hat.
Und weil eben in Zeile 14 schon die Fehlermeldung generiert wurde, kann in Zeile 28 der HTTP-Header nicht mehr geschickt werden.

Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\login.php:14) in C:\xampplite\htdocs\login.php on line 28
 
Du fragst in der if Abfrage mysql_num_rows ($result) ab jedoch ist $result gar nicht definiert. Die SQL Abfrage hast du in $sql gespeichert, lässt sie aber den Server gar nicht ausführen -> nach $sql = '...' folgendes ergänzen

PHP:
$result = mysql_query( $sql );

Wegen dem headers already sent, das liegt an dem Warning in Zeile 14 zuvor.

PS: User Eingaben sind immer böse, deswegen validieren und maskieren (mysql_real_escape_string), um sich zu schützen ;)

€dit: wahnsinn war schneller :)
 
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /users/phpchatueben/www/login.php on line 15


das ganze funktioniert also immernoch nicht:(
 
Fehlermeldung gelesen? Verstanden? Dann einfach den falschen Parameter ersetzen.
 
Oh mein Fehler ^^. Musst natürlich auch noch die Verbindung angeben :)

PHP:
 $result = mysql_query( $sql , $connectionid );
 
mysql_num_rows() erwartet als ersten Parameter eine Resource (logisch, geht ja um ein MySQL-Resultset). Du hast aber einen boolschen Wert übergeben.
(Konsequenz: wenn du einen zweiten Parameter zusätzlich angibst, wird der erste deswegen auch nicht richtiger)
 
PHP:
<?php
	session_start ();
	$connectionid = mysql_connect ("localhost", "admin", "79850405");  
	if (!mysql_select_db ("user", $connectionid))  {  
		die ("Keine Verbindung zur Datenbank");  
	}  
	 $sql = "SELECT ID, Username, Password FROM `User`  
		WHERE (Username like '".$_REQUEST["Username"]."') AND (Kennwort = '".$_REQUEST["Password"]."')";

      $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_username"] = $data["Username"];  
		$_SESSION["user_password"] = $data["Password"];  

		header ("Location: intern.php");  
	}  
	else  header ("Location: formular.php?fehler=1");  
	
?>

Versuchs mal ;-)
PS: Nur sollteste das
(Username like '".$_REQUEST["Username"]."')
ersetzen und auch mit = machen nicht like?!
 
Ich will dich ja nicht schockieren oder so, aber ich krieg immernoch die exakt gleiche Fehlermeldung:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /users/phpchatueben/www/login.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /users/phpchatueben/www/login.php:11) in /users/phpchatueben/www/login.php on line 23
 
schreib doch mal nach dem
PHP:
$result=mysql_query($sql);
ein
PHP:
echo mysql_error();

da wirste sehen wo der Fehler genau drin liegt ;-)
 
Mir fällt beim überfliegen nur auf, dass der Query total komisch aussieht.

PHP:
SELECT ".  
        "ID, Username, Password ".  
        "FROM ".  
            "User ".  
        "WHERE ".  
            "(Username like '".$_REQUEST["Username"]."') AND ".  
            "(Kennwort = '".$_REQUEST["Password"]."')";

Stimmen die Bezeichnungen überhaupt? Läuft der Query im SQL Fenster der DB?
Ich würde 5 Euro verwetten, dass du die Felder falsch ansprichst.

(Oben Password, unten Kennwort - sieht sehr falsch aus.)
 
Mir fällt beim überfliegen nur auf, dass der Query total komisch aussieht.

PHP:
SELECT ".  
        "ID, Username, Password ".  
        "FROM ".  
            "User ".  
        "WHERE ".  
            "(Username like '".$_REQUEST["Username"]."') AND ".  
            "(Kennwort = '".$_REQUEST["Password"]."')";

Stimmen die Bezeichnungen überhaupt? Läuft der Query im SQL Fenster der DB?
Ich würde 5 Euro verwetten, dass du die Felder falsch ansprichst.

(Oben Password, unten Kennwort - sieht sehr falsch aus.)

In der Tat das Kennwort war falsch, sowie auch das if (!mysql_select_db ("user", $connectionid) ergab den Fehler die Datenbank user.user wurde nicht gefunden, ohne das user im mysql_select_db krieg ich einfach noch folgende fehlermeldung:

Warning: mysql_select_db() expects parameter 1 to be string, resource given in /users/phpchatueben/www/login.php on line 4

Was die bedeutet ist mir ja schon klar(wurde ähnlich bereits oben besproche, nur wie ich das ganze lösen soll ist mir unklar)

Übrigens hab ich das Query auch mal so angepasst dass oben und unten beidesmal mit "=" und nicht mit "like" gearbeitet wird.
 
poste doch mal deinen neuen Code und die Fehlermeldung.

Denke auch das es eher am SQL / DB Strucktur liegt.

Der header fehler kommt nur weil vorher schon ein Fehler auftauchte und dieser halt ausgegeben wurde.
 
Erstmal sry für meine sehr späte Antwort. Ich hab das ganze nun so gelöst:

PHP:
session_start ();
	$db = @new mysqli('localhost', 'admin', 'pw', 'db');
	if (mysqli_connect_errno()) {
		die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
	}
	$sql = "SELECT ID, Username, Password FROM `user`  
		WHERE (Username = '".$_REQUEST["Username"]."') AND (Password = '".$_REQUEST["Password"]."')";

Nun frag ich mich wie ich weitervorgehen sollte um die Daten zu überprüfen. Derzeitig stelle ich mir etwas wie folgt vor:

PHP:
if ($Username != "" ()) {
		if ($Password != "" ()) {
			echo "Login erfolgreich"; //Nur ein Beispiel
		}else{
			echo "Password falsch"; //Nur ein Beispiel
		}
	}echo{
		echo "Username falsch"; //Nur ein Beispiel
	}
Gibts da irgendwelche bedenken und kann ich das so überhaupt überprüfen oder gibt es gar eine bessere Methode?

Mfg Exilas-mer

Edit: Ich krieg ne Fehlermeldung dabei:

Parse error: syntax error, unexpected '(' in C:\xampplite\htdocs\login.php on line 9

Was dies bedeutet ist mir ja schon klar, nur warum der da keine "(" erwartet ist mir unklar. Der SQL Query wurde ja mit ";" abgeschlossen :confused
 
1. du musst die Abfrage, also dein $sql doch erst ausführen. mit z.B. $daten = mysql_query($sql); fragst du sozusagen erst die Datenbank ab! Das vorher ist nur der Befehl für die Datenbank. Erst wenn du das gemacht hast kannst du auch auf Daten aus der DB zugreifen.

2. du solltest wissen was dir die Abfrage aus der DB ausgibt. Wenn Entweder Passwort ODER Usernamen nicht in einem Datensatz ind er DB vorhanden sind, dann bekommst du eine "Null-Line" zurück, also keinen Inhalt. Dann kannst du nicht prüfen, ob Passwort oder Username falsch ist! Aber das ist auch nicht gewollt, weil sonst z.B. SkriptKiddies wissen, dass der Username schonmal existiert und sich dann nur noch aufs PW beschränken können.

3. Warum stetzt du ncoh 2 leere Klammern in die if-Abfrage? Die bringen rein garnichts (so weit ich das noch weiß, php is nun gut 2 Jahre her). lass die doch einfach weg. Der Fehler kommt daher, dass er Parser eigentlich noch ein Kommando wie "AND" oder "OR" oder so erwartet, das aber nicht kommt. Also Klammern weg = Fehler weg (hoff ich :ugly:)
 
In der Tat der Fehler ist weg dafür ist nun ein anderer Fehler vorhanden von dem ich absolut keine Ahnung habe :mrgreen:

PHP:
<?php
    session_start ();
    $db = @new mysqli('localhost', 'admin', '***', '****l');
    if (mysqli_connect_errno()) {
        die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
    }
    $daten = mysql_query($sql = "SELECT ID, Username, Password FROM `user`  
        WHERE (Username = '".$_REQUEST["Username"]."') AND (Password = '".$_REQUEST["Password"]."')");
    if ($daten != "") {
        echo "Login erfolgreich"; //Nur ein Beispiel
    }else{
        echo "Password falsch"; //Nur ein Beispiel
    }

?>
Fehlermeldung:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampplite\htdocs\login.php on line 8

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\xampplite\htdocs\login.php on line 8


Zusätzlich erscheint noch die Ausgabe:

Password falsch

Obwohl ich das Password gerade ausnahmsweise geprüft und auch richtig eingegeben habe.(selbstverständlich sind die Daten auch in der DB vorhanden)
 
Zuletzt bearbeitet von einem Moderator:
Probiers mal so:

PHP:
<?php
    session_start ();
    $db = @new mysqli('localhost', 'admin', '***', '****l');
    if (mysqli_connect_errno()) {
        die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
    }
    $daten = mysqli_query($db,"SELECT ID, Username, Password FROM `user`  
        WHERE (Username = '".$_REQUEST["Username"]."') AND (Password = '".$_REQUEST["Password"]."')");
##Da kannst du sehen wie dein Array aussieht, was aus der Abfrage raus kommt. 
    print_r($daten); 
    if ($daten != "") {
        echo "Login erfolgreich"; //Nur ein Beispiel
    }else{
        echo "Password falsch"; //Nur ein Beispiel
    }
?>
Das Problem war (sry mein fehler), dass du mysqli benutzt und dann findet mysql natürlich keine connection. Probiers mal so!

Vielleicht hilft dir die Dokumentation weiter! das $db muss VOR die Abfrage!
 
Zuletzt bearbeitet: