Login + User- und Gruppenverwaltung

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich habe auch so meine Probleme mit einem Login-Script sowie der Planung einer User- und Gruppenverwaltung. Seit ein paar Monaten versuche ich das zu realisieren aber irgendwie scheiter ich immer.

Zu meiner Aufgabenstellung: Eine Online-Liga im Bereich Motorsport will weg von PHPKit, allerdings weiß dort ebenfalls keiner, wie man ein vernünftiges Login-Script baut, ebenso wenig wie man eine User- / Gruppenverwaltung dann umsetzt. Da ich allerdings durch einen HDD-Defekt meine Scriptversuche verloren habe, und auf keinen Grünen Zweig mehr komme wollte ich Euch mal fragen. Das Login Script aus dem Tutorial habe ich nun auch mal verwendet. Allerdings werde ich nicht eingeloggt. Wäre gut, wenn ihr da auch mal drüber schauen könntet. Wobei ich denke, dass dieses Login-System zu einfach gestrickt ist. Oder kennt vielleicht jemand eines, was gut auf den beschriebenen Anwendungsfall passt? Auf Hotscripts.com habe ich keines gefunden.


Gruß Radhad


register.php
PHP:
<?php include("include/connect.php"); ?>
<html>
<head><title>Register</title>
</head>

<body>
<form action="reg.php" method="post">
Name: <input type="text" name="name" size="20"><br> 
Kennwort: <input type="password" name="pwd" size="20"><br> 
<input type="submit" value="Login">
</form> 
</body> 
</html>
reg.php
PHP:
<?php
include("include/connect.php");
if( isset($_POST["name"]) && isset($_POST["pwd"]))
{
	$sql = "INSERT INTO user VALUES ('','".$_POST["name"]."','".md5($_POST["pwd"])."','','')";
	echo $sql;
	mysql_query ($sql);
	
	header ("Location: formular.php");
}
?>
login.php
PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include("include/connect.php");

$sql = "SELECT userid, name FROM user WHERE (name 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_name"] = $data["name"];

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

Die Dateien formular.php, checkuser.php sowie intern.php sind wie im Tut.

DB tbl: user
Code:
UserID  	int(255)
Name    	varchar(255)
Kennwort  	varchar(255)
Geburtstadum  	int(255)
Anmeldedatum  	int(255)
 
Wie wäre es denn wenn du das so machst:

PHP:
$_SESSION["user_id"] = $data["userid"]; 
 $_SESSION["user_name"] = $data["name"];

Du hast aus der Datenbank die Spalten userid und name geholt, also kannst du nicht die Spalte id in die Session schreiben!

Vielleicht liegts daran!

Gruß BSA

#Edit

Und du solltest auf die Groß- und Kleinschreibung bei den Spalten achten!
 
Danke, das hab ich vergessen zu ändern ... Blöde Fehler beim anpassen...

------

Wie kann ich denn nun effektiv Gruppen verwalten und Rechte zuweisen bzw. überprüfen? Bei der DB hab ich da keine Probleme, außer ich hab da was vergessen.

Table für User
Table für Groups
Table wo die PK's beider Tables als zusammengesetzter PK enthalten sind.

Meine Frage bezieht sich also eher auf den Bereich PHP, wie kann ich dies da umsetzen, wie die Überprüfung genau machen? Problematisch dabei ist, dass es pro Bereich zwar die gleichen Gruppen gibt, die aber nur in ihrem Bereich Zugriffe haben dürfen.


Gruß Radhad
 
Zuletzt bearbeitet:
PK's

Also ich mache das mit der Rechteverwaktung so, dass ich einer Usergruppe eine Bestimmte ID gebe,
1 = Superadmin
2 = Admin
3 = Moderator
4 = User


Dann habe ich mir eine Methode geschrieben die überprüft ob der User eingeloggt ist und welche Grupenid mindestens für diesen Bereich erforderlich ist, wenn sie zu nierdrig ist, dann kommt die Ausagabe das der Benutzer zu wenig Rechte hat. Fertig!
Du kannst natürlich endlos viele Gruppen erstellen, und evt. auch einen Benutzer in mehrere Gruppen stecken, da ist dem Programmierer keine Grenze gesetzt. Verstehst du wie ich das meine?

Gruß BSA
 
Hi,

wie ich das in der DB eintrage war mir schon klar. Nur die Überprüfung mittels PHP weiß ich noch nicht. Es soll z.B. Menüpunkte geben, die je nach Gruppenrecht angezeigt werden oder nicht. Allerdings programmiere ich das ganze nicht objektorientiert.

Das Tutorial werde ich mir anschauen, vielen dank für den Link. Hier gibt es zwar auch ein Tutorial, allerdings behandelt es nur allgemein den Login, nicht die Rechte.


Gruß Radhad
 
Hi Radhad!

Es ist doch nicht so schwer dann je nach benutzergruppe Menüpunkte anzuzeigen oder nicht.
Du holst erst die Benutzergruppe (am besten mit einer ID) aus der DB und machst dann die Abfrage im folgenden Format:

PHP:
if(isset($_SESSION['groupid']) == 2){
    echo "Menüpunkt 1";
}

Die Abfrage kannst du machen wie du willst, wenn du möchtest das mindestens eine bestimmter Benutzerlevel erforderlich ist, machst du das eben so das die groupid <= 2 sein muss.
verstehst du wie ich das meine?!
Ich hoffe einfach mal das du es verstehst, wenn nicht frag einfach nochmal nach!

Gruß BSA
 
Doch, jetzt habe ich es verstanden. Naja, hätte man schon selber draufkommen können, aber wie oben geschrieben habe ich so etwas vorher noch nie verwendet. Vielen dank für deine Hilfe!


Gruß Radhad
 
Hallo zusammen,

ich habe nochmal ein Problem mit meinem Login-System.

Und zwar handelt es sich um folgendes:
Auf der Website gibt es verschiedene Bereiche, und jeder Bereich hat selber eine Tabelle, wo die Gruppen gespeichert werden, damit man die User klar trennen kann. Nun wollte ich mal testweise nach dem Login mir die GruppenID ausgeben lassen.

Dazu überprüfe ich zuerst den Namen, dann das Paswort. Danach rufe ich die voranstellung der Tabellen (z.b. "dlm" für "dlm_usergruppen") ab, die in der Tabelle "area" stehen, wo alle Bereiche eingetragen sind. Nun soll daraus auf die Tabelle wie im Beispiel "dlm_rechte" zugegriffen, wo die UserID und die zugehörige GruppenID stehtn und in der Sessionvariable Session[dlm_rechte] gespeichert werden. Das müsste eigentlich auch richtig sein. Dazu erstmal der Code:
PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include("inc/connect.php");

$sql = "SELECT userid, name FROM user WHERE (name 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["userid"]; 
  $_SESSION["nickname"] = $data["name"];
  
  $sql2 = "SELECT * FROM area";
  $result2 = mysql_query ($sql);
  while($data2 = mysql_fetch_row ($result))
  {
	$areaname = $data2[2];
    $sql2 = "SELECT groupid FROM ".$areaname."_rechte WHERE userid = ".$data["userid"]."";
    $result3 = mysql_query($sql3);
    
    $data3 = mysql_fetch_array ($result3);
    
    $_SESSION["".$areaname."_rechte"] = $data3["groupid"];
  }

  header ("Location: index.php");
} 
else 
{ 
  header ("Location: index.php?fehler=1");
} 
?>
Allerdings wird mir kein Inhalt angezeigt in der Sessionvariable. Die Überprüfung auf meiner index.php sieht folgendermaßen aus:
PHP:
<?php
if(isset($_SESSION["user_id"]))
	$_SESSION["".$areaname."_rechte"]; ?>
$areaname wird oben in der Datei schon ausgelesen, um die vorsilbe für Tabellen zu erhalten.


Bin für jede Hilfe dankbar!


Gruß Radhad
 
Hi!

Was soll denn in der Session $_SESSION["".$areaname."_rechte"]; drin stehen? Du musst doch noch ne Zuweisung machen, oder nicht?! Also zumindest 1 oder 0!

Die Schreibweise sieht aber auch sehr komisch aus, probiers mal so:

PHP:
$_SESSION[$areaname."_rechte"];
 
Zurück