Übergeben von Checkbox-Ergebnissen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Übergeben von Checkbox-Ergebnissen

    Liebe Community,

    nach langer Zeit melde ich mich wieder zu Wort mit einem komplizierten Problem. (Meiner Meinung nach)

    Ich verwende ein Berechtigungssystem welches an eine SQL-Datenbank angeknüpft ist um so Benutzern das Betreten mancher Seiten gewähren zu können.
    Jedem Benutzer kann man gewisse Berechtigungen (Nachfolgend Permissions) setzen oder entfernen - je nachdem.

    Im Administratoren-Bereich gibt es eine Seite, bei der man Benutzerbearbeiten kann. Durch einen GET-Parameter wird die ID des zu bearbeitenden Users festgelegt.
    Im Bearbeitungsmodus eines Benutzers kann ich die Permissions (Seiten-Zugriffe) festlegen und verwalten.



    Wenn ich beispielsweise einem Benutzer eine Permission entferne (per Unchecken der Checkbox) soll gecheckt werden, ob der Benutzer diese Permission hat, wenn ja dann wird der Datensatz aus der Datenbank gelöscht.

    Kurze Erklärung zum Aufbau der Permissions in der Datenbank:
    Es gibt eine Tabelle in der die einzelnen Namen der Permissions in Define- und Klartextname angegeben sind.


    Dann gibt es eine Tabelle, wo die Permissions Benutzer zugewiesen werden.


    Es wird überprüft, ob in der Tabelle "site_permissions" (Die Tabelle wo die Permissions Benutzer zugewiesen werden) ein Datensatz mit dem entsprechenden Namen der Permission und der User-ID besteht.
    Wenn ja, hat er die Berechtigung. - Wenn nicht, dann logischerweise nicht.



    Zurück zu den Checkboxen:
    Die Checkboxen werden dynamisch durch die Datenbank generiert. Es geht eine While-Schleife durch die Tabelle wo die Permissions definiert werden durch, und listet alle auf.
    Dann wird für jede Checkbox gefragt, ob der Benutzer die Permission der angesprochenen Seite hat - oder nicht. (Wenn ja -> Checked; Wenn nicht -> /)



    Was ich möchte:
    Beim Absenden des Formulars, soll gecheckt werden, ob sich was geändert hat.
    - Wenn ja: Was sich geändert hat. Sollte ein zuvor angehaktes Kästchen abgewählt worden sein, wird in der Datenbank die entsprechende Permission abhängig von User-ID gelöscht.
    - - - - - - - Sollte ein zuvor nicht angehaktes Kästchen gewählt werden, wird in der Datenbank ein Datensatz mit der jeweiligen Permission und der User-ID erstellt.


    Meine Codes:
    1. Erstellung der Checkboxen
      [quote]<?
      $permissions_sql = "SELECT * FROM `site_permissions_define`";
      $query_perm = mysql_query($permissions_sql);
      while($row_perm = mysql_fetch_assoc($query_perm)) { ?>
      <div class="checkbox">
      <label>
      <input type="checkbox" name='permission[]' value="<? echo $row_perm["id"] ?>" <? if(expermission($id,$row_perm["define"]) > 0) { echo "checked"; } ?> />
      <? echo $row_perm["name"]; ?>

      </label>
      </div>
      <? } ?>[/quote]
    2. Submit-Feld
      [quote] <input type="submit" class="btn btn-primary btn-sm" name="site_send_useredit" value="Benutzeränderungen speichern" />[/quote]
    3. Verarbeitung des Formulars
      [quote]if(isset($_POST["site_send_useredit"])) {
      echo "<br />";
      if($_POST["cms_username"] == "" OR $_POST["cms_vorname"] == "" OR $_POST["cms_nachname"] == "" OR $_POST["cms_mail"] == "")
      {
      notify("danger","","Folgende Felder dürfen nicht leer sein:<ul><li>Username</li><li>Vorname</li><li>Nachname</li><li>E-Mail</li></ul>");
      } else {
      // Übermittlung Formular

      }

      }[/quote]
  • Hey Montero,
    ich würde dir folgendes Vorgehen vorschlagen: Beim Verarbeiten der Formulareingaben (Checkboxen) holst du dir erneut alle Permissions des Benutzers aus der Datenbank und packst diese dann in ein assoziatives Array bei dem der Index der Permissionname ist. Einfach aus dem Grund, dass sich, während du den Benutzer bearbeitest, ja jemand anders an dem Benutzer "vergehen" kann - also die Permissions in die Zeit, in der du sie setzt, geändert hat. Wenn ich richtig denke und dich richtig verstehe, würde ich mir auch noch alle vorhandenen Permissions aus der Datenbank holen - ebenfalls in ein Array.

    Das Formular würde ich vorher noch so gestalten, dass du eine assoziative Wertegruppe, wie sich das wohl schimpft, vom Formular bekommst.

    Kleines Snippet dazu:

    Quellcode

    1. foreach($allPermissions AS &$v) {
    2. if(isset($_POST['permission'][$v])) {
    3. // soll laut Formular gegeben werden
    4. if(!isset($userPermissions[$v])) {
    5. // wenn er die Permissions noch nicht hat werden sie hier gegeben
    6. }
    7. }
    8. else {
    9. if(isset($userPermissions[$v])) {
    10. // wenn er die Permissions besitzt, werden sie hier genommen
    11. }
    12. }
    13. }
    Alles anzeigen


    Ich hoffe ich habe dich richtig verstanden - ansonsten gib mir bitte Bescheid! :)

    Liebe Grüße,
    Vincent
    "Das müsste jetzt funktionieren..."

    ---
    Mit freundlichen Grüßen,
    Vincent Petritz