• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Durch Funktion keinen Zugriff auf GET

Degers

Mitglied
Hallo,

durch eine Funktion versuche ich passwortgeschützte Inhalte zu schützen. Alle Seiten werden per switch auf einer Index-Seite inkludiert. Statt nun einfach den Include vorzunehmen tritt die Funktion check_access in Kraft:
PHP:
function check_access($requested_page, $access_status){
$unauthorized_access = "blabla geh weg";
if ($access_status == 'public'):
include $requested_page;
elseif ($access_status == 'limited'):
if (isset($_SESSION['logged']) == true):
include $requested_page;
else:
echo $unauthorized_access;
endif;
endif;
}
Bei den Seiten, bei denen 'limited' der Fall ist, hat die inkludierte Datei jedoch keinen Zugriff mehr auf die in der Index-Seite festgelegten GET-Variablen.
Das macht sich durch derartige Warnungen bemerkbar:
Notice: Undefined variable: tab in /var/www/uswusw on line 5
Wenn ich nun direkt in der Indexdatei die Überprüfung vornehme funktioniert es. Letztendlich könnte ich nun auch bei jeder Seite die Überprüfung drauflegen, eine Funktion wäre aber deutlich komfortaber, hat jemand einen Hinweis woran es liegen könnte?

-Funktion zum Überprüfen ob Zugriffsberechtigung (Sessions)
- GET-Werte aus der Indexdatei stehen in der inkludierten Datei nicht mehr zur Verfügung im Fall 'limited'


Gruß
 
Zuletzt bearbeitet:
Schreibst du $_GET['tab'] oder nutzt du register globals?
Ich schreibe, vereinfacht von Absicherungen abgesehen, ersteres. Register Globals ist bei mir derzeit deaktiviert.

Habs nicht genau durchgelesen, müsste aber stimmen:
PHP: Variable scope - Manual
Scheint grundsätzlich mein Problem zu treffen. Jedoch fehlt mir die Variable nicht in der Funktion, sondern in dem von der Funktion gesetztem Include. Sollte ich die Variable durch die Funktion an den Include (wie auch immer) weiterreichen? Kann ich im Include auf eine globale Variable zugreifen durch einen Zusatz? Die Verwendung von global $variable scheint in normalen PHP-Dokumenten nicht zu funktionieren.
 
Zuvor auf error_reporting(E_ALL);, nun auf
PHP:
error_reporting(-1); 

var_dump($_GET['tab']);
erzeugt folgende Fehlermeldung:
Notice: Undefined index: tab in /var/www/uswusw on line 37
NULL

Wenn ich die Variablen in der Funktion mit einreiche und die Variablen in der Funktion auf global setze funktioniert es, daher etwa so:
PHP:
function check_access($requested_page, $access_status, $tab, $mode){
$unauthorized_access = "blabla geh weg";
if ($access_status == 'public'):
include $requested_page;
elseif ($access_status == 'limited'):
if (isset($_SESSION['logged']) == true):
global $mode;
global $tab;
include $requested_page;
else:
echo $unauthorized_access;
endif;
endif;
}

Eine Lösung wäre es, zu eleganteren Lösungen würde ich nicht nein sagen.
 
Mit meinem Beispielcode wollte ich sagen, dass du auch eine Fehlermeldung den Index betreffend bekommen würdest, wenn $_GET['tab'] nicht gesetzt ist, wenn du den Wert abrufst.

Du bekommst aber (siehe Post #1) eine Fehlermeldung, die eine Variable beschreibt.

Meine Vermutung wäre, dass du an der entsprechenden Stelle nicht $_GET['tab'] abrufst, sondern vielleicht eine Variable, von der du glaubst, dass sie denselben Wert hat, weil du den irgendwo zugewiesen hast oder so.

Versuch mal bitte, den Fehler in kleinem Rahmen nachzustellen und poste davon den kompletten Code. Ich tippe, der Fehler/Verständnisfehler liegt an anderer Stelle.
 
Gern, im Kontext, folgende zwei Dateien, test1.php wird in test2.php inkludiert. Es tritt exakt der selbe Fehler auf, die Variable steht nicht zur Verfügung. Wenn ich das Geschehen aus der Funktion direkt verwende funktioniert es jedoch.

test.php
PHP:
<!DOCTYPE HTML>
<html lang="de">
<head>
<title>test</title>  
<meta name="author" content="Degers">  
<meta name="keywords" content="1,2,3 hier kommt die Polizei">  
<meta name="description" content="Ene mene Muh und raus bist du">
</head>
<body>
<?
//Fehlercheck
error_reporting(E_ALL); 

//Funktion zur Überprüfung der Zugangsberechtigung
function check_access($requested_page, $access_status){
$unauthorized_access = "<span class=\"pub_warning\">Du bist leider nicht berechtigt diese Seite einzusehen. Zum Einsehen dieser Seite musst du mit einem Systemadministrationskonto eingeloggt sein</span>";
if ($access_status == 'public'):
include $requested_page;
elseif ($access_status == 'limited'):
if (isset($_SESSION['logged']) == true):
include $requested_page;
else:
echo $unauthorized_access;
endif;
endif;
}

//Abruf diverser GET-Variablen, die im Projekt verwendet werden
$page = isset($_GET['page']) ? $_GET['page'] : null; 
$mode = isset($_GET['mode']) ? $_GET['mode'] : null;
$tab = isset($_GET['tab']) ? $_GET['tab'] : null;

//Einbinden einer Seite, hier test1.php
check_access('test1.php', 'limited');            
?>
</body>
</html>

test1.php
PHP:
<?
switch($tab):

case('eistee'):
echo "test1";
break;

case('cola'):
echo "mjam";
break;

case('apfelsaft'):
echo "ihju";
break;

endswitch;
?>

Es funktioniert in der beschriebenen Konstruktion mit in die Funktion geholten Variablen oder wenn das gesamte Gerüst um jede Seite in der test.php gelegt wird:
PHP:
$unauthorized_access = "<span class=\"pub_warning\">Du bist leider nicht berechtigt diese Seite einzusehen. Zum Einsehen dieser Seite musst du mit einem Systemadministrationskonto eingeloggt sein</span>";
if (isset($_SESSION['logged']) == true):
include ('test1.php');
else:
echo $unauthorized_access;
endif;
 
Zuletzt bearbeitet:
Gut, dann rufe ich die Angaben wohl in den Dokumenten direkt auf und verzichte auf den Versuch einer Zusammenfassung in der Indexdatei.
Danke an die Beteiligten.
 
Du kannst sowas machen:

PHP:
<?php

//Fehlercheck
error_reporting(-1);

//Funktion zur Überprüfung der Zugangsberechtigung
function check_access($requested_page, $access_status, $vars)
{
    $unauthorized_access = "<span class=\"pub_warning\">Du bist leider nicht berechtigt diese Seite einzusehen. Zum Einsehen dieser Seite musst du mit einem Systemadministrationskonto eingeloggt sein</span>";
    
    if ($access_status == 'public'):
        include $requested_page;
    elseif ($access_status == 'limited'):
        if (isset($_SESSION['logged']) == true):
            include $requested_page;
        else:
            echo $unauthorized_access;
        endif;
    endif;
}

$vars = array();

//Abruf diverser GET-Variablen, die im Projekt verwendet werden
$vars['page'] = isset($_GET['page']) ? $_GET['page'] : null;
$vars['mode'] = isset($_GET['mode']) ? $_GET['mode'] : null;
$vars['tab']  = isset($_GET['tab'])  ? $_GET['tab']  : null;

//Einbinden einer Seite, hier test1.php
check_access('test1.php', 'limited', $vars);
?>

Dann stehen dir in den inkludierten Dateien die jeweiligen bereinigten Werte in der Variable $vars zur Verfügung.
 
Zurück
Oben