Login mit MySQL und Sessions

dr-stein

Mitglied
Hallo,
ich bins mal wieder! Ich habe ein Loginscript gebastelt, welches aber nicht ganz t Hier meine Codes:

login.php
PHP:
<form action="l/portal.php" method="post">
<input type="text" name="user"><input type="password" name="pass"><input type="submit"></form>

portal.php
PHP:
<?php

session_start(); // Session starten

$_SESSION['username'] = $_POST['user']; // Session registrieren
$_SESSION['passwort'] = $_POST['pass']; // Session registrieren

include("mysql_connect.php"); //MySQL-Verbindung einbinden

  $abfrage = "SELECT * FROM sw_portal";
          $ergebnis = mysql_query($abfrage)
          OR die("Error: $abfrage <br>".mysql_error());  
          while($row = mysql_fetch_object($ergebnis))
          {
          $username=$row->username;
          $password=$row->passwort;
          $benutzergroup=$row->benutzergroup;
          }

if ($_POST['user']==$username AND $_POST['pass']==$password)
{
include("start.php");
}
else
{
include("login.php");
}
?>

start.php
PHP:
<?php
session_start();

$username = $_SESSION['username'];
$passwort = $_SESSION['password'];

include("mysql_connect.php"); //MySQL-Verbindung einbinden

  $abfrage = "SELECT * FROM sw_portal";
          $ergebnis = mysql_query($abfrage)
          OR die("Error: $abfrage <br>".mysql_error());  
          while($row = mysql_fetch_object($ergebnis))
          {
          $username=$row->username;
          $password=$row->passwort;
          $benutzergroup=$row->benutzergroup;
          }

$benutzergruppe = $benutzergroup;

if ($benutzergruppe=="X7X*********ryU7")
{
include("benutzer/admin.php");
}
else if ($benutzergruppe=="**7**U**Yvcmnq**t")
{
include("benutzer/familie.php");
}
else if ($benutzergruppe=="**SxgjBn0*****ei")
{
include("benutzer/kohlfahrt.php");
}
else if ($benutzergruppe=="im*ZT1vvt***qF*r")
{
include("benutzer/berlin.php");
}
else if ($benutzergruppe=="Wb*aiU*dN*lJrM**")
{
include("benutzer/meckpomm.php");
}
else if ($benutzergruppe=="OlS*Ez*AT**eN*tZ")
{
include("benutzer/eike-friends.php");
}
else
{
include("benutzer/no.php");
}
?>

Wenn ich mich jetzt mit meinem Benutzernamen (Ben: Eike Pass: ***) dann komme ich auch auf die admin.php - Wenn ich mich jetzt mit meinem Testbenutzer (Ben: Test Pass: ***) Anmelde, klappt das nicht! Dann dachte ich, ich muss villeicht die sessions löschen, aber auch das hat nichts genützt!

Was ist falsch?

Danke im Vorraus!!

EIke
 
Zuletzt bearbeitet:
Ich habe auf den ersten Blick nichts Falsches gesehen, aber was ich mich dennoch frage, ist, warum du alle Datensätze aus der Datenbank lädst und dann mit PHP prüfst, ob der Nutzer mit diesem Passwort existiert. Das kannst du doch direkt in deiner Anfrage prüfen, was auch die Datenbank und PHP entlastet.
Außerdem solltest du die Session auch erst dann registrieren, wenn du weißt, dass dieser Nutzer gültig ist.

Meine Lösung würde in etwa so aussehen:
PHP:
<?php
session_start();
include 'mysql_connect.php';

$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);

$sql = 'SELECT * FROM `sw_portal` WHERE `username` = "'.$username.'" AND `passwort` = "'.$password.'" LIMIT 1';
if(!($result = mysql_query($sql))) {
    include 'login.php';
}
else {
    $data = mysql_fetch_assoc($result);
    $_SESSION['username']      = $data['username'];
    $_SESSION['password']      = $data['passwort'];
    $_SESSION['benutzergroup'] = $data['benutzergroup']; // Kannst du dann in start.php benutzen
    
    include 'start.php';
}
 
Zuletzt bearbeitet:
Stimmt! Bekomme allerdings jetzt folgende Fehlermeldung nachdem ich auf anmelden geklickt habe:

HTML:
Parse error: syntax error, unexpected '{' in /var/www/web378/html/www.schlueter.ws/l/portal.php on line 10

Woran liegt das?
 
Habe den Fehler gefunden:

PHP:
<?php
session_start();
include 'mysql_connect.php';
 
$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);
 
$sql = 'SELECT * FROM `sw_portal` WHERE `username` = "'.$username.'" AND `passwort` = "'.$password.'" LIMIT 1';
if(!($result = mysql_query($sql)))
{
    include 'login.php';
}
else {
    $data = mysql_fetch_assoc($result);
    $_SESSION['username']      = $data['username'];
    $_SESSION['password']      = $data['passwort'];
    $_SESSION['benutzergroup'] = $data['benutzergroup']; // Kannst du dann in start.php benutzen
    
    include 'start.php';
}

Es fehlte eine Klammer! Jetzt t es!

vorher:
PHP:
if(!($result = mysql_query($sql))
nachher:
PHP:
if(!($result = mysql_query($sql)))

Danke dir... noch ein schönes wochenende
 
Merke grad, dass es doch nicht t... jetzt können auch falsche daten eingegeben werden! Und man kommt immer auf die admin.php

Lieben Gruß, Eike
 
Ich hab nur deine portal.php verändert. Das heißt, dass du deine start.php noch anpassen musst.

In etwa so:
PHP:
<?php
session_start();

switch($_SESSION['benutzergroup']) {
    case 'X7X*********ryU7':
        include 'benutzer/admin.php';
        break;

    case '**7**U**Yvcmnq**t':
        include 'benutzer/familie.php';
        break;

    case '**SxgjBn0*****ei':
        include 'benutzer/kohlfahrt.php';
        break;

    case 'im*ZT1vvt***qF*r':
        include 'benutzer/berlin.php';
        break;

    case 'Wb*aiU*dN*lJrM**':
        include 'benutzer/meckpomm.php';
        break;

    case 'OlS*Ez*AT**eN*tZ':
        include 'benutzer/eike-friends.php';
        break;

    default:
        include 'benutzer/no.php';
        break;
}
?>
 
Zuletzt bearbeitet:
jop... habe ich aber schon gemacht: jetzt werden alle falschen nutzer auf no.php geleitet und alle richtigen entsprechend einsortiert!

PHP:
<?php
session_start();

$_SESSION['benutzergroup'] = $data['benutzergroup']; // Kannst du dann in start.php benutzen


if ($data['benutzergroup']=="X7X******JXP6ryU7")
{
include("benutzer/admin.php");
}
else if ($data['benutzergroup']=="Dc7pA******nqCt")
{
include("benutzer/familie.php");
}
else if ($data['benutzergroup']=="FJ******Bgyei")
{
include("benutzer/kohlfahrt.php");
}
else if ($data['benutzergroup']=="imw*****")
{
include("benutzer/berlin.php");
}
else if ($data['benutzergroup']=="Wb*******wv")
{
include("benutzer/meckpomm.php");
}
else if ($data['benutzergroup']=="OlS9********Z")
{
include("benutzer/eike-friends.php");
}
else
{
include("benutzer/no.php");
}
?>

oder ist das so falsch?
 
Zuletzt bearbeitet:
PHP:
$_SESSION['benutzergroup'] = $data['benutzergroup'];
... das funktioniert so nicht. Schau dir lieber mal mein Beispiel an, was ich oben noch hinzugefügt habe.
 
Danke... nun klappts! Habe dein Beispiel nicht gesehn!

aber habe noch ein Problem... Ich möchte nun bei der start.php anstatt der no.php gerne eine weiterleitung zur login.php haben. Habe also folgendes geändert:

PHP:
<?php
session_start();
 
switch($_SESSION['benutzergroup']) {
    case 'X7XWCgpVJXP6ryU7':
        include 'benutzer/admin.php';
        break;
 
    case 'Dc7pAUdEYvcmnqCt':
        include 'benutzer/familie.php';
        break;
 
    case 'FJSxgjBn04IBgyei':
        include 'benutzer/kohlfahrt.php';
        break;
 
    case 'imwZT1vvtMm2qFDr':
        include 'benutzer/skat.php';
        break;
 
    case 'WbZaiUNdN8lJrMwv':
        include 'benutzer/meckpomm.php';
        break;
 
    case 'OlS9EzvATZzeNptZ':
        include 'benutzer/eike-friends.php';
        break;
 
    default:
        Header ('Location: login.php');
        break;
}
?>

bekomme dann aber folgende Fehlermeldung:

HTML:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web378/html/www.schlueter.ws/l/mysql_connect.php:10) in /var/www/web378/html/www.schlueter.ws/l/start.php on line 30

Was mache ich hier falsch!
 
Zurück