# Mysql und MD5 was stimmt da nicht ?



## Homwer (19. Juli 2005)

Hi,
ich bastel mir gerade ein kleines loginscript...
teilweise sogar nach dem Tutorial von dieser page
http://www.tutorials.de/tutorials9684.html

Es läuft auch alles wenn ich MD5 nicht benutze, aber warum nicht mit MD5,  dann bekomme ich den Fehler 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web20/html/raidplan/2/login.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web20/html/raidplan/2/login.php:23) in /srv/www/htdocs/web20/html/raidplan/2/login.php on line 38



```
<?php 
// Session starten 
session_start (); 
// Datenbankverbindung aufbauen 
include 'config/config.php';
$name=$HTTP_POST_VARS['name'];
$pass=$HTTP_POST_VARS['pwd'];


$verbinde=mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db("usr_web20_2", $verbinde);

$sql="SELECT ID,name 
    FROM rpUser 
    WHERE name= ".$name." AND Password = MD5('".$pass."')
    LIMIT 1"; 


	
$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: formular.php?fehler=1"); 
} 

?>
```


----------



## Karl Förster (19. Juli 2005)

Was ich auf den ersten Blick sehe: Du schließt in der WHERE-Klausel eine Klammer, ohne sie zu öffnen:

```
WHERE name='".$name."' AND '".md5($_REQUEST["pwd"])."')    <<<< Die letzte Klammer
```


----------



## Homwer (19. Juli 2005)

Habe es geändert, klapt aber trotzdem nicht ?! selber fehler
wie ist denn der genaue "tag" für eine md5 abfrage ?


```
$sql = "SELECT                    
COUNT(*) as Anzahl                
FROM    users      WHERE       ID = '".$id."' AND     
 Password = MD5('".$pass."');";   <== ;"; ? kann doch garnicht gehen
```

habe ich in einem tutorial gefunden, halte ich aber für falsch (läuft so auch nicht)


----------



## Gumbo (19. Juli 2005)

Probier mal Folgendes:
	
	
	



```
<?php

	// Erhöhung der Fehlersensibilität
	ini_set('display_errors', 1);
	ini_set('error_reporting', E_ALL);

	// Session starten 
	session_start(); 
	// Datenbankverbindung aufbauen 
	include 'config/config.php';


	$verbinde = mysql_connect($dbhost, $dbuser, $dbpass);
	mysql_select_db('usr_web20_2', $verbinde);

	$sql = "
		SELECT
		        `ID`,
		        `name`
		  FROM
		        `rpUser`
		  WHERE
		        `name`     = '".mysql_real_escape_string($_POST['name'])."'
		    AND `Password` = '".md5($_POST['pwd'])."'
		  LIMIT
		         1
		";
	$result = mysql_query($sql) or die(mysql_error());

	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: formular.php?fehler=1');

	}

?>
```
Übrigens werden ganz andere Daten verarbeitet als abgefragt.


----------



## melmager (19. Juli 2005)

Homwer hat gesagt.:
			
		

> Habe es geändert, klapt aber trotzdem nicht ?! selber fehler
> wie ist denn der genaue "tag" für eine md5 abfrage ?
> 
> 
> ...



eher die Richtung


----------



## Homwer (19. Juli 2005)

läuft leider alles nicht  er weigert sich $pwd mit dem passwort das MD5 verschlüsselt ist zu vergleichen.
Ohne MD5 geht alles


----------



## niroxx (19. Juli 2005)

name/Password ...

sicher dass dein Passwort Feld in der SQL Datenbank groß geschrieben wurde ?


----------



## Homwer (19. Juli 2005)

So hier gehts, 
wenn ich die Variablen $name und $pwd direkt mit ewerten aus der DB vergleiche.
Gibt es nun eine möglich keit von der Variable $pwd die md5 summe zu bekommen?
also $pwd in md5 umrechnen und dann einfach diese werte vergleichen? 


```
<?php 
$pwd=$HTTP_POST_VARS['pwd'];
$name=$HTTP_POST_VARS['name'];

    $verbinde = mysql_connect($dbhost, $dbuser, $dbpass); 
    mysql_select_db('usr_web20_2', $verbinde); 

    $sql = " 
        SELECT 
                `ID`, 
                `name`, 
	`passwort`
          FROM 
                `rpUser` 
          WHERE 
                `name`     = '".$name."' 
            AND `passwort` = '".$pwd."'
          LIMIT 
                 1 
        "; 
    $result = mysql_query($sql) or die(mysql_error()); 

    if( mysql_num_rows($result) > 0 ) { ....
```


----------



## niroxx (19. Juli 2005)

Gibt es nun eine möglich keit von der Variable $pwd die md5 summe zu bekommen?
*Ja*
 AND `passwort` = '".md5($pwd)."'
^^ nun wurde das pw in md5 umgerechnet, nun musste den md5 wert
einfach nur vergleichen mit den werten in deiner tabelle, fertig


----------



## Gumbo (19. Juli 2005)

Hast du meinen Vorschlag schon probiert, Homwer? Ich hab ihn noch einmal überarbeitet und einen Fehler beseitigt.


----------



## Homwer (19. Juli 2005)

Hi es läuft nun
habe einfach mit 


$passwort = md5($pwd);

 und dann

                `name`     = '".$name."' 
            AND  passwort = '".$passwort."'

gemacht


----------

