Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit geschickter Auswertung von Datenbankeinträgen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Problem mit geschickter Auswertung von Datenbankeinträgen

    Guten Tag,

    in meiner DB steht in der Tabelle "spezialrechte" die rechte die der user auf bestimmte sachen im admin center hat. Das ist so aufgebaut:

    id | user_id | rechte | group_id
    1 | 48 | seitenerstellen| xxxx
    2 | xxxx | menuverwalten | 2

    (XXXX) steht für keinen inhalt


    so nun mache ich im admin center kurz vor der login überprüfung eine abfrage die alle rechte auslesen soll die der user hat... in dem fall hat der user die id 48 und ist in einer gruppe die die id 2 hat...


    das ganze frag ich so ab:

    PHP-Code:
    $erstab "SELECT * FROM spezialrechte WHERE user_id='$user_id' OR group_id = '$group_id'            GROUP BY rechte";
    $spezab $db->query($erstab) or die(mysql_error());
    $userspezrechte mysql_fetch_array($spezab); 
    ich weis etz nich genau ob das so stimmt will auf jeden fall eben alle werte nur einmal haben also nicht dass man einmal das recht für seitenerstellen 2mal hat....

    gut nun folgt weiter unten das menü und je nachdem was man für rechte man hat sollen eben die menüpunkte angezeigt werden....

    dort hab ich eine schleife die menüeinträge aus der db abfrägt...
    und in der schleife eine solche foreach...

    wie kann ich machen das in value wirklich nur das recht steht weil nun stehen gerade alle einträge drin und auch 2mal obwohl nur eintrag vorhanden ist...
    PHP-Code:
         foreach ($userspezrechte as $value)
         {
    echo 
    $value;
        } 
    dann würde ich quasi sowas machen if($menueintrag=="value") {echo "Menübearbeiten"; }

    wäre schön wenn ihr mir helfen könnt und macht man das so? weil es sind viele menü einträge dass heist für jeden menü eintrag dann eine solche große foreach... geht dass auch anders "schneller" ?
    könnte auch für jeden menüeintrag dann ne abfrage starten und abfragen ob der eintrag in der db existiert mit den rechte namen aber das ist auch jeden fall noch langsammer

    mfg

  • #2
    Weise die Rechte nur über die Gruppen zu und nicht direkt über den Benutzer. Das gibt dann eine zusätzliche Tabelle Gruppen und eind Gruppenzugehörigkeit. Die Recte des Benutzers liest du dann in einen Array, um diesen dann mit den Seiten vergleichen zu können. Hier einfach eine kleine Skizze:
    PHP-Code:
    $sql "
        SELECT
            recht
        FROM
            gruppen g
        INNER JOIN
            gruppenzugehörigkeit gz ON g.id = gz.grp_id
        INNER JOIN
            user u ON gz.usr_id = u.id
        WHERE
            u.user = 
    $user";
    $res $db->query($sql) or exit($db->error);
    $rechte = array();
    while (
    $row $res->fetch_object){
        
    $rechte[] = $row->recht;
    }
    ...
    if (
    in_array('bearbeiten'$rechte){
        
    // Link ausgeben, etc

    Gruss
    L

    Kommentar


    • #3
      genau das hab ich gesucht wobei ich glaub ich in_array mit isset esetzen werden in_array soll nicht der speedhit bei großen arrays sein

      mfg

      Kommentar


      • #4
        genau das hab ich gesucht wobei ich glaub ich in_array mit isset esetzen werden in_array soll nicht der speedhit bei großen arrays sein
        Was so einfach nicht ist, weil:
        in_array bezieht sich auf die Werte
        isset bezieht sich auf die Arrayschlüssel

        Daher ist der Geschwindigkeitsunterschied logisch: in_array führt quasi eine Suche durch. Mit hoher Wahrscheinlichkeit ist der 'Speed' ohnehin zu vernachlässigen.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

          PHP-Code:
          $userspezrechte mysql_fetch_array($spezab);
          $rechtar = array();
          foreach(
          $userspezrechte as $row) {
          $rechtar[] = $row["rechte"];

          und dann eben if(isset($rechtar['name']))

          Kommentar


          • #6
            Zitat von Dominik Beitrag anzeigen
            habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

            PHP-Code:
            $userspezrechte mysql_fetch_array($spezab);
            $rechtar = array();
            foreach(
            $userspezrechte as $row) {
            $rechtar[] = $row["rechte"];

            und dann eben if(isset($rechtar['name']))
            So und du meinst wenn du selbst mit foreach() anstatt in_array() alle Elemente durchgehst ist das schneller?

            Kommentar


            • #7
              Zitat von Dominik Beitrag anzeigen
              habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

              PHP-Code:
              $userspezrechte mysql_fetch_array($spezab);
              $rechtar = array();
              foreach(
              $userspezrechte as $row) {
              $rechtar[] = $row["rechte"];

              und dann eben if(isset($rechtar['name']))
              das kann doch auch gar nicht funktionieren...

              Du fragst hier nach einen Index (Name) in einen Array, aber der existiert nicht...

              du kannst es so machen, dann klappt das...
              PHP-Code:
              foreach($userspezrechte as $row) {
              $rechtar$row'rechte' ] ] = true;

              [B]Mfg Tomtaz[/B]
              [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

              Kommentar


              • #8
                ähm nein damit möchte ich ja nur mein array vorbeireiten damit ich es für if(isset...) verweden kann





                ja und ich denke eine for + 50 issets ist schneller als 50 in_array

                Kommentar


                • #9
                  Zitat von Dominik Beitrag anzeigen

                  ja und ich denke eine for + 50 issets ist schneller als 50 in_array

                  Dieser Ansicht bin ich nicht. Da For schon mal langsamer wie foreach oder while ist, kann das ja schon nicht aufgehen.

                  Inwieweit das schneller ist, kann ich dir allerdings nicht sagen. Aber versuche es doch aus...
                  [B]Mfg Tomtaz[/B]
                  [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

                  Kommentar


                  • #10
                    naja es ist ja eine foreach und muss ja nur einmal ausgeführt werden....


                    da dann das isset auf jeden fall schneller als die inarrays sind gleichts das auf jeden fall aus...

                    hm ja ich weis net bin zurseit weng lust los ^ geht es euch nicht auch mal so

                    Kommentar


                    • #11
                      Zitat von Dominik Beitrag anzeigen
                      hm ja ich weis net bin zurseit weng lust los ^ geht es euch nicht auch mal so
                      Manchmal ja, aber nicht immer, also eher selten, aber es kommt vor...
                      [B]Mfg Tomtaz[/B]
                      [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

                      Kommentar


                      • #12
                        Ist doch HUPE bei 50 Datensätzen. for, foreach, isset... Hauptsache der Code ist übersichtlich!

                        Sehr schön übrigens dieses Zitat:
                        ähm nein damit möchte ich ja nur mein array vorbeireiten
                        Habe herzlich gelacht, bei der bildlichen Vortstellung. Danke!!
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar


                        • #13
                          hm also ich habe es nun so gemacht

                          PHP-Code:
                          $testen "SELECT rechte FROM spezialrechte WHERE user_id='$user_id' OR group_id='$group_id' group by rechte";
                          $testen1 $db->query($testen) or die(mysql_error());
                          $testen2 mysql_fetch_array($testen1);
                          $rechtar = array();
                          foreach(
                          $testen2 as $row) {
                          $rechtar[$row] = true;
                          }  
                          var_dump($rechtar); 


                          aber irgentwie steht dann nur immer der letzte beitrag drin also erfrägt nur einen wert ab obwohl es in der db mehr gibt.....

                          sehr komisch wüsst ihr woran das liegen kann?

                          Kommentar


                          • #14
                            stand auf dem schlacuh habs gelöst danke

                            Kommentar

                            Lädt...
                            X