Fabienne: String zerpflücken: 10110101 soll 1,0,1,1 usw... werden

Halli hallo!!

Ich will verschiedene Benutzerbereiche erzeugen. Also, es soll insgesamt 10 Bereiche geben, in denen verschiedene Nutzer Zugriff haben, andere nicht: 1==Zugriff erlaubt, 0==Zugriff nicht erlaubt!

Dann hab ich ne Variable wie z.B.
$Zugriff="1000000000"; //User darf nur auf Bereich 1
Anderer User:
$Zugriff="1001001010"; //User darf in Bereiche 1, 4, 7 und 9

$Zugriff="1111111111"; //===ADMIN

Wie kann ich diesen String 101010101000 zerpflücken und gleichzeitig wieder in ein Array abspeichern, dass ich anschließend nur noch abfragen muss, ob im Zugriffsarray dieser Bereich zugelassen ist??

if($Zugriffsarray[$Bereichsnummer]!="1")$nachricht ="Nicht gestattet!";

Ideen?? Bitte kein Links zu Tutorials. Die kenn ich schon und bin leider nicht schlau draus geworden...

Thanx

  1. Hello,

    wenn da nur 1 und 0 drinsteht, dann könnte man das auch als int abspeichern und binär codieren. Braucht dann nur zwei Bytes und Du hättest 16 Bereiche.

    Na und um die wieder zu filtern, muss Du nur verunden:

    $zugriff = $userrights & $bereich

    oder

    $zugriff = ($userrights & $bereich) > 0;

    Bitoperatoren:
    $a & $b Und Bits, die in $a und $b gesetzt sind werden gesetzt.

    Grüße

    Tom

    1. Hello,

      wenn da nur 1 und 0 drinsteht, dann könnte man das auch als int abspeichern und binär codieren. Braucht dann nur zwei Bytes und Du hättest 16 Bereiche.

      Na und um die wieder zu filtern, muss Du nur verunden:

      $zugriff = $userrights & $bereich

      oder

      $zugriff = ($userrights & $bereich) > 0;

      Bitoperatoren:
      $a & $b Und Bits, die in $a und $b gesetzt sind werden gesetzt.

      So! Und jetzt bitte mal auf deutsch. Sorry. Ich kapier kein Wort.

      Ich will die einzelnen Stellen als Bereiche verwenden, dass ich das leich´ter abchecken kann, wo welcher Nutzer drauf zugreifen darf. Egal ob zwei Bytes... Nur kleines Projekt...
      Wie kann ich also 101010 in 1 0 1 0 1 0 aufteilen???

      Vielleicht erklärst Du mir das mal mit dem binär-abspeichern... Leicht??

      1. Hello,

        wenn da nur 1 und 0 drinsteht, dann könnte man das auch als int abspeichern und binär codieren. Braucht dann nur zwei Bytes und Du hättest 16 Bereiche.

        Na und um die wieder zu filtern, muss Du nur verunden:

        $zugriff = $userrights & $bereich

        oder

        $zugriff = ($userrights & $bereich) > 0;

        Bitoperatoren:
        $a & $b Und Bits, die in $a und $b gesetzt sind werden gesetzt.

        So! Und jetzt bitte mal auf deutsch. Sorry. Ich kapier kein Wort.

        Ich will die einzelnen Stellen als Bereiche verwenden, dass ich das leich´ter abchecken kann, wo welcher Nutzer drauf zugreifen darf. Egal ob zwei Bytes... Nur kleines Projekt...
        Wie kann ich also 101010 in 1 0 1 0 1 0 aufteilen???

        Vielleicht erklärst Du mir das mal mit dem binär-abspeichern... Leicht??

        Bitteschön. Wo Du sooo nett fragst.

        Jedes Bit einer 16-Bit-Zahl (unsigned integer) steht für einen Bereich:

        00000000 00000001  =>  1  => Bereich 1
        00000000 00000010  =>  2  => Bereich 2
        00000000 00000100  =>  4  => Bereich 3
        00000000 00001000  =>  8  => Bereich 4
        00000000 00010000  => 16  => Bereich 5
        ...

        00000000 00010001  => 17  => Bereich 1 und Bereich 5
        ...

        Um nun aus der Zahl die Stelle(n) des (der) gesetzten Bits herauszubekommen, wendet man einfach eine Vergleichsfunktion des Prozessors an: das bitweise Verunden.

        00010000      Das ist die Maske für Bereich 5
        und    00110001      Das sind die Rechte des Users (zusammen 49)
               --------
               00010000      Das ist das Ergebnis. Nur bei Bit Nr 4
                             haben Maske UND User eine 1

        Bits werden von rechts gezählt, beginnend
                             bei 0.   Der Wert des Bits beträgt 2^Bitnr.

        Allerdings weise ich schon jetzt auf ein Manquo Deier Überlegungen hin. Es gibt nämlich durchaus verschiedene Rechte in jedem Berich. Das solltest Du beim Design von vornherein einplanen:

        sehen
        suchen (Listen)
        anlegen
        löschen
        ausführen
        ...

        Ich hoffe, Du kommst mit der Binärlogik nun zurecht.

        Grüße

        Tom

        1. Bei meinem Projekt gibts nur einen, der das Rechte zum schreiben hat...
          Ich möchte nur zwischen verschiedenen Usern unterscheiden.

          Die einen dürfen vieles, andere dürfen eben nur weniges, andere etwas...

  2. Hallo,

    Dann hab ich ne Variable wie z.B.
    $Zugriff="1000000000"; //User darf nur auf Bereich 1
    Anderer User:
    $Zugriff="1001001010"; //User darf in Bereiche 1, 4, 7 und 9

    $Zugriff="1111111111"; //===ADMIN

    Wie kann ich diesen String 101010101000 zerpflücken und gleichzeitig wieder in ein Array abspeichern, dass ich anschließend nur noch abfragen muss, ob im Zugriffsarray dieser Bereich zugelassen ist??

    Greife doch einfach in der Form $Zugriff[0] bis $Zugriff[9] auf den Stringinhalt zu. PHP ermoeglicht das Abgreifen der einzelnen Stringzeichen in einer formal an Arrays angelehnten Form.

    Moeglich waere eine Abfrage wie:
    if($Zugriff[0]!="1"){...}
    usw.

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
    1. Kann man einfach auf einen String so zugreifen wie auf ein Array?? Schon mal ausprobiert?

      1. Hello,

        Kann man einfach auf einen String so zugreifen wie auf ein Array??

        Ja, man kann und darf.

        Schon mal ausprobiert?

        Ja.
          Aber probier es doch selbst mal aus.
          Insbesondere wäre es für Dich wichtig zu wissen, was passiert
          wenn man über den Definitionsberich hinaus zugreift. Also mit
          negativem oder zu großem Index.

        Grüße

        Tom

        1. Insbesondere wäre es für Dich wichtig zu wissen, was passiert
            wenn man über den Definitionsberich hinaus zugreift. Also mit
            negativem oder zu großem Index.

          Sollte nicht passieren, da ich diese Rechte in nem Array für eine überschaubare Anzahl von Nutzern vergebe.

          Z.B. Meine Freunde dürfen fast alles sehen, ich darf alles ändern (und natürlich sehen), andere, die sich online anmelden dürfen nur bestimmte Seiten ansehen... Aber keiner kann in meinem Datenfeld rumfroschen.... Hoffe ich zumindest.

          Wie sicher ist so etwas eigentlich?? Ich speichere die Daten in nem php-File ab in nem Ordner, der nicht in meinem http-Server steht.

          z.B.
          <? $benutzer[]=array(name=>"Admin",rechte=>"1111"); ?>
          <? $benutzer[]=array(name=>"Test",rechte=>"0010"); ?>
          ...

          1. Hello,

            <? $benutzer[]=array(name=>"Admin",rechte=>"1111"); ?>
            <? $benutzer[]=array(name=>"Test",rechte=>"0010"); ?>

            Da kannst Du glaube ich besser den namen des Users als Index benutzen. Dann lässt sich darauf viel besser zugreifen

            $bentutzer=array(); // zum Initialisieren.
             $benutzer["Admin"]["rechte"]="1111";
             $benutzer["Uwe"]["rechte"]="0010";
             $benutzer["Gast"]["rechte"]="0000";

            Grüße

            Tom

            1. Kann man einfach so in php auf Array-Inhalte zugreifen, oder muss ich mein Array umschreiben??

              1. Hello,       <-- Begrüßung wäre nett

                Woraun beziehst Du dich, bitte quoten

                Kann man einfach so in php auf Array-Inhalte zugreifen, oder muss ich mein Array umschreiben??

                Deine Version mit dem Array ist unpraktisch, weil man auf den Namen des Users nicht direkt zugreifen kann.

                Das käme bei Dir dabei heraus

                benutzer
                  [0][name] => Andreas
                     [rechte] => 011011000
                  [1][name] => Admin
                     [rechte] => 111111111

                Bei mir:

                benutzer
                  [Andreas][rechte]=> 011011000
                  [Admin]  [rechte]=> 111111111

                Grüße         <-- Schlussformel ist auch nicht schlecht.

                Tom

                1. Hallo Tom,

                  benutzer
                    [0][name] => Andreas
                       [rechte] => 011011000
                    [1][name] => Admin
                       [rechte] => 111111111

                  Bei mir:
                  benutzer
                    [Andreas][rechte]=> 011011000
                    [Admin]  [rechte]=> 111111111

                  Hat auch Nachteile, da meine Nutzer das Recht haben Ihren Namen usw. zu ändern. Mein array sieht in echt so aus:

                  <?php $benutzer=array(id=>"0",name=>"Fabe",rechte=>"1111"); ?>
                  <?php $be......

                  Bei einer Neuanmeldung wird dann einfach eine neue Zeile hinzugefügt und die ID mit count ausgefüllt.

                  Ich kann dann auf den Benutzer über seine ID zugreifen. Wenn er seinen Account löscht, werden lediglich die Daten gelöscht, nicht aber seine komplette Zeile.

                  Jetzt noch was allgemeines:
                  Bin neu hier im Forum, aber sehr begeistert, da man SUPER schnell gute Lösungen auf Probleme bekommt. Gibt es hier so was wie Admins?? Ich hab gesehen, dass es hier einige gibt, die fast immer posten. Haben die nix anderes zu tun??

                  Greets Fabienne

    2. Hallo Thomas,

      Greife doch einfach in der Form $Zugriff[0] bis $Zugriff[9] auf den Stringinhalt zu.

      diese Art auf einzelne Zeichen zuzugreifen ist deprecated. Laut [1] sollten statt eckigen Klammern geschweifte verwendet werden: $Zugriff{0} bis $Zugriff{9}.

      Grüße aus Nürnberg
      Tobias

      [1] http://www.php.net/manual/de/language.types.string.php#language.types.string.substr

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. Hallo,

        diese Art auf einzelne Zeichen zuzugreifen ist deprecated. Laut [1] sollten statt eckigen Klammern geschweifte verwendet werden: $Zugriff{0} bis $Zugriff{9}.

        Stimmt, das wollte ich mir auch mal gemerkt haben und es macht auch Sinn, um den Unterschied zu einem "echten" Array anzuzeigen. Vielleicht macht meine Brainware jetzt den []-->{}-Replace ;-).

        MfG, Thomas

        1. Hello Ihr zwei und alle Anderen,

          diese Art auf einzelne Zeichen zuzugreifen ist deprecated. Laut [1] sollten statt eckigen Klammern geschweifte verwendet werden: $Zugriff{0} bis $Zugriff{9}.

          Stimmt, das wollte ich mir auch mal gemerkt haben und es macht auch Sinn, um den Unterschied zu einem "echten" Array anzuzeigen. Vielleicht macht meine Brainware jetzt den []-->{}-Replace ;-).

          Ab welcher PHP-Version funktioniert das denn?

          Grüße

          Tom

          1. Hallo Tom,

            Stimmt, das wollte ich mir auch mal gemerkt haben und es macht auch Sinn, um den Unterschied zu einem "echten" Array anzuzeigen. Vielleicht macht meine Brainware jetzt den []-->{}-Replace ;-).
            Ab welcher PHP-Version funktioniert das denn?

            Keine Ahnung, aber ich vermute mal ab 4.0, da der Syntax mit den eckigen Klammern seit PHP4 deprecated ist und nur noch für die Abwärtskompatibilität funktioniert.

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|