sarah: Checkboxen in Formular

Hallo zusammen

Ich möchte gerne machen, dass sich bei meinem Formular die Werte in den Checkbos zwischengespeichert werden beim klick auf OK und etwas nicht korrekt angegeben wurde.

Bei einem Textfeld mache ich dies so:
<input type="Text" name="pname" size="" maxlength=""
       <? if($_POST['pname'] != "") echo 'value="'.$_POST  'pname'].'"';?>>

Die Werte für die Checkbox hole ich so:

$abfrage = 'select eh_id, eh_name from einheit order by eh_name';
$res = mysql_query($abfrage) or die ('Select ist fehl geschlagen! '.mysql_error());
$num = mysql_num_rows($res) or die ('Keine Einheiten vorhanden');
  for($i = 0; $i < $num; $i++) {
    $eh_id = mysql_result($res, $i, "eh_id");
    $p_name = mysql_result($res, $i, "eh_name");
    echo "<input type='checkbox' name='peinheit$i' value=$eh_id";
    /* Prüfung */
    echo ">$p_name<br>";
  }

Nun habe ich allerdings keine Ahnung wie ich es dynamisch anstellen kann, die $_POST['peinheitX'] Variable (bei X sollte $i stehen) zu ändern.
Meine folgende Versuche scheiterten leider:
$try = "'peinheit".$i."'";
if ($_POST[$try] == $eh_id) echo "checked";
oder
if ($_POST[."'peinheit".$i."'".] == $eh_id) echo "checked";

Weis jemand weiter?

  1. Hi,

    Meine folgende Versuche scheiterten leider:
    $try = "'peinheit".$i."'";
    if ($_POST[$try] == $eh_id) echo "checked";

    Das ist analog zu:

    $_POST["'peinheitX'"]

    Schreib an den Anfang deiner Scripts am besten generell

    error_reporting(E_ALL);

    Dann hättest du hier eine Notice bekommen, dass der Index 'peinheitX' (mit einfachen Anführungsstrichen) nicht definiert ist.

    oder
    if ($_POST[."'peinheit".$i."'".] == $eh_id) echo "checked";

    Das ist analog zu:

    Parse error

    Weis jemand weiter?

    $_POST['peinheit' . $i]

    Du solltest allerdings auch mittels isset darauf prüfen, ob die Variable überhaupt existiert (nicht angeklickte Checkboxen werden nicht übertragen), ansonsten bekommst du bei o.g. error_reporting-Einstellung eine Notice, dass einige Indezes nicht definiert sind.

    Gruß,
    Andreas.

  2. Hallo

    Weis jemand weiter?

    Vielleich weiß ich weiter. :-)

    Beispiel: ein von mehreren Checkboxen eines "Feldes", also zu einer Frage,
    so habe ich deine Fragestellung jedenfalls verstanden. Hier in den reinen
    HTML-Quelltext eingefügt.

    <input name="spaeter[]" value="Begleithundeausbildung" type="checkbox"<?php if (isset($_POST["spaeter"][0]) and $_POST["spaeter"][0]=="Begleithundeausbildung") { echo " checked"; } ?>>

    Wie du siehst, benutze ich ein zweidimensionales Array (Hier Element 0 des
    Arrays $_POST["spaeter"]). Die Anzahl der Checkboxen, sowie deren Position
    solltest du ja kennen. Es wird geprüft, ob es das Element gibt und ob
    das Element den zu erwartenden Wert hat (hier: Begleithundeausbildung).

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    1. Hello,

      <input name="spaeter[]" value="Begleithundeausbildung" type="checkbox"<?php if (isset($_POST["spaeter"][0]) and $_POST["spaeter"][0]=="Begleithundeausbildung") { echo " checked"; } ?>>

      Das bringt mich aud eine Frage:
      Was sagt das W3C bezüglich Validität denn zu

      <input type="checkbox" name="check[1]" value="checked" checked="nein">
                                                                --------------

      Das mag jetzt eigenwillig anmuten, aber der Sinn an der Sache ist, durch ungeprüfte Usereingaben (in nicht so kritischen Formularen) beim "Affenmachen" keinen invaliden Code zu produzieren.

      <input type="checkbox" name="check[1]" value="checked" checked="<?php echo check[1]; ?>">
                                                                ----------------------------

      Das sollte spätestens klarmachen, warum ich die Frage gestellt habe
      Wenn man mit dieser Zeile nun den Affen macht, und das Formular nicht manipuliert weird, dann sollte es doch klappen, oder? Aber was ist, wenn das Formular manipuliert wird...?

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hello,

        Sorry, das sollte natürlich hier auch vollständig stehen:

        <input type="checkbox"
                 name="check[1]"
                 value="checked"
                 checked="<?php if(isset($_POST['check'][1])){echo $_POST['check'][1];} ?>">
                           -----------------------------------------------------------

        Oder darf das Attribut checked keinen leeren Wert enthalten?

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo

          <input type="checkbox"
                   name="check[1]"
                   value="checked"
                   checked="<?php if(isset($_POST['check'][1])){echo $_POST['check'][1];} ?>">

          Kann es sein, das du dich ein bisschen verhaspelt hast?

          • value="checked"
          • checked="<?php if(isset($_POST['check'][1])){echo $_POST['check'][1];} ?>"

          Du meintest doch wohl:

          • value="<?php if(isset($_POST['check'][1])){echo $_POST['check'][1];} ?>"
          • checked="<?php if(isset($_POST['check'][1])){echo "checked";} ?>"

          M;al davon abgesehen, dass ich "checked" solo verwende (HTML 4), habe ich
          auch noch nicht probiert, das name-Attribut mit einer Arrayangabe incl. Index
          zu füllen (name="check[1]"). Ich wäre ehrich gesagt so noch nicht auf die Idee
          gekommen, dies zu tun. Schließlich fuktioniert es so, wie es funktioniert [1],
          und gut ist!

          [1] Ich weiß, dass das kein schlagendes Argument ist.

          Tschö, Auge

          --
          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
          (Victor Hugo)
          1. Hello,

            <input type="checkbox"
                     name="check[1]"
                     value="checked"
                     checked="<?php if(isset($_POST['check'][1])){echo $_POST['check'][1];} ?>">

            Kann es sein, das du dich ein bisschen verhaspelt hast?

            • value="checked"

            Das ist schon in Ordnung so. Bei Checkboxen wird ja nicht der Value als Feldinhalt übernommen, sondern nur beim Absenden übertragen. Und da SOLL er ja immer 'checked' lauten

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hallo

              Das ist schon in Ordnung so. Bei Checkboxen wird ja nicht der Value als Feldinhalt übernommen,

              Nicht? Ich will ja eine verwertbare Information übergeben.

              sondern nur beim Absenden übertragen. Und da SOLL er ja immer 'checked' lauten

              Naja, es ging ja darum, in einem Affenformular im Falle, dass nicht alles
              wie gefordert ausgefüllt ist, das Formular wieder anzuzeigen und die Werte
              (Value), soweit gültig, einzutragen/vorzubelegen. Dabei wird doch am "name"
              Attribut geprüft, ob diese Checkbox vorbelegt (checked) werden soll.

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
              1. Hello,

                Naja, es ging ja darum, in einem Affenformular im Falle, dass nicht alles
                wie gefordert ausgefüllt ist, das Formular wieder anzuzeigen und die Werte
                (Value), soweit gültig, einzutragen/vorzubelegen. Dabei wird doch am "name"
                Attribut geprüft, ob diese Checkbox vorbelegt (checked) werden soll.

                Da siehst Du mal wieder, dass das Programmieren Philosopie ist. Es ist ja absolut nicht falsch, was Du vorschlägst. Ich nun wiederum habe versucht, die Freiheitgrade soweit es zulässig ist, zusammenzukürzen...

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
      2. Hi,

        Das mag jetzt eigenwillig anmuten, aber der Sinn an der Sache ist, durch ungeprüfte Usereingaben (in nicht so kritischen Formularen) beim "Affenmachen" keinen invaliden Code zu produzieren.

        <input type="checkbox" name="check[1]" value="checked" checked="<?php echo check[1]; ?>">

        ob ein leeres checked-Attribut valide ist, weiß ich auch nicht. Aber mit

        <input type="checkbox" name="check[1]" value="irgendwas"<?php if (isset($_POST['check'][1])) { echo ' checked="checked"'; } ?> />

        stellen sich deine Fragen nicht und das Formular bleibt universell.

        Gruß,
        Andreas.