Checkboxen + Arrays = Kopfschmerzen

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

  • Checkboxen + Arrays = Kopfschmerzen

    Hallo,

    mir bereitet gerade ein eher "ungewöhnlicheres" Problem Kopfschmerzen.
    Aus dem Vorherigen Beitrag ( Bei dem es um die Rechteverwaltung eines Users ging), habe ich mir ein System ausgedacht, die Rechtevergabe bezüglich dynamisch angelegter Texte ausgedacht. In der Datenbank
    wird in eine Spalte mittels serialize ein Array geschrieben.
    Hier die Struktur des Arrays... (Sorry, dass es so lang ist)

    PHP-Code:
    Array
    (
        [
    t_content] => Array
            (
                [
    create] => 1
                
    [status] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                        
    [3] => 1
                        
    [4] => 1
                        
    [5] => 1
                        
    [6] => 1
                        
    [7] => 1
                        
    [8] => 1
                        
    [9] => 1
                        
    [10] => 1
                        
    [11] => 1
                        
    [12] => 1
                        
    [13] => 1
                        
    [14] => 1
                        
    [15] => 1
                        
    [16] => 1
                        
    [17] => 1
                        
    [19] => 1
                        
    [20] => 1
                        
    [21] => 1
                        
    [22] => 1
                        
    [47] => 1
                        
    [48] => 1
                        
    [49] => 1
                        
    [50] => 1
                        
    [51] => 1
                        
    [52] => 1
                        
    [53] => 1
                        
    [55] => 1
                        
    [56] => 1
                        
    [57] => 1
                        
    [58] => 1
                        
    [59] => 1
                        
    [60] => 1
                        
    [61] => 1
                        
    [62] => 1
                        
    [63] => 1
                        
    [64] => 1
                        
    [65] => 1
                        
    [66] => 1
                        
    [67] => 1
                        
    [68] => 1
                        
    [69] => 1
                        
    [70] => 1
                        
    [71] => 1
                        
    [72] => 1
                    
    )

                [
    edit] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                        
    [3] => 1
                        
    [4] => 1
                        
    [5] => 1
                        
    [6] => 1
                        
    [7] => 1
                        
    [8] => 1
                        
    [9] => 1
                        
    [10] => 1
                        
    [11] => 1
                        
    [12] => 1
                        
    [13] => 1
                        
    [14] => 1
                        
    [15] => 1
                        
    [16] => 1
                        
    [17] => 1
                        
    [19] => 1
                        
    [20] => 1
                        
    [21] => 1
                        
    [22] => 1
                        
    [47] => 1
                        
    [48] => 1
                        
    [49] => 1
                        
    [50] => 1
                        
    [51] => 1
                        
    [52] => 1
                        
    [53] => 1
                        
    [55] => 1
                        
    [56] => 1
                        
    [57] => 1
                        
    [58] => 1
                        
    [59] => 1
                        
    [60] => 1
                        
    [61] => 1
                        
    [62] => 1
                        
    [63] => 1
                        
    [64] => 1
                        
    [65] => 1
                        
    [66] => 1
                        
    [67] => 1
                        
    [68] => 1
                        
    [69] => 1
                        
    [70] => 1
                        
    [71] => 1
                        
    [72] => 1
                    
    )

                [
    delete] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                        
    [3] => 1
                        
    [4] => 1
                        
    [5] => 1
                        
    [6] => 1
                        
    [7] => 1
                        
    [8] => 1
                        
    [9] => 1
                        
    [10] => 1
                        
    [11] => 1
                        
    [12] => 1
                        
    [13] => 1
                        
    [14] => 1
                        
    [15] => 1
                        
    [16] => 1
                        
    [17] => 1
                        
    [19] => 1
                        
    [20] => 1
                        
    [21] => 1
                        
    [22] => 1
                        
    [47] => 1
                        
    [48] => 1
                        
    [49] => 1
                        
    [50] => 1
                        
    [51] => 1
                        
    [52] => 1
                        
    [53] => 1
                        
    [55] => 1
                        
    [56] => 1
                        
    [57] => 1
                        
    [58] => 1
                        
    [59] => 1
                        
    [60] => 1
                        
    [61] => 1
                        
    [62] => 1
                        
    [63] => 1
                        
    [64] => 1
                        
    [65] => 1
                        
    [66] => 1
                        
    [67] => 1
                        
    [68] => 1
                        
    [69] => 1
                        
    [70] => 1
                        
    [71] => 1
                        
    [72] => 1
                    
    )

            )

        [
    termine] => Array
            (
                [
    create] => 1
                
    [status] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                    
    )

                [
    edit] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                    
    )

                [
    delete] => Array
                    (
                        [
    1] => 1
                        
    [2] => 1
                    
    )

            )

        [
    start] => 1
        
    [downloads] => 1
        
    [permissions] => 1
        
    [gallery] => Array
            (
                [
    create] => 1
                
    [edit] => 1
                
    [delete] => 1
            
    )


    Jetzt gehe ich das gesamte Array durch, und bilde mir ein Formular:

    PHP-Code:
    $temp $row[perms];
    foreach (
    $row[perms]['content']['status'] as $key => $value) {
    $query mysql_query("SELECT title FROM content WHERE id='$key'",$link);
    $row   mysql_fetch_row($query);

    $edit $temp['content']['edit'][$key];
    $del  $temp['content']['delete'][$key];

    if(
    $edit == "1")
      {
       
    $e 'checked="checked"';
      }
      else
          {
           
    $e "";
          }


    if(
    $del == "1")
      {
       
    $d 'checked="checked"';
      }
      else
          {
           
    $d "";
          }

    if(
    $value == "1")
      {
       
    $s 'checked="checked"';
      }
      else
          {
           
    $s "";
          }

    $inhalt .= '<tr style="background-color: #DBE2FD;">';
    $inhalt .= '  <td>'.$row[0].'</td>';
    $inhalt .= '  <td align="right"><input type="Checkbox" name="edit['.$key.']" value="'.$edit.'" '.$e.'></td>';
    $inhalt .= '  <td align="right"><input type="Checkbox" name="del['.$key.']" value="'.$del.'" '.$d.'></td>';
    $inhalt .= '  <td align="right"><input type="Checkbox" name="status['.$key.']" value="'.$value.'" '.$s.'></td>';
    $inhalt .= '</tr>';



    Das Problem ist, dass beim verändern der Checkboxen diese aus $_POST
    verschwinden... Ich weiß somit nicht wie der Wert vor war, und weiß nicht, welchen Wert nun neu ist. Dazu kommt noch, dass die Array-Schlüssel die ID's der Texte darstellen, und damit nicht verändert werden dürfen..

    Kann mir jemand beim Erstellen des Arrays auf die Sprünge helfen?
    Stehe nach 20 Stunden scripting auf dem Schlauch...


    Viele Grüße

    David
    Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

  • #2
    worum geht es dir? um das zwischenspeichern der alten werte?

    [ja] zb. session, oder hast du die nicht sogar in der db?
    [nein] kein plan

    Kommentar


    • #3
      Ich habe die Werte sowohl in der Session als auch in der Datenbank.
      Die Rechte sollen für die Aktuelle sitzung nicht immer aus der DB geholt werden.

      Naja, die schwierigkeit die ich habe ist die Checkboxen so auszuwerten,
      dass ich wieder ein Array in der gezeigten Form habe, die ich danach wieder in die Datenbank und in das Array schreibe.


      Viele Grüße

      David
      Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

      Kommentar


      • #4
        Ich habe es geschafft, das Thema kann als "Erledigt" markiert werden

        Fehleranalyse: Ich habe versucht ein Neues Array aus den Elementen zu bauen. Bedacht habe ich nicht, dass durch das Entfernen des Häkchens in einer Checkbox der Wert der Checkbox NICHT übermittelt wird.
        Also habe ich jetzt einen Vergleich zweier Arrays gemacht. Fehlt ein Wert, wir er als "0" eingeschoben und ist damit existent.

        Das ist mein Code:

        PHP-Code:
            foreach ($temp['content']['edit'] as $key => $value
                        {
                           if(!isset(
        $_POST['edit'][$key]))
                             {
                                   
        $_POST['edit'][$key] = "0";
                             }
                             else
                                  {
                           
        $_POST['edit'][$key] = "1";
                                  }

                          if(
        $temp['content']['edit'][$key] != $_POST['edit'][$key])
                             {
                                   
        $temp['content']['edit'][$key] = $_POST['edit'][$key];
                             } 
                        } 
        Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

        Kommentar

        Lädt...
        X