foreach und implode
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 schreiben
Antwort 1 von son_quatsch vom 28.08.2020, 13:22 Options
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;
}
Antwort 2 von der_verzweifelte vom 28.08.2020, 13:31 Options
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
Antwort 3 von son_quatsch vom 28.08.2020, 14:04 Options
Aha
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 vom 28.08.2020, 14:15 Options
Natürlich weiß ich jetzt nich, wie ein Beispielfeld aussieht... <--- welches Beispielfeld?
Antwort 5 von son_quatsch vom 28.08.2020, 14:25 Options
Zitat:
$_SESSION['arrayname']
...wie es beispielsweise gefüllt sein kann.
Und - werden die SQLs nun deinen Wünschen entsprechend generiert?
Antwort 6 von der_verzweifelte vom 28.08.2020, 14:34 Options
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
Antwort 7 von son_quatsch vom 28.08.2020, 14:42 Options
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 vom 28.08.2020, 14:49 Options
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.
Antwort 9 von son_quatsch vom 28.08.2020, 16:00 Options
Doch, das ist schon wichtig - ich nehme jetzt mal an, dass es sich um je 5 Spalten handelt:
$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 vom 28.08.2020, 16:17 Options
es funktioniert son_quatsch , DANKE SCHÖN !!!!!