php-mysql-login, Unterschiedliche Seite je nach Nutzergruppe

Sun Rider

Mitglied
Hallo zusammen,

bin neu hier und hoffe auf Eure fachkundige Hilfe. Habe schon gegoogelt und die einschlägigen Foren durchsucht aber nix für mich brauchbares oder verständliches gefunden.
Ich betreue die Web-Site unseres Vereins und habe dort einen Mitgliederbereich eingebaut.
Die Anmeldung dazu habe ich mit dem zugegeben schon etwas älteren Script von Karl Förster aus diesem Forum realisiert, siehe

http://www.tutorials.de/php-tutorials/9684-php-mysql-login-system-mit-sessions.html

Funktioniert auch alles ganz toll. Dafür schon mal besten Dank an Karl.

Jetzt aber zu meinem Problem: Wie kann ich es erreichen, daß alle "normalen" Mitglieder die Standard-Mitgliederseite sehen, der Vorstand soll eine eigene Seite mit erweiterten Optionen sehen.
Das Ganze nach Möglichkeit nur mit Änderung der bisherigen Login-Scripts, ich möchte nicht unbedingt einen komplett neuen Login bauen müssen.
In der Datenbank habe ich bereits ein Feld für die Gruppenzuordnung angelegt. Weiss nur nicht wie ich's auswerte und dann die entsprechende Seite anspreche.

Ich hoffe, ich habe das alles verständlich beschrieben und hoffe nun auf gute Ratschläge.
Macht es bitte für einen absoluten PHP-Neuling wie mich verständlich.

Schon mal Danke....
Stefan
 
Ich würde es so lösen: Lege eine Tabelle für Gruppen an. Innerhalb der Gruppen-Tabelle hast du eine ID, den Gruppennamen und die Standard-Seite der Gruppe als URL. Nach dem Login wird die Spalte für die Standard-Seite aus der Gruppen-Tabelle ausgelesen und entweder

include("$gruppenseite");

oder

header("Location: $gruppenseite");

je nach dem, was dir besser gefällt.
 
Hallo Saftmeister,

erst vielen Dank für die schnelle Antwort !!
Die Idee mit der URL für die entsprechende berechtigung ist nicht schlecht. Leider funktioniert es nicht.
Hab mal das Login-Script vor der Änderung angehangen. Die Variable "user-level" wird aus der Datenbank bezogen, als Feld im Datensatz jede´s Nutzers. Hier sind Zahlen je nach Berechtigung vergeben, also z.B. 1 für normale, 2 für Vorstandsmitglieder.

<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "XXXXXX", "XXXXXXXXX");
if (!mysql_select_db ("LoginSystem", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
"Id, Nickname, Nachname, Vorname, USR_Level ".
"FROM ".
"benutzerdaten ".
"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"];
$_SESSION["user_level"] = $data["USR_Level"];


header ("Location: members.php");

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

Wie krieg ich es jetzt hin, daß statt dem Aufruf von "header ("Location: members.php") eben nach user_level unterschieden wird, was in header ("Location: xxx"); drinsteht ?
 
Zuletzt bearbeitet:
Du kannst zb mit switch case jeden fall der eintreffen kann durchgehn.
Wenn ich das richtig verstanden habe stehen da nur Zahlen, bzw. es kommen nur Zahlen in frage. Dann kannst du einfach sagen:
PHP:
switch($_SESSION['user_lvl']){
   case 1: header(Loaction : ....);
       break;
    case 2: header(Location: ....);
        break;
    usw.
    evtl. defaul: header(Location: Die Seite die geladen werden soll, wenn keins eintrift);
}
wichtig nach jeden case das break nicht vergessen, sonst werden ab dem ersten treffer alle weiteren mit abgearbeitet.
Hoffe konnte dir weiter helfen.
lg
 
Zuletzt bearbeitet:
Hallo Taurin,

vielen Dank für den Vorschlag. Hab's gleich probiert, leider ****t es nicht. Anscheinend hängt sich die Geschichte direkt im Login-Script auf und die Seite bleibt komplett leer, ohne Fehlermeldungen.
 
Schalte mal das error-reporting hoch, vllt hilf das weiter.
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
und versuche mal das:
PHP:
$sql = "SELECT ".
"Id, Nickname, Nachname, Vorname, USR_Level ".
"FROM ".
"benutzerdaten ".
"WHERE ".
"(Nickname like '".$_REQUEST["name"]."') AND ".
"(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
so zu machen:
PHP:
$sql = "SELECT Id, Nickname, Nachname, Vorname, USR_Level 
FROM benutzerdaten 
WHERE Nickname like '{$_REQUEST['name']}' AND Kennwort = '$pw' ";
Das PW solltest du vorher bearbeiten. Also $pw = hash("sha512", $_REQUEST['pw']);
Noch ein Tipp vllt, du solltest auch nicht direkt die Daten in die DB schreiben, wegen SQL-Injections. Immer schön die Werte auf gültigkeit, richtigen Typ usw. prüfen.
lg
 
Zuletzt bearbeitet:
Wo muss der Code hin, hab ihn an den Anfang des Scripts gestellt. Kommt keine Ausgabe...

Wie schon gesagt, PHP ist für mich Neuland.
 
Eine andere frage habe ich noch, und zwar wie viele Daten aus der DB erwartest du? Einen oder mehrere?
 
Die Datebank ist wie folgt aufgebaut:
ID
Nickname
Kennwort
Nachname
USR-Level

In der Datenbank wird seitens der Web-Site nicht geschrieben, nur gelesen.

Hab alles so probiert wie beschrieben, kein Erfolg...
 
Zurück