buch: webseiten programmieren und gestalten

Hallo,

ich hab da auch mal eine kleine Frage zum Buch.
Hab mir das CMS erstellt und wollte mich in den Admin-Bereich einloggen.

Leider klappt das nicht.

Login.php
Code:
<?php

	/* Session initialisieren */
	session_start();
	
	/* übergebene Variablen auslesen */
	$username = $_POST['username'] ? $_POST['username'] : false;
	$password = $_POST['password'] ? $_POST['password'] : false;

	if($username && $password)
	{
		/* verschlüsseltes Passwort erzeugen */
		$encrypted = md5($username,$password);	
    
    include('../inc/database.inc.php');
    $connection = mysql_connect($db['host'],$db['uid'],$db['pwd']);
    if($connection)
    {
      if(mysql_select_db($db['db']))
      {
		$sql = "SELECT id FROM user WHERE (username = '$username') AND (password = '$encrypted') AND (active = 'true')";
      	$result = mysql_query($query) or die(mysql_error());
      	if($result && (@mysql_num_rows($result) > 0))
      	{
      	  $row = mysql_fetch_row($result);
      	  $_SESSION['authenticated'] = true;
      	  $_SESSION['user_id'] = $row[0];
      	  $_SESSION['username'] = $username;
      	}
      	else
      	{
      	  $_SESSION['authenticated'] = false;
      	}
      }
		}
	}
	
	/* Umleitung */
	header('Location: index.php');

?>

Der Benutzer wurde in phpmyadmin per Hand direkt und weils nicht geklappt hat auch mal mittels script angelegt.

mysql_error() liefert: Query was empty

Wäre super wenn ihr mir helfen könntet.
Vielen Dank
MfG
Diego
 
Wurde das Passwort auch richtig mit [phpf]md5[/phpf] verschlüsselt, als du ihn manuell angelegt hast?

Wie sieht die Tabelle aus?

Hast du mal zum Test die Weiterleitung auskommentiert und dir das Session Array ausgegeben?
 
Vielen Dank erstmal für die schnelle antwort.

Das PW ist mit md5 korrekt verschlüsselt.

Die Tabelle: user
id username password email active
5 admin 21232f297a57a5a743894a0e4a801fc3 admin@project.abc true

Wie lass ich mir denn nochmal das Session Array ausgeben?
 
Mit var_dump($_SESSION); bekomme ich gar nichts zurück.
Aber var_dump($_POST); liefert mir

Code:
/* übergebene Variablen auslesen */
$username = $_POST['username'] ? $_POST['username'] : false;
$password = $_POST['password'] ? $_POST['password'] : false;
	
var_dump($_POST);

den Benutzer und das Passwort im Klartext.

Habt ihr noch eine Idee?
 
Mit var_dump($_SESSION); bekomme ich gar nichts zurück.

Wie denn "gar nichts"? Nicht mal, dass es ein leeres Array ist?

Schreib mal in die erste Zeile error_reporting(E_ALL);

PHP:
$encrypted = md5($username,$password);

Was soll das sein? md5 soll dir die Codierung für das Passwort liefern. Du lässt den Usernamen codieren. $password wird als optionaler Parameter gewertet und darf eigentlich nur TRUE oder FALSE sein (bestimmt, obs nen raw_output sein soll oder nicht).

Was steht denn nun in $_POST drin? Also welche Ausgabe erzeugt das var_dump()?
 
Ich hab error_reporting eingefügt und $encrypted ganz aus der Datei gelöscht.

PHP:
if(mysql_select_db($db['db']))
      {
$sql = "SELECT id FROM user WHERE (username = '$username') AND (password = '$password') AND (active = 'true')";
      	$result = mysql_query($query) or die(mysql_error()); /*line 21*/
      	if($result && (@mysql_num_rows($result) > 0))
      	{
      	  $row = mysql_fetch_row($result);
      	  $_SESSION['authenticated'] = true;
      	  $_SESSION['user_id'] = $row[0];
      	  $_SESSION['username'] = $username;
      	}
      	else
      	{
      	  $_SESSION['authenticated'] = false;
      	}
      }

So sieht nun die if-Abfrage aus, die einen Fehler verursacht

array(2) { ["username"]=> string(5) "xxx" ["password"]=> string(4) "xxy" }
Notice: Undefined variable: query in C:\xampp\htdocs\cms\admin\login.php on line 21
Query was empty
 
Code:
$sql = "SELECT id FROM user WHERE (username = '$username') AND (password = '$password') AND (active = 'true')";
          $result = mysql_query($query) or die(mysql_error());

Fällt dir was auf?
Richtig, du nennst dein Query $sql aber machst mysql_query($query). ;)
 
Hey super ... vielen Dank, hatte ich gar nicht gesehen .... manchmal ist man einfach zu blind.

Ich glaub das ist einfach zu spät ... aber jetzt gibt der mir das hier aus ...

array(1) { ["authenticated"]=> bool(false) }

......

Werd dann mal schlafen gehen und mich morgen abend nochmal damit befassen ... aber im moment blick ich das überhaupt nicht mehr ....

Vielen Dank erstmal für deine / eure super Hilfe ....

Einen schönen Abend noch
 
Hi,

vielen Dank nochmal für deine Hilfe.
Ich habs jetzt endlich geschafft mich anzumelden

Habe nun folgenden Code:
PHP:
if(mysql_select_db($db['db']))
      {
        $sql = "SELECT id FROM user WHERE (username = '$username') AND (password = '$password') AND (active = 'true')";
          $result = mysql_query($sql) or die(mysql_error());
          if($result && (@mysql_num_rows($result) >= 0))
          {
            $row = mysql_fetch_row($result);
            $_SESSION['authenticated'] = true;
            $_SESSION['user_id'] = $row[0];
            $_SESSION['username'] = $username;
          }
          else
          {
            $_SESSION['authenticated'] = false;
          }
      }
Diese Zeile habe ich verändert ... und zwar habe ich aus dem > ein >= gemacht. Nun klappt alles hervorragend ..
PHP:
if($result && (@mysql_num_rows($result) >= 0))
Da ich mich aber noch nicht so lange mit php beschäftige, könntet ihr mir vielleicht erklären warum das jetzt funktioniert bzw. warum $result und mysql_num_rows($result) nicht größer als 0 sind ... sonder größer gleich 0 ....

Wäre echt nett von euch.

Einen schönen Tag sowie ein schönes Wochenende noch.
MfG
 
Zurück