Peter: FORM-Felder in Array einlesen

Hallo zusammen und frohes neues Jahr !

Folgendes:

1. Einlesen von Datenbankeinträgen und Benennung von checkboxen anhand dessen.

-->
<input type=checkbox name=[DB-FELD 1] value=1>
<input type=checkbox name=[DB-FELD 2] value=1>
<input type=checkbox name=[DB-FELD 3] value=1>
<input type=checkbox name=[DB-FELD 4] value=1>
<input type=checkbox name=[DB-FELD 5] value=1>
.
.
.
.

2. Ermitteln welche Werte ausgewählt wurden ("1" gesetzt sind.

Wo bekomme ich denn jetzt ein Array o.ä. mit den Werten des Formulares her, bzw die Werte, die "1" sind ???2

  1. Hallo,

    <input type=checkbox name="DB-FELD[1]" value="1">
    <input type=checkbox name="DB-FELD[2]" value="1">
    <input type=checkbox name="DB-FELD[3]" value="1">
    <input type=checkbox name="DB-FELD[4]" value="1">
    <input type=checkbox name="DB-FELD[5]" value="1">

    Grüße

    Tom

    1. Hallo,

      <input type=checkbox name="DB-FELD[1]" value="1">
      <input type=checkbox name="DB-FELD[2]" value="1">
      <input type=checkbox name="DB-FELD[3]" value="1">
      <input type=checkbox name="DB-FELD[4]" value="1">
      <input type=checkbox name="DB-FELD[5]" value="1">

      Grüße

      Tom

      Ja, danke....da habe ich mich wohl unklar ausgedrückt!

      Das Problem ist nicht das Formular darzustellen, sondern nach dem Abschicken des Formulares die Werte selektieen die auf "1" stehen.

      ich müsste ja eine Schleife in der Art

      if ($wert1=='1') {...}
      if ($wert2=='1') {...}
      if ($wert3=='1') {...}
      .
      .
      .

      bauen! ich weiß nur nicht, wie die DB-Felder heissen, bzw. die werden ständig umbennant, so das ich sie nicht fest im skript verdrahten kann.

      1. Hallo,

        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

        <input type=checkbox name="DB-FELD[]" value="1">
        <input type=checkbox name="DB-FELD[]" value="1">
        <input type=checkbox name="DB-FELD[]" value="1">
        <input type=checkbox name="DB-FELD[]" value="1">
        <input type=checkbox name="DB-FELD[]" value="1">

        </form>

        <?php

        foreach ($_POST['DB-FELD'] as $key => value) {
            echo 'Checkbox Nr. '.$key.' hat den Wert '.$value.'<br />';
        }

        ?>

        Gruß,
        dimde

        1. Hallo,

          <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

          <input type=checkbox name="DB-FELD[]" value="1">
          <input type=checkbox name="DB-FELD[]" value="1">
          <input type=checkbox name="DB-FELD[]" value="1">
          <input type=checkbox name="DB-FELD[]" value="1">
          <input type=checkbox name="DB-FELD[]" value="1">
          </form>

          <?php

          foreach ($_POST['DB-FELD'] as $key => value) {
              echo 'Checkbox Nr. '.$key.' hat den Wert '.$value.'<br />';
          }

          ?>

          Gruß,
          dimde

          Ja super - das kling nach dem, was ich suchte

          Doch jetzt bekomme ich diese blöde Fehlermeldung und weiß absolut nicht, was ihm fehlt

          Parse error: parse error, expecting T\_VARIABLE' or '$'' in /usr/local/httpd/htdocs/test/test.php on line 34

          im PHP-Code meiner checkboxen steht name=$row[wert] (wird über eine while-schleife aus dem SQL-ergebnis eingesetzt)

          dein skript habe ich folgender massen geändert

          -----SQL-Abfrage---
          foreach ($_POST['$row[wert]'] as $key => value) {
          .
          .
          .

          ich verzweifel hier noch!

          Gruß,
          Peter

          1. Hallo,

            Parse error: parse error, expecting T\_VARIABLE' or '$'' in /usr/local/httpd/htdocs/test/test.php on line 34

            Was steht denn in Zeile 34?

            im PHP-Code meiner checkboxen steht name=$row[wert] (wird über eine while-schleife aus dem SQL-ergebnis eingesetzt)

            Am besten postest Du mal etwas mehr von deinem bisherigen Code und
            den Aufbau der SQL Tabelle, damit man das im Zusammenhang sehen kann.

            dein skript habe ich folgender massen geändert

            -----SQL-Abfrage---
            foreach ($_POST['$row[wert]'] as $key => value) {

            ähm... mal abgesehen davon, dass es wenn dann so heissen müsste:
            $_POST[$row['wert']], seh ich da den Sinn nicht ganz...

            In dem Fall müssten ja die Checkboxen alle den Namen haben, der in
            der gerade-durchlaufenen Spalte "wert" deiner SQL Tabelle steht?!

            Gruß,
            dimde

            P.S.: falls Du die "nichgehakelten" (*g* @ lulu) Cheboxen auch
            brauchst, siehe lulus Antwort auf meinen Post :)

            1. Ok - hier die betreffenden zeilen im Code

              ############################

              //Die MySQL-Ausgabe und erzeugung der Checkboxen per Schleife

              $sql="SELECT * FROM kategorie";
              $res=mysql_db_query($db, $sql);
              while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {
                 echo"
                 <input type="checkbox" name="$row[ID]" value="1">$row[name]
                 ";
              }

              //Das Skript welches bei Versand angestossen wird

              $sql="SELECT * FROM kategorie";
              $res=mysql_db_query($db, $sql);
              while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {

              foreach ($_POST['$row[id]'] as $key => $value) {
                 echo "Checkbox Nr. ".$key." hat den Wert ".$value."<br/>";
                }
              }

              #####################

              Die zeile, in der die foreach-Anweisung steht ist die betroffene Zeile, in welcher immer wieder ein Fehler ausgegeben wird.

              Die DB besteht lediglich aus den Feldern (ID;name). Die größe der Tabelle und Bezeichnung der Einträge ändert sich aber ständig, wehalb eine dynamische Erzeugung der checkboxen unerlässlich ist

              VIELEN VIELEN DANK NOCH EINMAL FÜR DIE HILFE !!!!

              Gruß,
              Peter

              1. Hallo,

                while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {
                   echo"
                   <input type="checkbox" name="$row[ID]" value="1">$row[name]
                   ";
                }

                Da ID und name keine Konstanten sondern strings sind, musst Du sie
                zwischen " oder ' schreiben. (Wenn Du die Ausgabe mit ' statt "
                umschließt, kannst Du Dir außerdem die ganzen Backslasches sparen.)

                echo '<input type="checkbox" name="'.$row['ID'].'" value="1">'.$row['name'];

                while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {

                foreach ($_POST['$row[id]'] as $key => $value) {
                   echo "Checkbox Nr. ".$key." hat den Wert ".$value."<br/>";
                  }
                }

                $_POST[$row['id']].

                Mal ne andere Frage, wie sieht denn deine <form ...> - Zeile aus?
                Hast du überprüft, ob die Namen der Checkboxen in der ersten Datei
                stimmen?

                Gruß,
                dimde

                1. Hallo,

                  Sorry für das Doppelposting, hab's erst jetzt gesehen :)

                  Da Du ja jeder einzelnen Checkbox einen _eindeutigen_ Namen gibst (die
                  id aus der Datenbank) ist $_POST[$row['id']] natürlich kein Array,
                  sondern ein String.

                  Änder mal die zweite while Schleife so ab:

                  while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
                      echo 'Checkbox Nr. '.$row['id'].' hat den Wert '.$_POST[$row['id']].'<br/>';
                  }

                  Gruß,
                  dimde

                2. Hallo,

                  while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {
                     echo"
                     <input type="checkbox" name="$row[ID]" value="1">$row[name]
                     ";
                  }

                  Da ID und name keine Konstanten sondern strings sind, musst Du sie
                  zwischen " oder ' schreiben. (Wenn Du die Ausgabe mit ' statt "
                  umschließt, kannst Du Dir außerdem die ganzen Backslasches sparen.)

                  echo '<input type="checkbox" name="'.$row['ID'].'" value="1">'.$row['name'];

                  while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {

                  foreach ($_POST['$row[id]'] as $key => $value) {
                     echo "Checkbox Nr. ".$key." hat den Wert ".$value."<br/>";
                    }
                  }

                  $_POST[$row['id']].

                  Mal ne andere Frage, wie sieht denn deine <form ...> - Zeile aus?
                  Hast du überprüft, ob die Namen der Checkboxen in der ersten Datei
                  stimmen?

                  Gruß,
                  dimde

                  Also von den Checkboxen kommt das alles rüber!

                  Mit $HTTP_POST_VARS[$row[ID]] bekomme ich die Werte auch raus. Ist zwar nicht ganz so komfortabel wie diese schöne foreach-Schleife, aber

                  ES FUNKTIONIERT ENDLICH!!!

                  Noch eine Stunde länger und ich hätte mir bald einen externen Programmierer für die Sache rangeholt ;)

                  DANKE DANKE DANKE noch mal!!!!

                  Dieses Forum ist auch in diesem Jahr unschlagbar - nettere Poster und geduldigere Hilfe gibt's nirgends !!!!

              2. Hallo Peter,

                wie es ausschaut kennt deine PHP-Version die Superglobals noch nicht.

                Statt $_POST solltest du $HTTP_POST_VARS bzw. die Entsprechungen für GET verwenden.

                Zum Vorselektionsproblem: einfach mit isset() prüfen, ob die Variable existiert. Z.B. so

                $sql="SELECT * FROM kategorie";
                 $res=mysql_db_query($db, $sql);
                 while ($row=mysql_fetch_array($res,MYSQL_ASSOC)) {

                if (isset($HTTP_POST_VARS[$row[ID]])) $checked=" checked";
                  else  $checked="";

                echo"
                    <input type="checkbox" name="$row[ID]" value="1"$checked>$row[name]
                    ";
                 }

                Viele Grüße

                Antje

        2. Huhu dimde

          das Beispiel funktioniert so nicht wie erwartet, da nur die angehakelten "checkbox values" übertragen werden.
          Wenn man die Indizes "hart" reinschreibt funktioniert es.

          Also
          <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
          <input type=checkbox name="DB-FELD[0]" value="1">
          <input type=checkbox name="DB-FELD[1]" value="1">
          <input type=checkbox name="DB-FELD[2]" value="1">
          <input type=checkbox name="DB-FELD[3]" value="1">
          <input type=checkbox name="DB-FELD[4]" value="1">
          </form>

          <?php

          foreach ($_POST['DB-FELD'] as $key => value) {
          echo 'Checkbox Nr. '.$key.' hat den Wert '.$value.'<br />';
          }

          ?>

          Wenn man auch für "nichtgehakelte" checkboxes einen Wert übertragen möchte funktioniert folgender Trick:

          <input type="hidden" name="DB-FELD[3]" value="nix">
          <input type="checkbox" name="DB-FELD[3]" value="1">

          Viele Grüße

          lulu

          --
          bythewaythewebsuxgoofflineandenjoytheday
          1. VIELEN DANK

            ...an Euch, aber ich kriege es einfach nicht hin!!!!!

            Der sagt mir jetzt ständig

            Invalid argument supplied for foreach() in /usr/local/httpd/htdocs/test/test.php on line 36

            ...ich habe keine Ahnung, was ich noch in diese Schleife schreiben soll, oder wie ich das umstricken kann !!!!!

            Bitte helft mir!!!