Supportnet Computer
Planet of Tech

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;
}

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

Antwort 3 von son_quatsch

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

Natürlich weiß ich jetzt nich, wie ein Beispielfeld aussieht... <--- welches Beispielfeld?

Antwort 5 von son_quatsch

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

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

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.

Antwort 9 von son_quatsch

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

es funktioniert son_quatsch , DANKE SCHÖN !!!!!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: