Permalänk
Medlem

PHP, 3-dimensionell array?

Hejsan,

Jag försöker mig på att skapa en snabborder där alla produkter listas med olika smaker. Man kan välja hur många av dessa produkter man vill ha.

Kod:

while($flavor_row = mysql_fetch_row($flavor_result)) { ?> <table border="0" cellspacing="0" cellpadding="0" width=""> <td class="shopping_cart"></td> <td class="shopping_cart">Produkt</td> <td class="shopping_cart">Smak</td> <td class="shopping_cart">Pris</td> <td class="shopping_cart">Antal</td> <tr> <td><img src="admin/logged_in/product_images/thumb/<?= $row_products[1] ?>"></td> <td><?= $row_products[2] ?></td> <td><?= $flavor_row[0] ?></td> <td><?= $row_products[3] ?>:-</td> <td><input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>]"></td></tr> <?php }

Den koden får med både produkt, smak och antalet av produkten med vald smak.

Men nu är det så att jag även vill få med priset på produkten och då tänkte jag att man konstruerar det på följande vis:

while($flavor_row = mysql_fetch_row($flavor_result)) { ?> <table border="0" cellspacing="0" cellpadding="0" width=""> <td class="shopping_cart"></td> <td class="shopping_cart">Produkt</td> <td class="shopping_cart">Smak</td> <td class="shopping_cart">Pris</td> <td class="shopping_cart">Antal</td> <tr> <td><img src="admin/logged_in/product_images/thumb/<?= $row_products[1] ?>"></td> <td><?= $row_products[2] ?></td> <td><?= $flavor_row[0] ?></td> <td><?= $row_products[3] ?>:-</td> <td><input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>][<?= $row_products[3] ?>]"></td></tr> <?php }

Det jag har gjort är att lagt till $row_products[3] i slutet av qty-fältet.

Är detta rätt? Och hur loopar jag i så fall ut priset?

Visa signatur
Permalänk
Inaktiv

Din HTML är felaktig och vad finns i raden från databasen? Vad är row_products?
Du får förklara lite mer utförligt.

Permalänk
Medlem
Skrivet av anon150287:

Din HTML är felaktig och vad finns i raden från databasen? Vad är row_products?
Du får förklara lite mer utförligt.

Vart är min HTML fel?

row_products innehåller information om produkterna. row_products[0] är id:et på produkten och row_products[3] är priset på produkten. flavor_row[0] är smaken på produkten.

Här är mer kod:

<?php include("db.php"); $get_products = "SELECT * FROM products"; $result_products = mysql_query($get_products) or die(mysql_error()); while($row_products = mysql_fetch_row($result_products)) { $id = $row_products[0]; //Get the flavors $get_flavors = "SELECT flavor FROM flavors WHERE product_id=$id"; $flavor_result = mysql_query($get_flavors) or die(mysql_error()); if(mysql_num_rows($flavor_result) > 0) { while($flavor_row = mysql_fetch_row($flavor_result)) { ?> <table border="0" cellspacing="0" cellpadding="0" width=""> <td class="shopping_cart"></td> <td class="shopping_cart">Produkt</td> <td class="shopping_cart">Smak</td> <td class="shopping_cart">Pris</td> <td class="shopping_cart">Antal</td> <tr> <td><img src="admin/logged_in/product_images/thumb/<?= $row_products[1] ?>"></td> <td><?= $row_products[2] ?></td> <td><?= $flavor_row[0] ?></td> <td><?= $row_products[3] ?>:-</td> <td><input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>][<?= $row_products[3] ?>]"></td></tr> <?php } } else { ?> <table border="0" cellspacing="0" cellpadding="0" width=""> <td class="shopping_cart"></td> <td class="shopping_cart">Produkt</td> <td class="shopping_cart">Smak</td> <td class="shopping_cart">Pris</td> <td class="shopping_cart">Antal</td> <tr> <td><img src="admin/logged_in/product_images/thumb/<?= $row_products[1] ?>"></td> <td><?= $row_products[2] ?></td> <td>Ingen smak</td> <td><?= $row_products[3] ?>:-</td> <td><input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>]"></td> <?php } } ?>

Visa signatur
Permalänk
Medlem

Kan du visa oss hur tabellerna ser ut så kanske vi lättare kan hjälpa dig. Just nu har jag svårt att förstå vad du har problem med.

Ang. HTML felet så har du lite fel med tabellerna.

En tabell bör se ut så här i ditt fall:

<table> <tr> <th></th> </tr> <tr> <td></td> </tr> </table>

th = table header, tr = table row och td = table data
(th kan givetvis bytas ut om td om det passar bättre)

Visa signatur

Mina poster är en illusion. Det som står skrivet här över står i själva verket inte där så inget av det som du läser är sant. Inte ens den här texten. Jag har själv ingen kunskap om det jag skriver och ingen bör således läsa eller ta in den information som står skrivet.

Permalänk
Medlem

Det jag har problem är helt enkelt att jag inte får med mig priset på produkterna när jag trycker på "beställ".

<?php if(isset($_POST['submit'])) { foreach ($_POST['qty'] as $product_id => $flavor_qty) { foreach ($flavor_qty as $flavor => $qty) { if(!empty($qty)) { // Du har beställt $qty st av produkt # $product_id med smak $flavor echo "Du har beställt: " . $qty . "st av produkt_id " . $product_id . " med smak " . $flavor . "<br>"; $get_products = "SELECT product_name,price,product_id FROM products WHERE product_id=$product_id"; $result_products = mysql_query($get_products) or die(mysql_error()); while($row = mysql_fetch_row($result_products)) { $order_items = "INSERT INTO order_items(order_id,product_id,product_name,product_price,quantity,flavor) VALUES( '{$row_order_id[0]}', '$product_id', '{$row[0]}', '{$row[1]}', '$qty', '$flavor')"; mysql_query($order_items) or die(mysql_error()); } } } } } ?>

Tack för påpekandet om tabellerna. Jag ska titta på det.

Visa signatur
Permalänk
Legendarisk

<input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>][<?= $row_products[3] ?>]">

Du tycks ha satt fältets namn till "qty[produktid][smaknamn][antal]". Antal bör vara dess värde istället.

Din kod är även sårbar för sql injections på flera platser eftersom att du varken kontrollerar att värdena är korrekta eller escapar dom innan de används. En användare skulle kunna skicka godtycklig sql att köra istället för din kod.

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Tunnelsork:

<input type="text" name="qty[<?= $row_products[0] ?>][<?= $flavor_row[0] ?>][<?= $row_products[3] ?>]">

Du tycks ha satt fältets namn till "qty[produktid][smaknamn][antal]". Antal bör vara dess värde istället.

Din kod är även sårbar för sql injections på flera platser eftersom att du varken kontrollerar att värdena är korrekta eller escapar dom innan de används. En användare skulle kunna skicka godtycklig sql att köra istället för din kod.

Skickades från m.sweclockers.com

Jag ecapar koden och validerar den innan den går in i loopen. Men jag tog inte med de kodraderna.

Vad menar du med att Antal bör vara dess värde? Det fungerar nu klockrent med smak och produkt samt antalet man valde. Nu vill jag ju bara få med priset på produkten när man tycker beställ.

Visa signatur