phpbar.de logo

Mailinglisten-Archive

Re: PHP bei Fieldtype "set".
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PHP bei Fieldtype "set".



> ich steh wohl grad ein wenig auf dem Schlauch und fand noch keine
> Frage zu dem Thema, seit ich auf der Liste bin. Also Folgendes:

Kein Wunder, ist ja auch nicht die PHP-Liste. ;-)
Eigentlich somit hier vollkommen OT, aber vielleicht dennoch
hilfreich. Mehr zur PHP-Liste im PHP-Center, URL siehe unten. 
 
> | Bereich | set('1','2','3','4') | YES  |     | NULL    |                |
[...]
> | <select name="Bereich" size=10 multiple>
> |  <option value="1">Gesch&auml;fts-/Unternehmensleitung
> |  <option value="2">Einkauf/Beschaffung
> |  <option value="3">Fertigung/Produktion
> |  <option value="4">Vertrieb/Marketing
> | </select>
[...] 
> | mysql_connect("HOST",USER);
> | mysql_select_db("DB");
> | $replace_query = "REPLACE INTO table (Adressnummer,Bereich) VALUES ('$ID', '$Bereich')";
> | mysql_query($replace_query);
[...] 
> Er übergibt jeweils nur den Wert des zuletzt in der Liste gewählen
> OPTION-Punktes und nicht die gesamte List. Wenn also beispielsweise
> value="1" UND value="3" vom HTML-Form übergeben werden, dann schreibt
> PHP nur "3" in das Feld "Bereich", was ich für ziemlich unschön halte.

Nun, es ist eher das uebliche Verhalten und eigentlich auch kaum
verwunderlich, da $Bereich eine normale Variable ist, insofern wird
deren Wert durch den "letzten" uebergebenen Wert des HTML-Formulars
definiert. 

Daher schreibe man <select name="Bereich[]" size="10" multiple>

Damit wird die Variable $Bereich von PHP als Array interpretiert, so
dass nach Absenden des Formulars alle selecteten Werte darin zu finden
sind. 
Z.B. nach Anwaehlen von "Einkauf/Beschaffung" und "Vertrieb/Marketing"
somit die Werte 2 und 4, d.h. das Array sieht wie folgt aus:
$Bereich[0] == 2
$Bereich[1] == 4

Daraus folgt, dass Du die Werte nicht unmittelbar in die Datenbank
schreiben kannst, sondern zunaechst ein wenig nachbehandeln musst, um
das richtige REPLACE-Statement zu erzeugen. 

Also Schleife ueber das Array, je nach vorhandenen Werten einen
geeigneten String fuer REPLACE generieren. 

for ($i = 0; $i < count($Bereich) ; $i++)
{
   $set_string .= "'" . $Bereich[$i] . "',"; // Werte: 'Zahl',
}
$set_string = substr($set_string, 0, -1); // letztes Komma weg

Dann kann $set_string in Deiner $replace_query angegeben werden. 

Diese Loesung ist zwar moeglich, aber irgendwie doch
unschoen. Fuer derartige Zwecke benutze ich daher eine Klasse namens
bitpfriemler, siehe http://kuerbis.org/bitpfriemler/

Beste Gruesse,
   Ralf
-- 
/ ralf_(at)_kuerbis.org               ->  http://www.kuerbis.org
/ PHP-Center - alles rund um PHP ->  http://www.php-center.de

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive