peter: Mehrfachauswahl in SET-Feld von MySQL

Wie bekomme ich eine Mehrfachauswahl mittels PHP
<select name=mehrfachauswahl[] size=3 multiple>
<option>a</option>
<option>b</option>
<option>c</option>
</select>
in ein SET-Feld in eine MySQL-Datenbank ?

INSERT INTO test ( name,  mail, mehrfachauswahl ) values( '$name', '$mail', '$mehrfachauswahl' ) funktioniert nicht.

Auch
INSERT INTO test ( name,  mail, mehrfachauswahl ) values( '$name', '$mail', '$mehrfachauswahl[]' ) nicht.

peter ;-(

  1. Wie bekomme ich eine Mehrfachauswahl mittels PHP
    <select name=mehrfachauswahl[] size=3 multiple>
    <option>a</option>
    <option>b</option>
    <option>c</option>
    </select>
    in ein SET-Feld in eine MySQL-Datenbank ?

    INSERT INTO test ( name,  mail, mehrfachauswahl ) values( '$name', '$mail', '$mehrfachauswahl' ) funktioniert nicht.

    Auch
    INSERT INTO test ( name,  mail, mehrfachauswahl ) values( '$name', '$mail', '$mehrfachauswahl[]' ) nicht.

    Dir ist bekannt, daß dein Formular in der Auswerteseite ein Array namens "$mehrfachauswahl" erzeugt?

    Wenn nein, dann ist das der Ansatz zur Lösung deines Brettes vom Kopf.

    Die erste Variante geht logischerweise nicht, da wird wohl nur "Array" in die DB geschrieben.

    Und die zweite Variante geht nicht, weil kein Index angegeben wird. Die Schreibweise ohne Index ist nur dann sinnvoll, wenn du hinten ans Array noch einen Wert anhängen willst.

    Du mußt deine Daten vor dem Eintragen in die DB etwas aufbereiten. Abhängig davon, wie du später wieder ran willst, könntest du die Einträge durch Komma trennen.

    $eintrag=$mfa[0].",".$mfa[1].",".$mfa[2];
    wäre eine simple (und schlechte) Möglichkeit, aber sie zeigt das Prinzip: Alle Array-Elemente mit einem Trennzeichen hintereinander in einen String zu übertragen und den dann in die Datenbank schreiben.

    Zum Glück gibts dafür eine Funktion:
    implode(string glue, array pieces);
    http://www.selfphp4.de/funktionsreferenz/string_funktionen/implode.php

    Damit gehts einfach:
    $eintrag=implode(",",$mfa);

    PS: $mfa habe ich mal abgekürzt, gemeint ist $mehrfachauswahl.

    - Sven Rautenberg

    1. Vielen vielen ... Dank Sven.

      /*    for ($i = 0; $i < count($mehrfachauswahl); $i++ )
          {
            if($i < ( count($mehrfachauswahl)-1) )
            {$mehrfach .= "$mehrfachauswahl[$i],";}
            else
            {$mehrfach .= "$mehrfachauswahl[$i]";}
          }*/
          $mehrfach = implode(",",$mehrfachauswahl);
          print "$mehrfach";

      Hab' es bis zu Deiner genialen Funktion implode mittels for-Schleife zusammengebastelt, hat zwar auch funktioniert, aber Deine Funktion ist es ;-)

      peter

      1. Vielen vielen ... Dank Sven.

        /*    for ($i = 0; $i < count($mehrfachauswahl); $i++ )
            {
              if($i < ( count($mehrfachauswahl)-1) )
              {$mehrfach .= "$mehrfachauswahl[$i],";}
              else
              {$mehrfach .= "$mehrfachauswahl[$i]";}
            }*/
            $mehrfach = implode(",",$mehrfachauswahl);
            print "$mehrfach";

        Hab' es bis zu Deiner genialen Funktion implode mittels for-Schleife zusammengebastelt, hat zwar auch funktioniert, aber Deine Funktion ist es ;-)

        Obacht: Es gibt auch das Gegenteil von "implode". Das heißt logischerweise "explode" und zerlegt einen String an den Stellen des Trennzeichens in Elemente eines Arrays. Nur mußt du, wenn du das ausnutzt, vorsichtig in der Wahl deines Trennzeichens sein, denn es sollte im normalen Text nicht vorkommen.

        Bei einer Mehrfach-Selektliste kann man das Vorkommen von Kommas relativ sicher ausschließen, deshalb ist das kein Problem.

        - Sven Rautenberg

        1. thanks a lot lot ... ;-)

          pm