mysql — передача значений в корзину покупок PHP

В настоящее время я работаю над проектом корзины покупок PHP в веб-разработке. Проблема, которую мне еще предстоит решить, заключается в передаче значений продукта, которые я выбираю из моего product_list.php, в cart.php — независимо от того, какой продукт я нажимаю, имя последнего продукта, найденного в моей таблице продуктов, остается неизменным. при появлении на странице cart.php.

Например, я бы выбрал Бамбуковый коврик с идентификатором №. 2, но название продукта, которое будет отображаться в cart.php, это Bamboo Fence, а не id. 8. Кроме того, значение, которое появляется в количество столбец — количество оставшихся позиций выбранного товара.

Только значения в Товар а также Цена столбцы появляются как надо.

Вот файл product_list.php:

<?php

$err_level = error_reporting(0);
$conn = mysql_connect('params');
error_reporting($err_level);
?>
<?php

include "storescripts/connect_to_mysql.php";?>

<html>
<head>
<title>Product List | Bamboo Art</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>

<div class="container">
<div class="header">
Bamboo Art
</div>
<div id="nav">
<ul id="nav">

<li><a href="index.php">Home</a>
</li><!--
--><li><a href="#" class="current">Products</a>
</li><!--
--><li><a href="#">Contact Us</a>
</li>

</ul>
</div><div class="content_product-list"><form method="POST" action="addtocart.php">
<?php

$sql = "SELECT * FROM products";
$query = mysql_query($sql);

while ($row = mysql_fetch_assoc($query)) {?>
<div class="products">

<input type='hidden'  name='id' value=' <?php echo $row['id'] ?> '>
<?php echo "<img src='". $row['image'] ."' width=290 height=220>" ?><br><br>

<h3><?php echo $row['name'] . '<input type="hidden"  name="name" value="' . $row['name'] . '">' ?></h3>

<h4><?php echo $row['description'] . '<input type="hidden"  name="description" value="' . $row['description'] . '">' ?></h4>

Price: Php <?php echo $row['price'] . '<input type="hidden"  name="price" value="' . $row['price'] . '">' ?><br>
<?php echo " Availability: "  . $row['qty'] . " <br/>" ?>
<?php echo " Quantity: <select name='qty' style='width:40px;'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select> "?>
<br><br>
<input type='submit' value='Add to Cart' name='submit'>   <br/>

</div><?php

}

?>
</form>
<br/></div>
</div>
</div>
</div>
</body>
</html>

Addtocart.php:

<?php

include "storescripts/connect_to_mysql.php";

if (isset($_POST['submit'])) {

$qty=$_REQUEST['qty'];
$name=$_REQUEST['name'];
$price=$_REQUEST['price'];
$id=$_REQUEST['id'];$rs=mysql_query("SELECT * FROM cart WHERE prod_id='$id'",$con) or die (mysql_error());
if (mysql_num_rows($rs)>0 )
{
mysql_query("UPDATE cart SET qty=(qty+'$qty') WHERE prod_id='$id'",$con) or die (mysql_error());
mysql_query("UPDATE sales_record SET qty=(qty+'$qty') WHERE product_name='$name'",$con);

}

else
{
mysql_query("INSERT INTO cart (`cart_id`, `prod_id`, `qty`, `name`, `price`) VALUES (NULL, '$id', '$qty', '$name', '$price');",$con) or die(mysql_error());

mysql_query("INSERT INTO sales_record (`sales_id`, `customer_id`, `product_name`, `qty`,`price`) VALUES (NULL, '', '$name', '$qty', '$price');",$con);
}

mysql_query("UPDATE products SET qty=(qty-'$qty') WHERE id='$id'",$con) or die(mysql_error());

header("location:cart.php");
exit;
}

?>

Файл cart.php:

<?php
include "storescripts/connect_to_mysql.php";

if(isset($_POST['checkout'])){
header("location:orders.php");
}
if(isset($_POST['shop'])){
header("location:product_list.php");
}

?>
<html>
<head>
<title>Shopping Cart | Bamboo Art</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div class="container">
<div class="header">
Bamboo Art
</div>
<div id="nav">
<ul id="nav">

<li><a href="index.php">Home</a>
</li><!--
--><li><a href="product_list.php">Products</a>
</li><!--
--><li><a href="contactus.html">Contact Us</a>
</li>

</ul>
</div>
<div class="content">

<div class="table_content"><h2>Your Cart</h2>
<form method="post">
<table id="table" align="center" border="0" width="100%">
<th>Qty</th>
<th>Product</th>
<th>Price</th>
<th>Total</th>
<tr>
<?php
//extract all items from the temporary cart
$q="SELECT * FROM cart, products WHERE cart.prod_id=products.id";

$rs=mysql_query($q) or die (mysql_error());
$total=0;
while($row=mysql_fetch_array($rs)){
echo '<td>'. $row['qty'] .'<input type="hidden" name="qty" value="' . $row['qty'] . '"></td>';
echo '<td>'. $row['name'] .'<input type="hidden" name="name" value="' . $row['name'] . '"></td>';
echo '<td>'. number_format($row['price'],'2','.',',') .'<input type="hidden" name="price" value="' . number_format($row['price'],'2','.',',') . '"></td>';
echo '<td><b>' . number_format(($row['qty']*$row['price']),'2','.',',') . '</b><input type="hidden" name="total" value="' . number_format(($row['qty']*$row['price']),'2','.',',') . '"></td>';
$total+=($row['qty']*$row['price']);
echo '</tr>';
echo '<tr>';
}
?>

<tr></tr>
<tr></tr>
<tr><td colspan="3"><strong>GRAND TOTAL</strong></td>
<td><?php echo number_format($total,'2','.',',');?><input type="hidden" name="gtotal" value="<?php echo number_format($total,'2','.',',');?>"></td>

</tr>
<tr height="40px"></tr>
<tr>
<td></td><td><input type="submit" name="checkout" value="Check Out" /></td>
<td><input type="submit" name="shop" value="Back to Shopping" /></td>
</tr>
</table>

</form>
</div>

</div>

</div>
</body>
</html>

Я взглянул на несколько примеров кодов корзины покупок, пытаясь понять, есть ли решение для этого, но это только озадачило меня.

Я нашел этот вопрос это звучит похоже на проблему, которая у меня есть, но я не могу использовать Javascript при создании этой корзины — только HTML, CSS и PHP.

В настоящее время я использую версию PHP 4.2.7.1.

0

Решение

Проблема в том, что у вас есть только одна форма и несколько полей ввода с одинаковым именем. Каждый раз, когда вы устанавливаете новый скрытый ввод, вы присваиваете ему одно и то же имя, в основном «перезаписывая» данные $ _POST, которые вы будете отправлять при отправке. Вы можете пойти на что-то вроде:

input type="hidden" name="name[]"

а затем получить доступ к этому, как это в вашей addtocart:

$_POST['name'][2]

Вы должны будете основывать индекс на нажатой кнопке отправки.

Другими вариантами будет создание формы для каждого продукта или использование $ _GET для передачи идентификатора продукта вместе с количеством.

0

Другие решения

Хорошо, мой product_list.php теперь может передавать значения идентификатора продукта и имени, выбранного клиентом, в cart.php:

<?php

$sql = "SELECT * FROM products";
$query = mysql_query($sql);

while ($row = mysql_fetch_assoc($query)) {
echo "<div class='products'>";
echo "<form method='POST' action='addtocart.php'>";
echo "<img src='". $row['image'] ."' width=290 height=220><br><br>";

echo "<h3>". $row['name'] . '<input type="hidden"  name="name" value="' . $row['name'] . '">' . "</h3>";

echo "<h4>" . $row['description'] . '<input type="hidden"  name="description" value="' . $row['description'] . '">' . "</h4>";

echo "Price: Php" . $row['price'] . '<input type="hidden"  name="price" value="' . $row['price'] . '">' . "<br>";
echo " Availability: "  . $row['qty'] . " <br/>";
echo " <select name='qty' style='width:40px;'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input type='hidden'  name='id' value='" . $row['id'] ." '>
<br><br>
<input type='submit' value='Add to Cart' name='submit'>   <br/>";
echo '</form>';
echo " </div>";}?>

Однако количество отображается некорректно — вместо отображения количества, выбранного клиентом, оно вычитает это количество из общего количества товаров в продаже. Например, в продаже имеется 9 бамбуковых фонарей, заказчик заказывает 3, но количество, отображаемое в cart.php, равно 6.

Я также изменил кол-во поле в таблицах cart и sales_record для cart_qty а также sr_qty, соответственно, думая, что это произошло из-за конфликта, но это не имело никакого значения.

0