betretten eienr Seite nur mit bestimmten Rechte

Dolphon

Erfahrenes Mitglied
Moin.

Ich habe ein Login Skript, welches mit Session funktionier.t
DEr Benutzer logt sich erfolgreich ein. In der DB besitzt der User eine Feld mit dem Namen "frei", wo eine 0 drin steht.
Alle User die eine 1 dort stehen haben, dürfen eine bestimmte SEite betreten.
Ich hab mal was geschrieben, bekomme das aber nicht so ganz hin.

PHP:
<?php 
session_start(); 
if(!session_is_registered('user') || $_SESSION['user'] == "") { 

if ($_SESSION['frei'] == 0)
{
echo "Sie sind noch nicht freigeschaltet!" ;
}

header("location:index.php"); 
  die; 
} 
?>
 
Also grundsätzlich würde ich es nicht so machen, dass eine Fehlermeldung angezeigt wird wenn du das Recht nicht hast und du weitergeleitet wirst wenn du es hast. Wenn jemand die URL kennt kommt er auch ohne das Recht auf die Seite. Mach es lieber andersrum: Zeige die Seite an wenn er das Recht hat und leite auf eine Fehlermeldung um wenn nicht. Dein Ansatz war schonmal ganz gut. Vielleicht so in etwa:
PHP:
<?php

session_start ();

if ((isset ($_SESSION["user"]) and ($_SESSION["frei"]))
{
  // Zeige die Seite an.
}
else
{
  header ("Location: fehler.php");
}

?>

* Habs nicht ausprobiert. Ist nur eine Art Denkansatz von mir.
 
die meisten Probs hab ich damit.

PHP:
if ($_SESSION['frei'] == 0)
{
echo "Sie sind noch nicht freigeschaltet!" ;
}

ER soll ja in der DB nachschauen ob die Spalte "frei" au f0 steht. wenn ja, dann darf der User nicht auf diese Seite. steht da eine 1, dan darf er.
 
Tut es aber leider nicht. ich vermutte mal das es das SESSION[frei] nicht gibt. also müsste ich an dieser Stelle eine Verbindung zur DB aufbauen. aber das wäre unschön, so finde ich.
 
Dann poste doch mal die Datei, wo du $_SESSION["frei"] setzt. Logischerweise sollte an dieser Stelle was nicht funktionieren wenn die Variable nicht gesetzt ist.
 
PHP:
<?php 
session_start(); 
require("config.inc.php"); 

if(!($db = mysql_connect($db_host, $db_user, $db_pass))) //baue datebankverbindung auf 
  die(mysql_error());  //wenn nicht geht, gib fehlermeldung aus 
else //wenn doch geht 
{ 
  if(!mysql_select_db($db_name, $db)) //wähle datenbank aus 
      die(mysql_error());   //wenn das nicht geht, gib fehler aus 
} 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
<?php if(!isset($_POST['submit'])) { ?> 
<form action="<?php $PHP_SELF ?>" method="post"> 
<table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center"> 
  <tr> 
    <td bgcolor="#e7e7e7" align="center" colspan="2"> 
    <b>Bitte erst anmelden</b> 
    </td> 
  </tr> 
  <tr> 
    <td width="170" bgcolor="#e7e7e7">Benutzername</td> 
    <td width="230" bgcolor="#ffffff"><input type="text" name="username" size="20" class="input"<?php if($_POST['username'] !=  
"" ) {echo ' value="'.$_POST['username'].'"';} ?>></td> 
  </tr> 
  <tr> 
    <td width="170" bgcolor="#e7e7e7">Passwort</td> 
    <td width="230" bgcolor="#ffffff"><input type="password" name="password" size="20" class="input"></td> 
  </tr> 
  <tr> 
    <td bgcolor="#e7e7e7" align="center" colspan="2"> 
    <input type="submit" name="submit" value="Anmelden" class="button"> 
    </td> 
  </tr> 
</table> 
</form> 
<?php 
}elseif(!$_POST['username'] || $_POST['username'] == "") { 
  echo '<p align="center">Einen Benutzernamen brauchen wir schon ;-)<br><br><a href="index.php">Zurück</a></p>'; 
}elseif(!$_POST['password'] || $_POST['password'] == "") { 
  echo '<form action="index.php" method="post">'; 
  echo '<p align="center">Ein Passwort brauchen wir schon ;-)<br><br>'; 
  echo '<input type="hidden" name="username" value="'.$_POST['username'].'">'; 
  echo '<input type="submit" name="zurueck" value="Zurück">'; 
  echo '</p>'; 
  echo '</form>'; 
}else{ 
  $password = md5($password); 
  $query = @mysql_query("SELECT user, pw, frei FROM handwerker WHERE user = '".$_POST['username']."'") or die('Select ist 
fehlgeschlagen!'); 
  $result = @mysql_fetch_array($query) or die('<p align="center">Sorry, aber dieser Benutzername existiert nicht!<br><a 
href="index.php">Zurück</a></p>'); 
  if($password != $result['pw']){ 
    echo '<form action="index.php" method="post">'; 
    echo '<p align="center">Sorry, aber dieses Passwort ist falsch!<br><br>'; 
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">'; 
    echo '<input type="submit" name="zurueck" value="Zurück"></p>'; 
    echo '</form>'; 
    die; 
  }else{ 
    $user = $result['user']; 
    session_register('user'); 
    echo '<p align="center">LogIn erfolgreich! :-)<br><br><a href="test.php">Weiter</a></p>'; 
  } 
} 
?> 
</body> 
</html>
 
Mhh also so ganz bin ich mir nicht sicher, aber kommt da keine Fehlermeldung? Weil du versuchst ja die Session-Variable zu setzen nachdem du bereits eine Ausgabe an den Browser hast. Kann auch sein, dass diese Regel nur für session_start(); gilt. Ich gebe die noch den Tipp die Zeilen
PHP:
$user = $result['user']; 
session_register('user');
durch
PHP:
$_SESSION["user"] = $result["user"];
Zu ersetzen. Ist erstens kürzer und zweites neuer Standard. Vielleicht ist das auch schon die Fehlerquelle. Hab jetzt leider nicht so die Zeit um mir das genau anzusehen.
 
Zurück