online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon der_verzweifelte vom 28.08.2020, 13:14 Options

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 !!!!!

Ähnliche Themen

unterprogramme
hörbie  16.02.2007 - 47 Hits - 11 Antworten

PHP 5 läuft nicht
Phillip  17.02.2007 - 129 Hits - 1 Antwort

Selectfelder mit JavaScript vorselektieren
Pagestylist  18.02.2007 - 79 Hits - 1 Antwort

Fehlermeldung
Aki  19.02.2007 - 68 Hits - 1 Antwort

VISUAL BASIC .NET // Ereignissprotokolle sichern
Vice  23.02.2007 - 79 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Sun Jan 25 18:15:21 2026