Mehrfachauswahl in SET-Feld von MySQL
peter
- php
0 Sven Rautenberg0 peter0 Sven Rautenberg0 peter
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 ;-(
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
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
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
thanks a lot lot ... ;-)
pm