PHP Mehrdimensionale arrays und mysql update.

volcem

Lieutenant
Registriert
Dez. 2007
Beiträge
1.021
Guten Tag,

ich will es gleich von vorne rein sagen, bin nicht so fit was Mehrdimensionale arrays angeht :(

Folgendes Problem:

Ich Generiere aus der Datenbank eine Liste (Warenkorb) per "while" Schleife, da stehen dann Werte wie:
ID->Menge->Preis drin.

Nun will ich wenn jemand die Menge ändert das er das auch übernimmt.

Das ist das Formular:

PHP:
while($row = mysql_fetch_array($product_details)) 
    {
    $id = mysql_real_escape_string($row['id']);
    $image = mysql_real_escape_string($row['product_image']);
    $product_id = mysql_real_escape_string($row['product_id']);
    $product_title =mysql_real_escape_string($row['product_title']);
    $price = mysql_real_escape_string($row['product_price']);
    $menge = mysql_real_escape_string($row['quantity']);
    $supprice = $menge * $price;
    echo '<tr valign="top"><td width="400"><table border="0" width="100%" cellspacing="0" cellpadding="0" class="productListing"> 
  <tr> 
    <td align="center" class="productListing-heading" width="50">Löschen</td> 
    <td class="productListing-heading" width="80" align="left">Produkt(e)</td> 
    <td class="productListing-heading" width="230" align="left">Produkt Titel</td>
    <td align="center" class="productListing-heading" width="40">Menge.</td> 
    <td align="right" class="productListing-heading" width="40">Total</td> 
  </tr> 
  <tr class="productListing-even"> 
    <td align="center" class="productListing-data" valign="top"><input type="checkbox" name="cart_delete[]" value="'.$id.'"></td> 
<td class="productListing-data"><table border="0" cellspacing="0" cellpadding="0">
<tr><td class="productListing-data" style="padding-left:0px" align="center"><a href="product_info.php?products_id='.$product_id.'">
<img src="image.php?w=70&img=images/artikel/'.$image.'" border="0" alt="'.$product_title.'" title="'.$product_title.'" class=image_border></a>
</td></tr></table></td><td class="productListing-data" valign="top"><b>'.$product_title.'</b><br></td>
    <input type="hidden" name="id[]" value="'.$id.'"> 
 <td align="center" class="productListing-data" valign="top"><input type="text" name="quantity[]" value="'.$menge.'" size="3">
<input type="hidden" name="price[]" value="'.$price.'"></td> 
    <td align="right" class="productListing-data" valign="top"><b>'.$supprice.'€</b></td> 
  </tr></table></td></tr>';
    }

Das Funktioniert auch super, doch wenn ich nun das Formular abschicke wird immer die erste ID nur geändert ( Oder alle erhalten den gleichen Mengen Wert )

Alle Daten werden als array abgeschickt
Das sagt print_r:

PHP:
Array ( [id] => Array ( [0] => 126 [1] => 124 [2] => 125 ) [quantity] => Array ( [0] => 1 [1]
=> 1 [2] => 1 ) [price] => Array ( [0] => 4.99 [1] => 4.99 [2] => 4.99 ) [update_cart_x] =>
61 [update_cart_y] => 3 [update_cart] => updatecart )

Doch wie bekomme ich das so hin das zum Beispiel:

ID => 1 quantity => 5 geupdatet wird?
Die anderen Werte sollen natürlich auch gleich per update eingespeist werden.

Also kurz:

Wie führe ich die array zusammen für einen mysql update, dass ich einfach einen Update Befehl ausführen kann:

PHP:
//Beispiel
mysql_query("UPDATE cartitem SET `quantity` ='$menge' WHERE id ='$id' ") or mysql_error();


Also alle Daten aus dem array lesen mache ich bis jetzt immer so ( wenn es nur ein array gibt)

PHP:
for ($i=0; $i<count($id); $i++)
{
	$id_array = $id[$i];

	//zeigt alle id´s
       echo $id_array;
}

Das nehme ich auch um Artikel aus dem Warenkorb zu löschen.
Klappt auch wunderbar.

Dann ist da noch eine Zweite Sache:

Ich muss die Menge * Preis nehmen, diese wird dann auch in cartitem gespeichert!

Hoffe einer versteht was ich machen will? :)

Über Anregungen und Vorschläge wäre ich sehr dankbar!
 
Zuletzt bearbeitet:
Hehe ich würde sagen du krempelst das ganze Array mal um. :D

Ich würde es so lösen.
Also Array 0 die IDs und darin die restlichen Werte.

Code:
print_r($warenkorb);

Array (
  [126] => Array (
    [price] => 4.99
    [quantity] => 1
  )
  [124] => Array (
    [price] => 4.99
    [quantity] => 1
  )
  [125] => Array (
    [price] => 4.99
    [quantity] => 1
  )
)

PHP:
echo '<input type="hidden" name="'.$id.'[price]" value="'.$id.'">';
echo '<input type="text" name="'.$id.'[quantity]" value="'.$menge.'">';

Und mit einer foreach alles in die Datenbank jagen.
PHP:
foreach($warenkorb as $id => $data) {
	echo $id . "<br />" . $data['price'] . "<br />" . $data['quantity'];
}
 
Hmm nur wie greife ich auf das array zu, die Daten sind ja nicht immer gleich?

Muss die Daten ja per $_POST abfragen, die ID ist ja immer eine andere, die wird immer um +1 erhöht in der Datenbank.

Stehe gerade auf dem Schlauch....

Also will ja nicht $warenkorb = $_POST; machen, scheint mir ziemlich unsicher.

gebe ich dem array einen statischen Namen, übergibt er nur ein array, der Rest wir verschluckt!



Jetzt habe ich das mal mit meinen Mehrdimensionales array hin und her versucht, raus gekommen ist folgendes:

PHP:
// Anfangsarray Wert ( -1 weil er 0 verschluckt )
$i=-1;
//weiß nicht wie ich drei Variablen in count() bekomme ohne Fehlermeldung deswegen 2 While schleifen.
while($i <count($id, (int)$menge)){
while($i <count($price)){
$i++;
//Rechne Preis zusammen
$test = $menge[$i] * $price[$i];
//Test echo.
echo 'ID '.$id[$i].' hat den mengen Wert '.$menge[$i].' und hat den Preis '.$price[$i].' Zusammen gerechneter Preis: '.$test.'<br />';
}
}

ergibt folgende Ausgabe:

Code:
ID 139 hat den mengen Wert 5 und hat den Preis 4.99 Zusammen gerechneter Preis: 24.95
ID 138 hat den mengen Wert 4 und hat den Preis 4.99 Zusammen gerechneter Preis: 19.96
ID 137 hat den mengen Wert 3 und hat den Preis 4.99 Zusammen gerechneter Preis: 14.97
ID 136 hat den mengen Wert 2 und hat den Preis 4.99 Zusammen gerechneter Preis: 9.98
ID 135 hat den mengen Wert 1 und hat den Preis 5.99 Zusammen gerechneter Preis: 5.99
//Lustig es sind nur 5 Artikel, aber er sagt es sind 6 und zeigt den Satz ohne Wert an???
ID hat den mengen Wert und hat den Preis Zusammen gerechneter Preis: 0

Der tote Satz da, wieso kommt das?
 
Zuletzt bearbeitet:
Die 0 wird verschluckt weil du zuerst mit $i++ hochzählst.
$i steht dann schon auf 1 wenn wenn es verwendet wird. :D
Setz $i++ einfach unter das letzte Echo.

Ich finde die While-Schleife ist hier unangebracht.
Versuchs mal mit Foreach. Oder schau mal ob du damit etwas anfangen kannst:
PHP:
echo '<pre>';
//Die Ware sollte so aus der Datenbank kommen.
$ware = array(
			126 => 4.99,
			124 => 2.99,
			125 => 3.99,
			155 => 9.99);

$w = $_POST['w'];
$w['total'] = 0;
echo '<form method="post" action="test.php">';
foreach($ware as $id => $price) {
	$quantity = htmlentities($w[$id]['quantity']);
	echo '<input type="hidden" name="w['.$id.'][price]" value="'.$price.'">';
	echo $id.': <input type="text" name="w['.$id.'][quantity]" value="'.$quantity.'"> '.$price.'&euro;<br />';
	$w['total'] += $quantity * $price;
}
echo '<input type="submit" value="senden" /> Total: '.$w['total'].'&euro;</form>';
print_r($_POST);
Anstatt der Ausgabe könnte man beim Absenden das ganze in die Datenbank schreiben.
 
Ahh jo so könnte man das auch machen.

Werde wohl das array mit der foreach Schleife abarbeiten.

Ich danke dir r15ch13.
 
Mal ne Frage... Wiesooooooo machste mysql_real_escape_string bei Daten die aus der DB kommen? Sollte das nicht schon vorher passiert sein lol >.<
 
Zurück
Oben