Auswerten von Formularingaben

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

  • Auswerten von Formularingaben

    Hallo zusammen,

    ich brauche keinen Code von Euch, sondern vielmehr einen Denkanstoß. Ich habe in einer Datenbank Werte nach ca. 35 Bereichen gespeichert. Jetzt benötige ich eine Berechtigungsvergabe, mit der ich steuern kann, dass z.B. Mitarbeiter/User 'A' die Bereiche 1,14,27 und 28 sehen darf, der MA/User 'B' hingegen 2,3 und 5 ... ist klar soweit ?!

    Jetzt habe ich eine Tabelle, in der ich User-ID und Bereich speicher. Das Formular zur Rechtevergabe würde ich ich gerne mit Checkboxes realisieren. Und nun zur eigentlichen Frage:

    Würdet ihr zuerst alle Sätze aus der Datenbank für den User löschen und anschließend für jedes Häckchen in den Checkboxes einen neuen Eintrag in die DB schreiben oder würdet ihr jede einzelnen Zeile prüfen ... oder würdet ihr es ganz anders machen ?!

    Ziel soll eine Möglichs einfache Rechtevergabe sein ...

    Danke für Eure Hilfe!

  • #2
    Mal ein Vorschlag

    SQL - Tabelle :

    Userid, username, passwort, berechtigung

    berechtigung ist varchar 100 meinetwegen

    darin ein string der form 1|15|56

    d.h. er darf die bereiche 1, 15 und 56 sehen

    benutze explode und implode

    also
    PHP-Code:
    $berechtigung = array()
    $berechtigung explode('|'$string_aus_db
    dann mit einer while schleife das array durchgehen und entsprechend anzeigen was erlaubt/gewünscht ist

    zum speichern machst du ein array

    PHP-Code:
    $berecht = array();
    $berecht[0] = '1';
    $berecht[1] = '15';
    $berecht[2] = '56'
    PHP-Code:
    $string_der_in_die_DB_soll implode)['|'$berecht); 
    schau am besten unter de.php.net die Funktionsreferenzen an...

    Das Formular zum rechte setzen erstellen, und der Auswerteskript geniert dann das $berecht array bei allen chekcboxen die mit trim() behandelt wurden und > '' sind

    Hoffe das hilft dir weiter


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      hmm,

      ich möchte mich nur mal entschieden gegen das abspeichern von mehreren daten in einer zelle aussprechen ...

      das, was du machen willst, ist für mich einer der klassischen fälle für eine db, ... du willst zwei tabellen in relation setzen, und das mach bitte mit ner extra tabelle, und nicht mit son verkorksten mist, wie mehrere infos in eine zelle. just my ....
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        würde dafür eine zweite tabelle anlegen.

        PHP-Code:
        //Tabelle_Berechtigung
        id user bereich1 bereich2 usw 
        id = autoindex
        user = eine eindeutige userid aus der usertabelle
        bereiche = 1 für ja 0 für nein



        Würdet ihr zuerst alle Sätze aus der Datenbank für den User löschen und anschließend für jedes Häckchen in den Checkboxes einen neuen Eintrag in die DB schreiben oder würdet ihr jede einzelnen Zeile prüfen ... oder würdet ihr es ganz anders machen ?!
        erst prüfen, schreiben, dann löschen.
        mfg
        marc75

        <Platz für anderes>

        Kommentar


        • #5
          Original geschrieben von marc75
          würde dafür eine zweite tabelle anlegen.
          argh, aber doch nicht so! wie breit soll die tabelle denn werden? wenn du dann 38465 kategorien hast? btw: es gibt ne begrenzung der spaltenanzahl.
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            Original geschrieben von derHund
            argh, aber doch nicht so! wie breit soll die tabelle denn werden? wenn du dann 38465 kategorien hast? btw: es gibt ne begrenzung der spaltenanzahl.
            er kann auch so:

            PHP-Code:

            id 
            userid bereiche 
            bereiche = die id des erlaubten bereichs
            mfg
            marc75

            <Platz für anderes>

            Kommentar


            • #7
              id | userid | bereiche |
              Da ist jetzt noch das Feld ID überflüssig. Und bei der Form (userid, bereich) war er ja selber schon. Am besten natürlich noch ein Primärschlüssel über beide Felder.

              Es ging doch eigentlich darum, wie man die Änderungen in die Datenbank übernimmt.
              Und da wäre es am einfachest, so wie Du es schon geschrieben hast, erstmal alle Einträge des User löschen und dann die neuen wieder zu schreiben.
              Eleganter wäre natürlich die neuen Berechtigungen mit den alten zu vergleichen und nur die Unterschiede in der Datenbank zu 'korrigieren'. Also sowas:
              PHP-Code:
              foreach ($neueberechtigungen as $bereich)
                  if (!
              in_array($bereich$alteberechtigungen)) // INSERT INTO ...
              foreach ($alteberechtigungen as $bereich)
                  if (!
              in_array($bereich$neueberechtigungen)) // DELETE FROM ... WHERE ... 
              (mit $neueberechtigungen und $alteberechtigungen als Arrays mit Bereich-IDs)

              Kommentar


              • #8
                Original geschrieben von derHund
                hmm,

                ich möchte mich nur mal entschieden gegen das abspeichern von mehreren daten in einer zelle aussprechen ...

                das, was du machen willst, ist für mich einer der klassischen fälle für eine db, ... du willst zwei tabellen in relation setzen, und das mach bitte mit ner extra tabelle, und nicht mit son verkorksten mist, wie mehrere infos in eine zelle. just my ....
                Dann schlag doch mal vor, wie du das läsen willst.
                Ich denke nicht, dass eine 2. tabelle, wo dann 80% der spalten überhaupt keine bedeutung, sehr sinnvoll ist, zumal bei hoher useranzahl viel speicherplatz verschwendet wird und das system langsamer ist, da mehr spalten abgefragt werden...


                An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                Kommentar


                • #9
                  Ich denke nicht, dass eine 2. tabelle, wo dann 80% der spalten überhaupt keine bedeutung, sehr sinnvoll ist, zumal bei hoher useranzahl viel speicherplatz verschwendet wird und das system langsamer ist, da mehr spalten abgefragt werden...
                  du willst doch nicht etwa andeuten, daß du pro bereich eine spalte anlegen würdest? dann würde ich schon eher alles in eine zelle packen

                  id|uid|bereich

                  basta.

                  Code:
                  function checkIfUserIsAllowedToEnterThisSpecialSection(...) {
                    SELECT id 
                    FROM table
                    WHERE uid = 'ne_uid_halt,_aus_der_session_oder_dem_aufruf'
                    AND bereich = 'der_bereich_halt'
                    num_rows || fetch
                  }
                  fiele mir spontan ein, ist imho zumindest eleganter als o.g. methode

                  um aber mal ontopic zu gehen:

                  ich würde wahrscheinlich auch erst alle löschen, und dann neu setzen ... hmm
                  Zuletzt geändert von derHund; 31.01.2004, 13:01.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Original geschrieben von derHund
                    id|uid|bereich
                    Nur mal so'ne Frage, wofür ist das id-Feld notwendig? Ich halte das für überflüssig.

                    Kommentar


                    • #11
                      hmm,

                      ich geb meinen einträgen immer ne id, gewohnheitssache ...
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        Danke für die zahlreichen Beiträge. Habe mir gerade alles mal in Ruhe durchgelesen und bin zu folgendem Schluss gekommen: eine Tabelle mit

                        id|user|recht

                        dann schreibe ich die neuen Rechte per Update rein und anschließend erstelle ich mit imlode eine Zeichenfolge nach dem Muster "1,2,3,4,5" mit den zu löschenden Rechten und übergebe die an Delete ... where id in (1,2,3,4,5)

                        Vielen Dank!

                        Kommentar

                        Lädt...
                        X