mehrdimensionales Array

TinaX

Grünschnabel
Hi!

Bitte macht mir ein Weihnachtsgeschenk und helft mir bitte bitte bitte bei folgendem Problemchen...

Ich möchte Artikelvarianten zu einem Hauptartikel anlegen. Ich kann aussuchen, wieviele Varianten angelegt werden sollen.

$_REQUEST[aid] ist die Artikelnummer, zu der die Varianten gehören sollen.
$_REQUESTregnum] ist die Anzahl der Felder, die generiert werden sollen.

PHP:
<form action="addvariants_script.php" method="post">
<? 
if (isset($_REQUEST[regnum]))
{
for ($i=1; $i<=$_REQUEST[anzahl]; $i++)
{
?> 
<input name="aid[]" type="hidden" value="<?=$_REQUEST[aid]?>">
<tr><td colspan="4" class="header">Variante <?=$i?></td></tr>
<tr><td valign="top">Var<?=$i?> DE:</td><td><input name="var_de[]" type="text" size="41" maxlength="50"></td>
	<td valign="top">Var<?=$i?> EN:</td><td><input name="var_en[]" type="text" size="41" maxlength="50"></td></tr>
<tr><td valign="top">Var<?=$i?> Nr.:</td><td><input name="var_no[]" type="text" size="41" maxlength="50"></td>
	<td valign="top">Var<?=$i?> Preis:</td><td><input name="var_price[]" type="text" size="41" maxlength="50"></td></tr>
<? 
}
echo '<tr><td colspan="4"><br><br><input type="Submit" name="sendfiles" value="Varianten speichern"></td></tr>';
}
 
?>
</form>

Beim folgenden Beispiel möchte ich 2 Varianten hinzufügen. Die "addvariants_script.php" sieht so aus:

PHP:
include 'dbconnect.php';
foreach ($_POST[aid] AS $aid) {
$updatecats=mysql_query("INSERT IGNORE INTO variants SET var_de='$_POST[var_de]', var_en='$_POST[var_en]', var_no='$_POST[var_no]', var_price='$_POST[var_price]', AID='$aid'");
}
print_r($_POST);

Die Ausgabe sieht wie folgt aus:

PHP:
Array ( [aid] => Array ( [0] => 268 [1] => 268 ) 
[var_de] => Array ( [0] => Variante 5 DE [1] => Variante 6 DE ) 
[var_en] => Array ( [0] => Variante 5 EN [1] => Variante 6 EN ) 
[var_no] => Array ( [0] => 555 [1] => 666 ) 
[var_price] => Array ( [0] => 39,90 [1] => 68,90 ) 
[sendfiles] => Varianten speichern )

In die Datenbank wird in jedes Feld "Array" geschrieben - außer im Feld AID steht "268"

Ich weiß, das ist eine dumme Frage, aber um ehrlich zu sein, hab ich mich vor diesen Arrays immer so gut wie möglich gedrückt - und jetzt bekomm ich die Rechnung dafür :-(

Wär supertoll, wenn jemand so nett wäre und mir meinen Denkfehler bei dieser Sache erklären könnte...

Danke euch schonmal im voraus!

LG, TinaX
 
Zuletzt bearbeitet:
Hi!
TinaX hat gesagt.:
In die Datenbank wird in jedes Feld "Array" geschrieben - außer im Feld AID steht "268"

Ich weiß, das ist eine dumme Frage, aber um ehrlich zu sein, hab ich mich vor diesen Arrays immer so gut wie möglich gedrückt - und jetzt bekomm ich die Rechnung dafür :-(
Das Problem ist das folgende: Du versuchst einen Array in eine Datenbank zu speichern. Ein MySQL-Query ist aber ein String - du kannst aber einen Array nicht als String darstellen, indem du sagst "echo $meinArray;" (oder eben einen Array in einen String einbindest).

Du musst dein Array also in einen String umwandeln. Ich mache das immer so, dass ich die einzelnen Elemente urlencode und dann mit einem Piping-Symbol zusammen-"klebe". Aus einem Array wird dann z. B. dieser String:
PHP:
$meinArray = array('ein Text mit Lücke', 155, 'xyz');
// wird zu 
$meinString = 'ein+Text+mit+L%FCcke|155|xyz';

Mamphil
 
Hi!

Also danke schonmal für deine Erklärung.
Leider hilft mir das im Augenblick nicht wirklich weiter... :-(

Also ich bekomme ein Array übergeben, das weitere Array´s enthält.
Ich denke mal, das die Übergabe vom Formular stimmt.

Ich dachte eigentlich, daß ich dieses Überdrüber-Array in einer foreach-Schleife definieren kann und dann die "Unter-Arrays" über diese Variable ansprechen kann.

Also praktisch:

PHP:
foreach ($_POST[array] AS $array) {
mysql_query("insert into table set feld1=$array[var_de], feld2=$array[var_en]... usw");
}

Ich weiß, daß das jetzt ein wenig dreist rüberkommt, aber könntest du deine Erläuterung auf mein Script umlegen? Das wär echt supernett - ich glaub ich seh den Wald vor lauter Bäumen nicht mehr...

Danke, TinaX
 
Oops, ich glaub, ich habs...


PHP:
$i=0;
foreach ($_POST[aid] AS $aid) {
$var_de=$_POST[var_de];
$var_en=$_POST[var_en];
$var_no=$_POST[var_no];
$var_price=$_POST[var_price];
mysql_query("INSERT INTO variants SET var_de='$var_de[$i]', var_en='$var_en[$i]', var_no='$var_no[$i]', var_price='$var_price[$i]', AID='$aid'");
$i++;
}

So funktionierts! Ist das richtig so?
Danke, TinaX
 
Zurück