Login-System mit Session funktioniert nicht

Ich habe mir, nachdem ich schon einige Male auf Fehler mit Datenbankabfragestrings hereingefallen bin, folgende Regeln verinnerlicht und wende diese konsequent an:
- Den Datenbankstring mache ich mit einfachen Hochkomma.
- Variablen schließe ich in den String mit Punkten ein.
- Datenbankvariablen schreibe ich klein; Datenbankbefehle groß
- Bei Variablen, die Strings beinhalten, müssen die Hochkommata maskiert werden.
- Die Datenbankstrings schreibe ich in mehrere Zeilen.

Das ergibt im obigen Beispiel folgenen String:
PHP:
$sql = 'SELECT id, username, email
             FROM para_user
             WHERE username = \''.$_REQUEST[user]'\'
             AND passwort = \''.md5($_REQUEST[pwd].'\'';
Der erste Backslash nach Username maskiert das darauf folgende Hochkomma. Das Hochkomma danach schließt den String und erlaubt das Anschließen der Variablen mit dem Punkt. Nach dem nächsten Punkt geht es umgekehrt: das erste Hochkomma öffnet den String, dann kommt das maskierte Hochkomma, usw.

Um zu testen, ob alles richtig ist, gibt man den String mit echo aus, kopiert ihn in das SQL-Textfeld von PhpMyAdmin und startet ihn. Dort erhält man dann die richtigen Fehlermeldungen.

Ich hoffe, das war jetzt nicht Oberlehrerhaft...
 
Hi,

wenn es dann läuft, würde ich übrigens empfehlen, als nächstes die Sicherheit in Angriff zu nehmen. Das Tutorial hat schon ein paar Jährchen auf dem Buckel. So ist z.B. das Abwehren von Angriffen per SQL-Injection dort nicht berücksichtigt.

LG
 
Hallo,
Danke für eure hilfen, nun erscheint folgender Fehler.
Code:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\apache2triad\htdocs\para\admin\check.php on line 8

PHP:
<?php
session_start();
include('config.inc.php');
// Datenbankverbindung aufbauen 
mysql_connect($host, $dbuser, $dbpwd) or die(mysql_error());
mysql_select_db("paradoxon") or die(mysql_error()); 
$sql = 'SELECT id, username, email
             FROM para_user
             WHERE username = \''.$_REQUEST[user]'\'
             AND passwort = \''.md5($_REQUEST[pwd].'\'';
$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_username"] = $data["username"]; 
  $_SESSION["user_email"] = $data["email"]; 
  

header ("Location: admin.php"); 
} 
else 
{ 
header ("Location: login.php?fehler=1"); 
} 
?>
 
Ich habe deinen Code mal korrigiert.
1. der Punkt hinter REQUEST[user]
2. die schließende runde Klammer hinter REQUEST[pwd]
PHP:
<?php 
session_start(); 
include('config.inc.php'); 
// Datenbankverbindung aufbauen  
mysql_connect($host, $dbuser, $dbpwd) or die(mysql_error()); 
mysql_select_db("paradoxon") or die(mysql_error());  
$sql = 'SELECT id, username, email 
             FROM para_user 
             WHERE username = \''.$_REQUEST[user].'\' 
             AND passwort = \''.md5($_REQUEST[pwd]).'\''; 
$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_username"] = $data["username"];  
  $_SESSION["user_email"] = $data["email"];  
   

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

An die Kommunity:
muss es nicht
$_REQUEST['user']
und
$_REQUEST['pwd']
heissen?
 
Hi Ja danke euch es hat get. Es t nun. der fehler war in der Request[ user ] es haben schlichtwegt die '...' gefehlt :D

Danke jungs.
So einer hatte nochwas gesagt von soll das noch sichern wegen MySQL injektur oder sowas.

Vielen Dank :)
 
Zurück