Array an Mysql Datenbank übergeben

petschni

Mitglied
Hallo,

folgenden funktionierenden Code habe ich

Code:
<td width="180"><select name="Land[]" size="5" multiple>
<option value=" Argentinien">Argentinien</option>
<option value="Australien">Australien</option>
<option value="Bolivien">Bolivien</option>
<option value="Brasilien">Brasilien</option>
.....

foreach ($Land as $option) echo "Option = $option,";

Nun möchte ich, dass er statt es per echo ausgibt, es in meine SQL Datenbank schreibt und wollte das folgendermaßen machen:

Code:
.....

foreach ($Land as $option) 
$Land2[] = $option ;

    $sqlkommando = "INSERT INTO pgost_betreuerdatenbank  (Land) VALUES ('$Land2')";

Leider funktioniert das so nicht. Weiß jemand, wo ich den Fehler in der Syntax habe?

viele grüße und danke
peter
 
1.) Du musst die SQL-Anweisung nicht nur in einen String schreiben, sondern sie auch ausführen. Zuvor bitte nicht vergessen die Verbindung zur Datenbank herzustellen und eventuelle Fehlermeldungen von der Bank abfangen.
--> [phpf]mysql_connect[/phpf]
--> [phpf]mysql_select_db[/phpf]
--> [phpf]mysql_query[/phpf]
--> [phpf]mysql_error[/phpf]

2.) Solltest Du das alles schon machen, dann funktioniert es trotzdem nicht, weil Du nicht so einfach ein Array in die Datenbank schreiben kannst. Es gibt ja auch keinen Feldtyp "Array". Wenn Du unbedingt ein Array abspeichern willst, dann musst Du es vorher serialisieren und als Zeichenkette in die Datenbank schreiben.
--> [phpf]serialize[/phpf]

snuu
 
Hallo,

erst einmal vielen Dank für die Antworten. Was ich vorhabe ist, dass jemand in einem Formular mehrer Länder auswhälen kann und dann sollen alle Länder in eine Zelle der Mysql Datenbank geschrieben werden und das geht doch nur über einen Array, oder?

Der Schreibzugriff auf die Datenbank funktioniert schon.
Ich habe den Code jetzt auf
Code:
foreach ($Land as $option) 
{
$Land2  = serialize($option) ;
}
geändert. Jetzt schreibt er in die Datenbank immer noch nur das lezte Element , welches man ausgewählt hat und nicht beide und noch einen Index davor: s:9:"Brasilien";

Eigentlich soll er ja blos, statt es in "echo" auszugeben es nacheinadner in einer Variable schreiben.

viele grüße und danke für eure hilfe

peter
 
Probier das mal:

PHP:
foreach($_REQUEST['Land'] as $val) {

	$sql = "INSERT INTO pgost_betreuerdatenbank (Land) VALUES ('".$val."')";
	$result = mysql_query($sql) or die(mysql_error());

}
 
Na gut, dann wohl eher so:
PHP:
$sql = "INSERT INTO pgost_betreuerdatenbank (Land) VALUES ('".mysql_escape_string(join(',',$_REQUEST['Land']))."')"; 
$result = mysql_query($sql) or die(mysql_error());

snuu
 
@snuu

Vielen Dank - dein Scriptstück funktioniert wunderbar - könntest du mir noch kurz erklären, was es macht?
 
join(string glue, array pieces)
Mit join() fügt man ein Array (pieces) anhand eines Trennzeichens (glue) zu
einem String zusammen. Dabei werden die Array-Elemente nacheinander an den
String angehängt.

Beispiel:
Code:
<?php
   $array = array(Hallo,du,da);
   echo join(" ", $array) . "<br>";
   echo join(",", $array) . "<br>";
?>
würde folgendes ausgeben:
Hallo du da
Hallo,du,da

mysql_escape_string(string unescaped_string)
Diese Funktion maskiert unescaped_string zur sicheren Benutzung in mysql_query().

Beispiel:
' wird zu \'
" wird zu \"
\ wird zu \\


Gruß Marvin.
 
Zurück