Ralf: Mehrdimensionale Arrays in Formularen

Hallo,

ich habe eine seite, in der ein Formular mehrmals angezeigt werden kann. d.h. auf der seite stehen 3 buttons, welche auf der seite alle das gleiche formular aufrufen, wobei die daten ansich für jede option anderst gespeichert werden. im formular stehen nur checkboxen. ich habe nun folgenden code (option gibt den wert des aktuell gedrückten buttons, also wurde button 1 gedrück ist $option=0, usw.)

Hiermit werden im formular alle häckchen gesetzt, oder wenn bereits einmal ein wert gesetzt wurde entsprechend der auswahl (was nicht funktioniert):

if (!isset($sess_feld[$option])) {
 for ($i=0;$i<4;$i++) {
  $checkfeld[$i]="checked";
  $sess_feld[$option][$i]="1";
 }
} else {
 for ($i=0; $i<4; $i++) {
  if ($sess_feld[$option][$i]<>'') {
   $checkfeld[$i]="checked";
  } else {
   $checkfeld[$i]="";
  }
 }
}

So sehen die Checkboxen innerhalb des Formulars aus:
<input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
<input type='checkbox' name='feld[$option][1]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
<input type='checkbox' name='feld[$option][2]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

Und so versuche ich sie in der session zu speichern:
for ($i=0; $i<4; $i++) {
 $sess_feld[$option][$i]=$feld[$option][$i];
}

session_register("sess_feld");

Leider funktioniert das nicht so ganz, es werden immer nur alle häckchen gesetzt. es scheint also so als ob $sess_feld[$option] immer auf nicht gesetzt steht.

wenn ich es mir eindimensionalen arrays mache gehts.

gruss und danke

ralf

  1. So sehen die Checkboxen innerhalb des Formulars aus:
    <input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

    Hi,

    du erwartest jetzt von dem armen php das es weiß in welcher form name="" gesetzt werden soll ?

    Orginal: name='feld[$option][0]'
    Da fehlt erstmal ein ]

    ist die variable $option[0] ? oder ist es nur $option ? und [0] ist der arrayindex welcher dann auf eins gesetzt wird ($option[0][0] = 1)?

    name='feld[".$option[0]."]'
    name='feld[".$option."][0]'

    lg
    Ludwig

    1. So sehen die Checkboxen innerhalb des Formulars aus:
      <input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

      Hi,

      du erwartest jetzt von dem armen php das es weiß in welcher form name="" gesetzt werden soll ?

      Orginal: name='feld[$option][0]'
      Da fehlt erstmal ein ]

      Wieso fehlt da ein ]?

      ist die variable $option[0] ? oder ist es nur $option ? und [0] ist der arrayindex welcher dann auf eins gesetzt wird ($option[0][0] = 1)?

      Wie oben erklärt ist option der index des gedrückten buttons. also wenn button 1 gedrückt wurde ist option=0, und damit ist der name der 1.checkbox feld[0][0], der 2. checkbox feld[0][1] usw.

      name='feld[".$option[0]."]'
      name='feld[".$option."][0]'

      lg
      Ludwig

  2. Huhu Ralf

    man kann keine mehrdimensionalen Arrays in Formularen verwenden.

    Eine Lösung ist aber z.B. eine Dimension in den Namen des Feldes zu kodieren.
    Also z.B.

    <input type='checkbox' name='feld_$option[0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

    Bei der Auswertung musst Du dann die Namen entsprechend zusammensetzen.

    Also z.B.
    $varname='feld_'.$option;
    $my_arr=$$varname;

    Viele Grüße

    lulu

    1. Huhu Ralf

      man kann keine mehrdimensionalen Arrays in Formularen verwenden.

      Wer hat dir den blödsinn verkauft ?

      Ludwig

      1. Huhu Ludwig

        Wer hat dir den blödsinn verkauft ?

        verdammt, dachte ich mir doch gleich das ich dem Typen nicht trauen kann. Aber ich dachte bei mir nur weil der Kerl eine Hakennase und buschige Augenbrauen hat sollte ich ihn nicht gleich vorverurteilen, und was er angeboten hatte klang wirklich verlockend "Alles was Sie schon immer über Formulare wissen wollten lernen Sie hier in 3 Tagen und 17 Minuten". Es war zwar nicht besonders billig aber der Einband war so schön bunt.

        Jetzt schreibe ich 100 mal

        "mehrdimensionale Arrays in Formularen sind überhaupt kein Problem"
        "mehrdimensionale Arrays in Formularen sind überhaupt kein Problem"
        "mehrdimensionale Arrays in Formularen sind überhaupt kein Problem"
        "mehrdimensionale Arrays in Formularen sind überhaupt kein Problem"
        etc.

        Viele Grüße

        lulu (dubito ergo sum)

    2. Hi,

      Huhu Ralf

      man kann keine mehrdimensionalen Arrays in Formularen verwenden.

      wenn es um php 3 geht hast du recht, aber ab php 4 gehts :-)

      gruss

      1. Huhu Ralf

        es funktioniert tatsächlich, ich bin beeindruckt ;-)

        So ist das mit dem gesunden Halbwissen, wenigstens muss ich jetzt dank Deiner Hilfe nicht ganz dumm sterben ;-)

        Viele Grüße

        lulu (* jetzt sofort ein MonsterForm bauend um in die 5. Dimension vorzustossen*)

        1. freut mich für dich, nur meins klappt immer noch nicht *g*

          grüsslis

          ps. viel spass in der 5. dimension

          Huhu Ralf

          es funktioniert tatsächlich, ich bin beeindruckt ;-)

          So ist das mit dem gesunden Halbwissen, wenigstens muss ich jetzt dank Deiner Hilfe nicht ganz dumm sterben ;-)

          Viele Grüße

          lulu (* jetzt sofort ein MonsterForm bauend um in die 5. Dimension vorzustossen*)

  3. Huhu Ralf

    so hier mein 2ter Versuch:

    So sehen die Checkboxen innerhalb des Formulars aus:
    <input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
    <input type='checkbox' name='feld[$option][1]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
    <input type='checkbox' name='feld[$option][2]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

    liegt es evtl. daran, daß $checkfeld immer eine Null als Index hat, müßte glaube ich entsprechend der 2ten Dimension von feld sein.

    Viele Grüße

    lulu

    1. Wahrscheinlich nicht, weil wenn button 2 gedrückt wurde ist die variable $option ja 1.

      ich denke das problem liegt hier:

      if (!isset($sess_feld[$option])) {
       for ($i=0;$i<23;$i++) {
        $checkfeld[$i]="checked";
        $sess_feld[$option][$i]="1";
       }
      } else {
       for ($i=0; $i<23; $i++) {
        if ($sess_feld[$option][$i]<>'') {
         $checkfeld[$i]="checked";
        } else {
         $checkfeld[$i]="";
        }
       }
      }

      oder hier:

      for ($i=0; $i<23; $i++) {
       $sess_feld[$option][$i]=$feld[$option][$i];
      }

      Huhu Ralf

      so hier mein 2ter Versuch:

      So sehen die Checkboxen innerhalb des Formulars aus:
      <input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
      <input type='checkbox' name='feld[$option][1]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
      <input type='checkbox' name='feld[$option][2]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

      liegt es evtl. daran, daß $checkfeld immer eine Null als Index hat, müßte glaube ich entsprechend der 2ten Dimension von feld sein.

      Viele Grüße

      lulu

    2. hab dich falsch verstanden und ist ein schreibfehler von mir:

      $checkfeld ist natürlich durchnumeriert.

      sorry

      Huhu Ralf

      so hier mein 2ter Versuch:

      So sehen die Checkboxen innerhalb des Formulars aus:
      <input type='checkbox' name='feld[$option][0]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
      <input type='checkbox' name='feld[$option][1]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">
      <input type='checkbox' name='feld[$option][2]' value='".$sess_feld[$option][0]."' ".$checkfeld[0].">

      liegt es evtl. daran, daß $checkfeld immer eine Null als Index hat, müßte glaube ich entsprechend der 2ten Dimension von feld sein.

      Viele Grüße

      lulu