Eva: Mehrere gecheckte Boxen in ein Datenbankfeld

Hallo,
Ich will:
Die entsprechenden Values einer Gruppe von Checkboxen sollen sich in eine MySql-Datenbank schreiben. Sprich: Habe ich 3 Checkbox-Felder, die unter z.B. dem Namen 'Fahrzeug' zusammengefasst werden, und davon sind die Values 'Auto' und 'Fahrrad' angeklickt, aber 'Mofa' nicht. Ich möchte also, dass in dem Tabellenfeld nachher 'Auto, Fahrrad' steht.
Geht das üpberhaupt, und wenn, wie? Ich habe schon eine Menge ausprobiert und jetzt einen Knoten im Kopf...
Danke!

  1. hi,

    du musst den checkbox-feldern verschiedene namen geben,
    sonst wird nur der letzte wert übermittelt.

    - toweter ( www.throwaway-mail.com )

    Hallo,
    Ich will:
    Die entsprechenden Values einer Gruppe von Checkboxen sollen sich in eine MySql-Datenbank schreiben. Sprich: Habe ich 3 Checkbox-Felder, die unter z.B. dem Namen 'Fahrzeug' zusammengefasst werden, und davon sind die Values 'Auto' und 'Fahrrad' angeklickt, aber 'Mofa' nicht. Ich möchte also, dass in dem Tabellenfeld nachher 'Auto, Fahrrad' steht.
    Geht das üpberhaupt, und wenn, wie? Ich habe schon eine Menge ausprobiert und jetzt einen Knoten im Kopf...
    Danke!

  2. Hallo,

    Hi,

    <input type="checkbox" name="Fahrzeug[]" value="Auto">
    <input type="checkbox" name="Fahrzeug[]" value="Fahrrad">
    <input type="checkbox" name="Fahrzeug[]" value="Mofa">

    if(is_array($_POST['Fahrzeug')) { $fahrzeug=implode(',',$_POST['Fahrzeug']); } else { $fahrzeug=$_POST['Fahrzeug']; }

    mysql_query("INSERT INTO XXX (Feld) VALUES ('$fahrzeug')");

    Sollte so funktionieren.

    mfg

    PHP_Dude

  3. Hello,

    Ja, Du kannst in MySQL auch optionale und alternative Sets abspeichern. Das ist eingentlich ein Bruch der Normalisierungsregeln und rächt sich auch später oft. Sowas sollte man nur für Wertegruppen (Sets) machen, bei denen von vornherein klar ist, dass sie sich über die Lebensdauer der Software nie mehr ändern werden.

    Mehrwertiges Feld ~ optionales Set ~ SET      --> select multiple, Checkbox
    Einwertiges Feld  ~ alternatives Set ~ ENUM   --> select single, Radio

    Die Vorgaben kannst Du mit "Show Columns from $table" abfragen.

    Du solltest vermeiden, numerische ENUM- oder SET-Listen aufzubauen, da MySQL hier immer noch einen Bug hat (ich empfinde das Verhalten jedenfalls als solchen). Wenn man nämlich einen Wert anspricht, der nicht in der Liste enthalten ist, der aber im Index-Bereich der Liste liegt, dann nimmt MySQL einfach den Index anstelle des Wertes und hat damit mit ziemlicher Sicherheit einen falschen Wert angesprochen.

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

    Tom

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

      Du solltest vermeiden, numerische ENUM- oder SET-Listen aufzubauen, da MySQL hier immer noch einen Bug hat (ich empfinde das Verhalten jedenfalls als solchen). Wenn man nämlich einen Wert anspricht, der nicht in der Liste enthalten ist, der aber im Index-Bereich der Liste liegt, dann nimmt MySQL einfach den Index anstelle des Wertes und hat damit mit ziemlicher Sicherheit einen falschen Wert angesprochen.

      das würde ich nicht als bug sehen.
      ENUM und SET gehören laut manual zu den zeichenketten-typen, also würde ich erwarten, dass du einen nur aus ziffern bestehenden wert darin trotzdem mit '1' ansprichst, und nicht mit 1.

      das verhalten, wenn du wirklich einen nummerischen wert benutzt, ist m.E. auch klar definiert:

      Wenn Sie eine ENUM in einem numerischen Zusammenhang benutzen, wird der Index des Spaltenwerts zurückgegeben. Sie können beispielsweise numerische Werte aus einer ENUM-Spalte wie folgt abrufen:

      mysql> SELECT enum_spalte+0 FROM tabelle;

      Wenn Sie eine Zahl in eine ENUM speichern, wird die Zahl als Index behandelt und der gespeicherte Wert ist das Aufzählungselement mit diesem Index.

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      1. Hello,

        ENUM und SET gehören laut manual zu den zeichenketten-typen, also würde ich erwarten, dass du einen nur aus ziffern bestehenden wert darin trotzdem mit '1' ansprichst, und nicht mit 1.

        Es ist leider nicht so (gewesen?) wie Du sagst. MySQL entscheidet frei, ob es nach dem Wert oder nach dem index schaut. Und das ist datentechnischer Unsinn. Es ist (war?) auch egal, ob man die Zahl als String oder als numerischen Wert übergeben hat.

        Aber wenn Du meinst, dass das nun anders ist, muss ich es morgen nochmal ausprobieren. In diesem Office habe ich keine 4er Version zur Verfügung.

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

        Tom

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