Bernhard: checkbox übermittelt nur den letzten Wert

Hallo,
Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?
Danke
Bernhard

  1. Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?

    Kommt im Request noch alles an? Welche Sprache verwendest Du? Wie heißt die Checkbox-Gruppe?

  2. Hallo,

    Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden.

    In der Annahme, dass Du PHP verwendest:
    http://www.dclp-faq.de/q/q-formular-checkbox.html

    Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen. Hat jemand eine Idee woran das liegen könnte?

    Uebertragen wird normalerweise vom Browser an ein Skript.
    Das Skript schreibt dann in die Datenbank.
    Lass Dir also vom Skript anzeigen:

    • welche Werte via HTTP uebertragen wurden
    • welche Queries es an die Datenbank schickt.

    Gruesse,

    Thomas

  3. Hi,

    Eigentlich sollte bei einer checkbox Auswahl doch alles was markiert wurde übertragen werden. Ich probiere gerade ein Formular aus aber in die Mysql Datenbank wird immer nur die jeweils letzte markierte Eingabe eingetragen.

    radioboxen muessen gleiche Namen haben, checkboxen dagegen muessen  unterschiedlich benamt sein. Sonst tritt selbiger Fehler auf.

    Gruesse  Joachim

  4. Hello,

    schau Dir dazu mal den Thread [pref:t=62991&m=356599] an. Der behandelt ein sehr ähnliches Thema.

    Grüße

    Tom

  5. Hi,

    folgendes passiert bei dir wahrscheinlich:

    <input type="checkbox" name="a" value="a">
    <input type="checkbox" name="a" value="b">
    <input type="checkbox" name="a" value="c">

    Nun sendet der Browser folgende Daten, wenn alle Felder markiert sind:

    a=a&a=b&a=c

    PHP überschreibt nun mit jeder neuen Variable a die alte.

    Eigentlich muss es so heißen:

    <input type="checkbox" name="a[]" value="a">
    <input type="checkbox" name="a[]" value="b">
    <input type="checkbox" name="a[]" value="c">

    So kannst du a[0], a[1] und a[2] verwenden...

    E7

    1. Hi
      Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!
      Sorry aber ich hab samit einfach noch nicht soviel Erfahrung!
      Bernhard

      Hi,

      folgendes passiert bei dir wahrscheinlich:

      <input type="checkbox" name="a" value="a">
      <input type="checkbox" name="a" value="b">
      <input type="checkbox" name="a" value="c">

      Nun sendet der Browser folgende Daten, wenn alle Felder markiert sind:

      a=a&a=b&a=c

      PHP überschreibt nun mit jeder neuen Variable a die alte.

      Eigentlich muss es so heißen:

      <input type="checkbox" name="a[]" value="a">
      <input type="checkbox" name="a[]" value="b">
      <input type="checkbox" name="a[]" value="c">

      So kannst du a[0], a[1] und a[2] verwenden...

      E7

      1. Hallo,

        Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!

        Kein Wunder, es wird jetzt auch ein Array uebermittelt.
        Das heisst, es reicht nicht nur _eine_ Schreib-Aktion in die DB,
        sondern Du musst den Array in einer Schleife durchlaufen
        und fuer jedes Element einmal in die DB schreiben.

        Sehr praktisch ist foreach()

        Bilde Dich weiter, was Arrays angeht:
        http://www.php.net/manual/de/language.types.array.php
        http://www.php.net/manual/de/ref.array.php

        Gruesse,

        Thomas

        1. Danke! Ich weiss dass ich da noch viele Mankos habe. Vielleicht kannst Du mir aber trotzdem noch helfen was in folgenden script nicht stimmt:
           foreach($Berufsbilder as $berufe){
           INSERT INTO betriebe (Berufsbilder) VALUES ($berufe);
                  }

          da kriege ich nämlich immer einen parse error.
          Nochmals Dankeschön
          Bernhard

          Sehr praktisch ist foreach()

          Bilde Dich weiter, was Arrays angeht:
          http://www.php.net/manual/de/language.types.array.php
          http://www.php.net/manual/de/ref.array.php

          Gruesse,

          Thomas

          1. Hallo,

            foreach($Berufsbilder as $berufe){
            INSERT INTO betriebe (Berufsbilder) VALUES ($berufe);
                    }

            Falls das wirklich Dein ganzer Code ist: Kein Wunder, dass PHP reklamiert.
            Du kannst nicht einfach so in PHP einen MySQL-Befehl schreiben.

            Zuerst einmal solltest Du die Query in einen String schreiben:
            $query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$berufe')";
            Vermutlich fehlen bei Dir die einfachen Anfuehrungszeichen um $berufe.

            Dann kannst Du die Query naemlich auch anzeigen lassen:
            echo "Meine Query lautet: <br>$query";

            Dann solltest Du mal grundsaetzlich lernen, wie man von PHP aus
            eine MySQL-Datenbank anspricht, und wie man Querys absetzt.
            http://www.php.net/manual/de/ref.mysql.php
            http://www.dclp-faq.de/q/q-mysql-zugriff.html
            http://www.schattenbaum.net/php/verbindung.php

            Wenn Du das dann mal kannst, empfehle ich:

            1. Verbindung zu DB-Server und DB herstellen.

            2. In der Schleife fuer jedes Element
              - INSERT-Query absetzen und
                   - bei Misserfolg Query und mysql_error() mit echo anzeigen lassen.
                      Dann siehst Du auch gleich, warum etwas nicht klappt.

            Gruesse,

            Thomas

            1. Hallo Thomas,
              Du hast mir sehr geholfen. Die query hatte ich natürlich schon drin nur hier nicht mehr aufgeführt.
              Ich habe das script wie folgt geändert:
              foreach($Berufsbilder as $berufe){
              $query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$berufe')";
              $result = mysql_query($query, $localhost) or die(mysql_error());
              und jetzt klappt der Eintrag schon.
              Mysql legt jedoch für jedes array-Element eine neue Zeile mit eigener ID an. Ich hätte das alles aber gerne in EINEM Feld eingetragen. Hast Du da vuielleicht noch einen Tipp für mich?
              Ansonsten nochmals vielen Dank dass Du einem Anfänger auf die Sprünge geholfen hast.
              Bernhard

              1. Hallo,

                Mysql legt jedoch für jedes array-Element eine neue Zeile mit eigener ID an. Ich hätte das alles aber gerne in EINEM Feld eingetragen.

                Ich weiss nicht, was Du genau vorhast, aber ich befuerchte,
                Deine DB-Struktur ist - sagen wir mal - nicht ganz optimal.
                Wie sieht sie denn aus?
                Was fuer Felder (Name und Typ) hat die Tabelle betriebe?

                Du willst also mehrere Werte in einer Zeile speichern.

                Dann musst Du in der Schleife mal alles "zusammensetzen",
                und dann nachher nur eine INSERT-Query absetzen.

                $zaehler=0; $inhalt="";
                foreach($Berufsbilder as $berufe)
                 {
                   if ($zaehler>0)  // d.h. ab dem zweiten Element
                      $inhalt.=", ";  // soll vorher jeweils ein Trennzeichen eingefuegt werden
                   $inhalt .= $berufe;
                   $zaehler++;
                 }

                $query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$inhalt')";

                Gruesse,

                Thomas

                1. Hallo Thomas -
                  Ich glaube jetzt bist Du erlöst. Ich habe mein Problem mit 'implode' gelöst.

                  Wie sieht sie denn aus?
                  Was fuer Felder (Name und Typ) hat die Tabelle betriebe?

                  Die Tabelle speichert verschiedene Ausbildungsbetriebe mit den jeweils angebotenenen Ausbildungsberufen sodass diese dann nach einer Suchroutine wieder ausgegeben werden können.
                  Ich habe das Ganze bereits online. Du kannst des dir ja mal anschauen:
                  http://www.rgs.kn.schule-bw.de/cgi-bin/betriebe.php

                  Dann musst Du in der Schleife mal alles "zusammensetzen",
                  und dann nachher nur eine INSERT-Query absetzen.

                  $zaehler=0; $inhalt="";
                  foreach($Berufsbilder as $berufe)
                   {
                     if ($zaehler>0)  // d.h. ab dem zweiten Element
                        $inhalt.=", ";  // soll vorher jeweils ein Trennzeichen eingefuegt werden
                     $inhalt .= $berufe;
                     $zaehler++;
                   }

                  $query= "INSERT INTO betriebe (Berufsbilder) VALUES ('$inhalt')";

                  Gruesse,

                  Thomas

                  Danke nochmal im Namen der Robert Gerwig Schule Singen, für die ich das ganze erstellt habe.
                  Bernhard

      2. Hi,

        Ja das wahr wohl einer der Fehler. Doch jetzt schreibt er mir in die Datenbank nur noch 'array' statt der gewünschten Inhalte!

        Das einfachste vor dem Schreiben:

        $a = implode("($..$)", $a);

        Und zum Anzeigen wieder:

        $a = explode("($..$)", $a);

        ($$) ist ein String, der relativ unwahrscheinlich von deinen Boxen kommen dürfte...

        E7