PHP Versionfehler?

Fruitgum

Erfahrenes Mitglied
Hallo,

Ich habe in Loginscript was auf manchen Server funkioniert und auf manche nicht mehr.

hier ist die Login.php

PHP:
<?php  
// Session starten 
session_start ();

include ("config.php"); 
// Datenbankverbindung aufbauen  
$connectionid = mysql_connect ($host, $name, $pass);  
if (!mysql_select_db ($db, $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

$sql = "SELECT ".  
    "Id, Nickname ".  // hier fehlte das leerzeichen nach Nickname!!
  "FROM ".  
    "login ".  
  "WHERE ".  
    "(Nickname like '".$_REQUEST["name"]."') AND ".  
    "(Kennwort = '".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_nickname"] = $data["Nickname"];  
  $_SESSION["user_nachname"] = $data["Nachname"];  
  $_SESSION["user_vorname"] = $data["Vorname"];  

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

Die Fehler lauten:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/u0061773780/public_html/fileadmin/import2/login.php on line 22

Warning: Cannot modify header information - headers already sent by (output started at /home/u0061773780/public_html/fileadmin/import2/login.php:22) in /home/u0061773780/public_html/fileadmin/import2/login.php on line 37


Ich weiß nicht was der Fehler ist.

LG, Fruit
 
Allgemein hast du keinen Wert auf Query-Injections und generelle Fehlerabfragen gelegt, daher möchte ich dir entweder die [phpf]mysql_real_escape_string[/phpf]-Funktion ans Herz legen, oder eine Empfehlung Richtung [phpf]PDO[/phpf] und Prepared Statements geben.

Höchstwahrscheinlich entstammt der erste Fehler der Tatsache, dass die Datenbanktabellenarchitektur auf einem Rechner anders aussieht als auf dem zweiten.
In folgendem Code habe ich eine Vorab-Fehlerabfrage implementiert und ein paar Sicherheitslücken geflickt:
PHP:
<?php  
// Session starten 
session_start ();

include ("config.php"); 
// Datenbankverbindung aufbauen  
$connectionid = mysql_connect ($host, $name, $pass);  
if (!mysql_select_db ($db, $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

$sql = "
	SELECT
    	`Id`, `Nickname` -- Weitere Feldbezeichnungen
	FROM
		`login`
  	WHERE
    	`Nickname` LIKE '" . mysql_real_escape_string( $_REQUEST["name"], $connectionid ) . "' AND
    	`Kennwort` = '" . md5 ($_REQUEST["pwd"])."'
	LIMIT
		1
	;";
if ( !$result = mysql_query ($sql) ) {
	// Hier auf Fehler überprüfen!
	die( mysql_errno( $connectionid ) );
} else if ( mysql_num_rows ($result) === 1 ) {  
  // Benutzerdaten in ein Array auslesen.  
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren  
  $_SESSION["user_id"] = $data["Id"];  
  $_SESSION["user_nickname"] = $data["Nickname"];  
  $_SESSION["user_nachname"] = $data["Nachname"];  
  $_SESSION["user_vorname"] = $data["Vorname"];  

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

Schau einfach mal drüber. Ist sicherlich nicht perfekt, aber zumindest entschärft.
 
Zurück