Supportnet / Forum / Skripte(PHP,ASP,Perl...)
foreach und implode
Frage
ich habe ein Array und möchte die Werte darin in mysql speichern.
foreach ($_SESSION['arrayname'] as $Key => $value)
foreach ($value as $Schlüssel => $werte)
$query = " INSERT INTO tabelle (".implode(', ',$basekeys). ")
VALUES (".implode(", ",$werte). ")";
Wenn ich mir den SQL-String ausgeben lasse:
Insert Tabelle "(S1,S2,S3,S4)" Values ( )
Warum wird kein values übergeben?
Gruss
Antwort 1 von son_quatsch
Weil du gar nicht auf die innerhalb der Schleifen deklarierten Variablen zugreifst, sondern auf $basekeys bloß - ansonsten würden auch die Spaltennamen gar nicht stimmen. Und schlussendlich kann es gar nicht so gehen - entweder man "implodiert" ein Feld, oder man geht das Feld elementweise per foreach durch. Aber nicht beides zusammen.
foreach ($_SESSION['arrayname'] as $key1 => $val1) {
$query= 'INSERT INTO tabelle('. implode(', ', $key1). ') VALUES ('\'. implode('\', \'', $val1). '\')';
echo $query;
}
foreach ($_SESSION['arrayname'] as $key1 => $val1) {
$query= 'INSERT INTO tabelle('. implode(', ', $key1). ') VALUES ('\'. implode('\', \'', $val1). '\')';
echo $query;
}
Antwort 2 von der_verzweifelte
Hallo,
danke für den Tipp.
wenn ich es so versuche kommen 2 Fehler:
Unexpected character in input: '\' (ASCII=92) state=1 und syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
in der Zeile:
$query= 'INSERT INTO tabelle('. implode(', ', $key1). ') VALUES ('\'. implode('\', \'', $val1). '\')';
Die foreach-Schleife muss ich 2 mal durchlassen das es sich um ein 2 dinensionales Array handelt
danke für den Tipp.
wenn ich es so versuche kommen 2 Fehler:
Unexpected character in input: '\' (ASCII=92) state=1 und syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
in der Zeile:
$query= 'INSERT INTO tabelle('. implode(', ', $key1). ') VALUES ('\'. implode('\', \'', $val1). '\')';
Die foreach-Schleife muss ich 2 mal durchlassen das es sich um ein 2 dinensionales Array handelt
Antwort 3 von son_quatsch
Aha
Natürlich weiß ich jetzt nich, wie ein Beispielfeld aussieht...
foreach ($_SESSION['arrayname'] as $key1=> $val1) {
foreach ($val1 as $key2=> $val2) {
$query= 'INSERT INTO tabelle('. implode(', ', $key2). ') VALUES ('\''. implode('\', \'', $val2). '\')';
echo $query;
}
} Natürlich weiß ich jetzt nich, wie ein Beispielfeld aussieht...
Antwort 4 von der_verzweifelte
Natürlich weiß ich jetzt nich, wie ein Beispielfeld aussieht... <--- welches Beispielfeld?
Antwort 5 von son_quatsch
Zitat:
$_SESSION['arrayname']
$_SESSION['arrayname']
...wie es beispielsweise gefüllt sein kann.
Und - werden die SQLs nun deinen Wünschen entsprechend generiert?
Antwort 6 von der_verzweifelte
aso sorry:
arrayname
(
[0] => Array
(
[Spalte1] => wert
)
[1] => Array
(
[Spalte2] => wert
)
[2] => Array
(
[Spalte3] => wert
)
[3] => Array
(
[Spalte4] => wert
)
[4] => Array
(
[Spalte5] => wert
)
[5] => Array
(
[Spalte1] => wert
)
[6] => Array
(
[Spalte2] => wert
)
[7] => Array
(
[Spalte3] => wert
)
[8] => Array
(
[Spalte4] => wert
)
[9] => Array
(
[Spalte5] => wert
)
)
Und - werden die SQLs nun deinen Wünschen entsprechend generiert? <--- Nein, leider nicht
Fehlermeldung:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in
arrayname
(
[0] => Array
(
[Spalte1] => wert
)
[1] => Array
(
[Spalte2] => wert
)
[2] => Array
(
[Spalte3] => wert
)
[3] => Array
(
[Spalte4] => wert
)
[4] => Array
(
[Spalte5] => wert
)
[5] => Array
(
[Spalte1] => wert
)
[6] => Array
(
[Spalte2] => wert
)
[7] => Array
(
[Spalte3] => wert
)
[8] => Array
(
[Spalte4] => wert
)
[9] => Array
(
[Spalte5] => wert
)
)
Und - werden die SQLs nun deinen Wünschen entsprechend generiert? <--- Nein, leider nicht
Fehlermeldung:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in
Antwort 7 von son_quatsch
Das verstehe ich nicht: anfangs war von 4 Spalten die Rede (S1, S2, S3, S4). Dein Beispiel ist jetzt ein loses Feld, was pro Element ein ein-element-haltiges Feld hat (keine glückliche Lösung). Da sich aber die Schlüssel der inneren Feldelemente (Spalte1... Spalte5, Spalte1... Spalte5) wiederholen weiß ich nicht, wo hier nun das erste SQL aufhören soll und wo das zweite anfängt... Oder soll anhand eines bestimmt Spaltennamens (z.B. Spalte1) immer ein neues SQL beginnen?
Antwort 8 von der_verzweifelte
Ob es nun 4,5 oder 10 Spalten sind nicht SO wichtig.
Wenn eine zeile mit werten ausgefüllt ist -> 4 Spalten
kann mittels eines Buttons eine neue zeile hinzugefügt werden und dann werden wieder werte für die 4 Spalten eingegeben.
S1 S2 S3 S4 S5
1 2 3 4 5
2 3 4 5 6
Button
Es können also beliebig viele Zeilen eingeben werden. Die Spalten bleiben immer dieselben.
Wenn eine zeile mit werten ausgefüllt ist -> 4 Spalten
kann mittels eines Buttons eine neue zeile hinzugefügt werden und dann werden wieder werte für die 4 Spalten eingegeben.
S1 S2 S3 S4 S5
1 2 3 4 5
2 3 4 5 6
Button
Es können also beliebig viele Zeilen eingeben werden. Die Spalten bleiben immer dieselben.
Antwort 9 von son_quatsch
Doch, das ist schon wichtig - ich nehme jetzt mal an, dass es sich um je 5 Spalten handelt:
Ansonsten mach doch mal
und poste hier das Ergebnis (mit [ code ] und [ /code ] drumrum, siehe Button "Code")
$aTmp= array();
foreach ($_SESSION['arrayname'] as $val1) {
foreach ($val1 as $key2=> $val2) {
$aTmp[$key2]= $val2;
if (count($aTmp)== 5) {
$query= 'INSERT INTO tabelle('. implode(', ', array_keys($aTmp)). ') VALUES (\''. implode('\', \'', $aTmp). '\')';
echo $query;
$aTmp= array();
}
}
}Ansonsten mach doch mal
print_r($_SESSION['arrayname']);und poste hier das Ergebnis (mit [ code ] und [ /code ] drumrum, siehe Button "Code")
Antwort 10 von der_verzweifelte
es funktioniert son_quatsch , DANKE SCHÖN !!!!!

