Ankündigung

Einklappen
Keine Ankündigung bisher.

checkboxen

Einklappen

Neue Werbung 2019

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

  • checkboxen

    Hallo,
    ich habe hier ein Problem mit checkboxen.
    Ich habe hier eine Container Klasse (gab es mal als Workshop im Internet)
    die es erlaubt bei einem mehrseitigem Formular hin und zur�ck zu navigieren. Das funktioniert mit text und radioboxen auch einwandfrei.
    Jetzt komme ich an eine Stelle im Formular wo ich checkboxen verwenden m�chte. Die werte der checkboxen werden weitergegeben allerdings werden die angeklickten checkboxen nicht angezeigt.

    PHP-Code:
    <?PHP
    // Textfelder funktionieren
    <input type="text" name="text1" value="<?=$container->fields[text1]; ?>" size="30">

    // Radiobutton funktionieren
    <input type="radio" name="datei_name" value="<? echo $daten[datei_name] ?>" <? echo $container->fields[datei_name]==$daten[datei_name] ? 'checked':''?> >

    //Das Problem checkboxen
    <input type="checkbox" name="type[]" value="<? echo $row[2] ?>" <? echo $container->fields[type]==$row[2] ? 'checked':''; ?> >
    ?>
    Die checkboxen sind in einer while schleife.

    print_r($container->fields); zeigt mir das die eingegebenen Werte der
    checkbox auch �bergeben werden. Nur beim zur�ck Navigieren werden die ausgew�hlten checkboxen nicht angezeigt.
    Code:
    [type] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
            )
    Ich poste die Container klasse mal mit:
    PHP-Code:
    <?PHP
    class c_container
    {
        var 
    $fields;
        var 
    $containername;
        var 
    $isSet=0//Objektstatus

    function c_container($name)
    {
        
    $this->containername=$name;
    if(
    $_SESSION[$this->containername])
    {
      
    $this $_SESSION[$this->containername];
      
    $this->isSet=1;
    }
    else
            
    $_SESSION[$this->containername]=$this;
    }

    function 
    setObj($arr)
    {
        if(
    is_array($arr))
        {
                foreach(
    $arr as $key=>$field)
                {
                 
                     
    $this->fields[$key]= $field;
                 }
            
    $this->isSet=1;
            
    $_SESSION[$this->containername]=$this;
            
        }
    }

    function 
    getField($id="")
        {
            
    //attribut zur�ckgeben
            //wenn id mit�bergeben wird, dann spezielles sonst alle attribute
            
    $att = ($id)?$this->fields[$id]:$this->fields;
            return 
    $att;
        }


    function 
    deleteField($id="")
    {
            if(
    $id)
            {
                unset(
    $this->fields[$id]);
                
    $this->isSet=1;
                
    $_SESSION[$this->containername]=$this;
            }
    }


    function 
    clearContainer()
        {
            
    //wert reinitialisieren.
            
    $this->fields=array();
            
    $this->isSet=0;
          
    $_SESSION[$this->containername]=$this;
        }


    function 
    testdelux($cont,$level=0)
    {
            
    //testschleife (rekursiv)
            
    $level++;
            foreach(
    $cont as $key=>$wert)
          {
              if(
    is_array($wert))
                  
    $this->testdelux($wert,$level);
                else
                    echo 
    "LEVEL: $level KEY: $key WERT: $wert 
    "
    ;
            }
    }

    }
    ?>

  • #2
    input/checkbox funktioniert wie input/radio.
    <input type="checkbox" name="type[]" value="<? echo $row[2] ?>" <? echo
    $container->fields[type]==$row[2] ? 'checked':''; ?> >
    Das sieht schon anders aus als die Zeilen davor. fields[type], $row[2] ....kommt davort alles nicht vor. Wie sollen wir also den Fehler erkennen können? Die Glaskugeln sind mal iweder in der Reinigung.

    Bei http://www.php.net/manual/de/language.types.array.php den Abschnitt "Warum ist $foo[bar] falsch?" bearbeiten.
    Werte testweise ausgeben lassen.
    echo 'type: ', $container->fields['type'], ', row2:', $row[2];

    Kommentar


    • #3
      Code:
      Das sieht schon anders aus als die Zeilen davor. fields[type], $row[2] ....kommt davort alles nicht vor. Wie sollen wir also den Fehler erkennen können? Die Glaskugeln sind mal iweder in der Reinigung.
      Ja das sieht anders aus weil die Radioboxen paar Seiten vorher verabeitet werden und die Daten nur aus einer Tabelle gelesen werden.
      Bei den checkboxen lese ich mit Left Join 2 tabellen aus.

      Das mit den Arrays (Warum ist $foo[bar] falsch?) habe ich geändert.
      echo 'type: ', $container->fields['type'], ', row2:', $row[2];
      Zeigt mir folgendes an:
      type: Array, row2:1
      type: Array, row2:2
      type: Array, row2:3 usw.
      Das ist auch alles korrekt. Es wird die id von jeder checkbox angezeigt.
      Es wird auch alles korrekt auf die nächste Seite weitergegeben.
      Aber wenn ich den zurück Button anklicke sind die häkchen nicht mehr vorhanden.
      Ich poste auch mal die SQL abfrage.
      PHP-Code:
      <?
      $alt =0; 
      $result = mysql_query("SELECT a.id, a.art, b.id, b.art_id, b.type, b.preis
      From
          schokoladen_art AS a
      LEFT JOIN
          schokoladen_type AS b
      ON
          a.id = b.art_id") OR die (mysql_error());      
                  
        while($row=mysql_fetch_array($result)) {

         if($row['0'] != $alt) {
             
         echo "[b]$row['1'][/b]";
         echo "
      ";

       $alt = $row['0'];
       } 
      ?><input type="checkbox" name="type[]" value="<? echo $row['2'] ?>" <? echo $container->fields['type']==$row['2'] ? 'checked':''; ?> ><?
         echo $row['4'];
         echo "
      ";
      ....


      <input type="submit" name="site5" value="zurück" style="font-family:Verdana;font-size:11px">
      <input type="submit" name="site7" value="weiter" style="font-family:Verdana;font-size:11px">
      ?>

      Kommentar


      • #4
        type: Array, row2:1
        type: Array, row2:2
        type: Array, row2:3 usw.
        Das ist auch alles korrekt.
        sicher?
        Wann ist dann $container->fields[type]==$row[2] aus
        <? echo $container->fields[type]==$row[2] ? 'checked':''; ?>
        erfüllt? Wann ist die Zeichenkette 'Array' gleich einer Zahl?

        Kommentar


        • #5
          Code:
          Wann ist die Zeichenkette 'Array' gleich einer Zahl?
          ähmmm ok
          habe type in id geändert.

          <? echo $container->fields[id]==$row[2] ? 'checked':''; ?>

          id: Array, row2:1
          id: Array, row2:2

          aber das ändert an mein Problem nichts

          Kommentar


          • #6
            Natürlich nicht. Array ist einfach nicht gleich 1 oder 2.
            Wo der Fehler liegt und woher 'Array' kommt, kann ich Dir wirklich nicht sagen.
            Vielleicht beim Befüllen von $container, vielleicht sogar schon vorher. Keine Ahnung.
            Ist $container->fields['id'] ein Feld?
            PHP-Code:
            <?php echo gettype($container->fields['id']); ?>
            Wenn ja, musst Du ein Element auswählen für den Vergleich mit einer Zahl. Wenn nein, hast Du schon vorher einen Fehler gemacht.

            Kommentar


            • #7
              Also ich denke mal das die Klasse für checkboxen nicht geeignet ist.
              Selbst wenn ich cheboxen zum Testen erstelle die nicht Dynamisch sind funktioniert es nicht. Leider gibt es den Workshop über diese Klasse nicht mehr. Den ersten Teil habe ich noch über den Google cache bekommen aber
              die anderen Teile sind definitiv weg. Muss ich mir halt was anderes überlegen. Trotzdem danke für deine Hilfe Bruchpilot.

              Kommentar


              • #8
                Kann ich mir kaum vorstellen, da checkbox, radio, select, text alles gleich verschickt und behandelt wird.
                Wobei ich denn Sinn dieser Klasse eh nicht verstehe. Welchen Vorteil gegenüber $_SESSION['sessionname']['name']='wert'; hat die Klasse?

                Kommentar

                Lädt...
                X