phpbar.de logo

Mailinglisten-Archive

[php] Vergleich von zwei Werten

[php] Vergleich von zwei Werten

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Sep 29 11:34:38 CEST 2004


Hi Steffen,


die Beantwortung Deiner Frage ist nur aufgrund der Sichtung des von Dir
mitgeschickten, umfangreichen Codes etwas schwierig, wenn einem nicht
sofort eine Ungereimtheit auffaellt... :-)


Steffen Kother schrieb:
> Das Problem besteht nun darin, dass trotz gegebener Berechtigung das
> Skript in die Verweigerung abzweigt. Die Kontrolle sieht so aus:
>
> $Modul    = Pruefe_Modul('fibu');
> /* ^ Liefert bei true 'fibu', sonst 0 */

$Modul enthaelt hier aber noch den richtigen Wert?


> $Funktion = Pruefe_Funktion('zudd_erfassen', $Modul);
> /* ^ Liefert bei true die Funktion sonst 0 */
>
> Der User hat in seiner Session die Berechtigung f=A8r 'zudd_erfasen',
> aber irgendwie will er den Vergleich von $Value mit
> strtolower($Funktion) nicht, denn $Funk bleibt leer. Schreibe ich vor
> den Vergleich $Value='zudd_erfassen' hart rein, dann gehts.

D.h. es geht eigentlich nicht darum, dass $Funk leer bleibt, sondern
$Value bzw. dass $Value an dieser Stelle einen falschen Wert enthaelt.


> K=F7nnte dies mit dem _ (Unterstrich) zu tun haben? Komme nciht weiter,
> macht mich m=A8rbe dieses Problem.

Meinst Du den im Funktionsnamen? Der sollte nichts machen, zumal wenn PHP
in die Funktion rein geht. :-)


> function Pruefe_Funktion($Funktion, $Modul) {

$Modul wurde korrekt uebergeben (s.o.)?


>     $Rechte = unserialize($_SESSION['cl_Rechte']);

Hast Du Dir den Inhalt von $Rechte nach dieser Operation an dieser Stelle
ausgeben lassen (z.B. print_r($Rechte))? Ist hier noch alles ok?


>     /* Kontrolle, wenn Modul gegeben ist */
>     if (!empty($Rechte[$Modul])) {
>         foreach($Rechte[$Modul] as $Value) {

Hast Du Dir hier den Inhalt von $Rechte[$Modul] ausgeben lassen? Stimmt
der Wert?


>             if ($Value == strtolower($Funktion) || $Value == "all")
> $Funk = $Funktion;
>         }
>     }
>
>     /* Kontrolle, wenn kein Modul vorhanden ist, bsp. ROOT-User */
>     if (empty($Rechte[$Modul])) {
>         if (!empty($Rechte['all'])) {
>             foreach($Rechte['all'] as $Value) {

Hast Du Dir hier den Inhalt von $Rechte['all'] ausgeben lassen? Stimmt der
Wert?


>                 if ($Value == strtolower($Funktion) || $Value == "all")
> $Funk = $Funktion;
>             }
>         }
>     }
>
>     if (empty($Funk)) $Funk = 0;
>     return $Funk;
> }


Also mein Ansatzpunkt waere, dass $Rechte[$Modul] nicht richtig vorhanden
ist. Das koennte bedeuten, dass es in der folgenden Zeile ein Problem
gibt, wo Du $Rechte aus der Session fuellst:

     $Rechte = unserialize($_SESSION['cl_Rechte']);

Ist aber nur Spekulation. :-)

Verfolge einmal zurueck, ab wo falsche Werte auftreten.


Viele Gruesse

Lutz


php::bar PHP Wiki   -   Listenarchive