Ankündigung

Einklappen
Keine Ankündigung bisher.

Checkboxgenerierung per Schleife

Einklappen

Neue Werbung 2019

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

  • Checkboxgenerierung per Schleife

    Hallo,

    ich habe ein kleines Problem. Sehe vielleicht auch den Wald vor lauter Bäume nicht.
    Also es gab dies bezüglich schon einige Threads in diesem Forum, aber keines was mir weitergeholfen hätte.

    Ich generiere dynamisch mein Formular aus der Datenbank(Selectboxen ,Radiobuttons,Textfelder, Checkboxen). Das ganze funktioniert auch.
    Sowohl selektierte Boxen und gefüllte Textfelder nach verlassen des Formulars (Step back) wieder anzeígen lassen, als auch das speichern der Einträge dem Benutzer zugeordnet.
    Das einzige Problem das ich dabei habe ist fast schon banal. Habe hunderte sachen ausprobiert, also for,while, foreach...usw. bekomme es aber nicht hin.

    Die angeclickten Checkboxen werden in einem Session-Array gespeichert und in einer Schleife verglichen. Allerdings werden die Checkboxfelder je nach geclickten Checkboxen multipliziert. Das heißt es gibt 5 Einträge in der Datenbank , ich clicke zwei an, und habe dann alle Checkboxen doppelt, die angeclickten bleiben allerdings dann angeclickt.

    Mein Code:

    PHP-Code:
    <?php
    //gibt es ein Sessionarray, wurden also werte geclickt, dann...
    elseif((isset($sess_Checkbox)) && (count($sess_Checkbox)> 0)){
          
          
    //$a_Data ist das Datenbank Array mit den möglichen Checkboxen
           
    for($i=0;$i<count($a_Data);$i++){
             
             
    //die angecklickten Boxen  
             
    foreach($sess_Checkbox as $key => $val){                              
              
    $strHTMLBox .= 
                   
    "<tr><td>".$a_Data[$i]['DESC']."</td><td>  
                    <input type='checkbox' name ='aBox[] ' 
                       value=\"" 
    $a_Data[$i]['SID'] . "\"/ ";
                
                    
    //ist Box angeclickt dann checked
                     
    if($a_Data[$i]['SID'] == $val){   
                  
    $strHTMLBox .= "checked>";
              }
              
    $strHTMLBox .= "</td></tr>";
           }
    //foreach Ende
        
    }//for Ende
    }//elseif Ende
    ?>
    Hoffe ihr könnt mir helfen

    Gruß


  • #2
    Schreibe an den Anfang des Scriptes die Zeile
    PHP-Code:
    error_reporting(E_ALL); 
    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    3. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    4. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    5. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    6. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    7. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt, was eigentlich selbstverständlich sein sollte.

    Gruß
    phpfan

    Kommentar


    • #3
      Danke für die Standardantwort.

      Das Script geht, das ganze sieben seitige Formularscript macht was es soll.
      Ich habe in diesem oben angesprochene Punkt einfach nur ein Denkfehler
      und nach etlichen Versuchen hängt man dann einfach fest, dachte an einen kleinen Hilfsansatz.

      Es ist klar das je mehr Boxen ich clicke je mehr Werte hat die foreach Schleife und je mehr boxen werden dann auch angezeigt.

      Wie ich das umgehen kann das wäre doch eine Hilfe,
      bytheway: error_reporting ist garantiert kein Neuland für mich, nur in dem Fall hilft es mir reichlich wenig...

      Kommentar


      • #4
        YES,YES -- es geht,

        kurz ein Kaffee an der frische Luft und alles ist klar.

        Habe einfach die foreach Schleife direkt vor der if abfrage eingesetzt.
        PHP-Code:
        <?php
           
        foreach($sess_Checkbox as $key => $val){
                 if(
        $a_Data[$i]['SID'] == $val){   
                      
        $strHTMLBox .= "checked>";
                 }
        ?>
        coole Sache...

        Kommentar


        • #5
          PHP-Code:
          <?php
          //$a_Data ist das Datenbank Array mit den möglichen Checkboxen
                 
          for($i=0;$i<count($a_Data);$i++){
                   
                   
          //die angecklickten Boxen  
                   
          foreach($sess_Checkbox as $key => $val){
          ?>
          Wozu gehst du pro möglicher Checkbox nochmal alle angeklickten Checkboxen durch und

          PHP-Code:
          <?php
           
          if($a_Data[$i]['SID'] == $val){   
                     
          $strHTMLBox .= "checked[u]>[/u]";
                  } 
          ?>
          fehlt hier nicht ein "else", das den <input>-Tag schließt oder warum tust du das nur, wenn die Checkbox angeklickt ist?

          Kommentar


          • #6
            Hi, das mit der else ist richtig, habe sie hier weggelassen,wegen Übersicht. tue das also nicht nur wenn Checkbox angeclickt ist.

            Zu Punkt eins,

            Ich muss doch wenn die daten in einer Schleife generiert werden und ich die Checkboxen wieder anzeigen möchte die Schleife der Checkboxgenerierung bei Formularaufruf durchgehen und die Werte die in der Session stehen also die values der CB vergleichen, weil leer bedeutet CB nicht geclickt.
            Der User clickt bei Formular Seite5 Checkboxen an, geht zurück zu Seite 3,4 Und dann wieder zu Seite 5 -- dann sollen, und werden jetzt, alle zuvor gecklickten Checkboxen wieder als angeclickt angezeigt.

            Diese Werte werden dann auch , funktioniert auch , dem User zugeordnet in der DB gespeichert.

            Oder verstehe ich deine Frage falsch..

            Kommentar


            • #7
              sowas wie mir else würd ich zukünftig dazuschreiben
              sonst denken wir doch, dass dein code falsch sei

              Kommentar

              Lädt...
              X