#php #html
#php #HTML
Вопрос:
Я создал базовый веб-сайт для покупок, на котором клиент может добавить товар в свою корзину, а затем просмотреть свою корзину, они должны иметь возможность оформить заказ, а товары из корзины должны быть вставлены в базу данных.
Это код, который я использовал, чтобы добавить свой товар в свой cart.php
, используя массив сеансов в качестве множества элементов, которые можно добавить в вашу корзину.
<?php
session_start();
include("DBConn.php");
$msg = "";
if(isset($_POST["add_to_cart"]))
{
if(isset($_SESSION["shopping_cart"]))
{
$item_array_id = array_column($_SESSION["shopping_cart"], "item_id");
if(!in_array($_GET["id"], $item_array_id))
{
$count = count($_SESSION["shopping_cart"]);
$item_array = array(
'item_id' => $_GET["id"],
'item_name' => $_POST["hidden_item"],
'item_price' => $_POST["hidden_price"],
'item_quantity' => $_POST["quantity"]
);
$_SESSION["shopping_cart"][$count] = $item_array;
}
else
{
echo '<script>alert("Item Already Added")</script>';
echo '<script>window.location="book_a_venue.php"</script>';
}
}
else
{
$item_array = array(
'item_id' => $_GET["id"],
'item_name' => $_POST["hidden_item"],
'item_price' => $_POST["hidden_price"],
'item_quantity' => $_POST["quantity"]
);
$_SESSION["shopping_cart"][0] = $item_array;
}
}
?>
Это код, который я использовал для извлечения элементов из сеанса и его отображения, каждый элемент отображается в форме, которая создается динамически. Это элементы, которые я хотел бы вставить в свою базу данных, чтобы сохранить заказ.
<?php
if(!empty($_SESSION["shopping_cart"])){
$total = 0;
foreach($_SESSION["shopping_cart"] as $keys => $values)
{
?>
<form method="post" action="cart.php?action=removeamp;id="id" class="cart-items">
<div class="border rounded">
<div class="row bg-white">
<div class="col-md-6">
<h4 class="text-info"><?php echo $values["item_name"]; ?></h4>
<h4 class="text-danger">Price: R <?php echo $values["item_price"]; ?></h4>
</br>
<a href="cart.php?action=deleteamp;id=<?php echo $values["item_id"]; ?>"><span class="btn btn-danger mx2">Remove</span></a>
</div>
<div class="col-md-3 py-5">
<div>
<h5>Quantity</h5>
</br>
<h4 name="quantity" class="text-info"><?php echo $values["item_quantity"]; ?></h4>
<h3>R <?php echo number_format($values["item_quantity"] * $values["item_price"], 2);?></h3>
</div>
</div>
</div>
</div>
</form>
<?php
$total = $total ($values["item_quantity"] * $values["item_price"]);
}
}
?>
Это то, что я пытался сделать, чтобы вставить элементы из корзины в базу данных. Что не работает и, вероятно, совершенно неправильно.
<?php
if (isset($_POST['submit'])){
if(!empty($_SESSION["shopping_cart"])){
$total = 0;
foreach($_SESSION["shopping_cart"] as $keys => $values)
{
$stmt = $con->prepare("INSERT INTO tbl_order (`item`, `price`, `quantity`, `totalprice`, `total`) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sss", $item, $price, $quantity, $totalprice, $total);
$item = $values["item_name"];
$price = $values["item_price"];
$quantity = $values["item_quantity"];
$totalprice = $values["item_quantity"] * $values["item_price"];
$total = $total ($values["item_quantity"] * $values["item_price"]);
$stmt->execute();
}
$stmt->close();
$con->close();
}
?>
<div class="col-md-4 offset-md-1 border rounded mt-5 bg-white h-25">
<div class="pt-4">
<h6>
PRICE DETAILS
</h6>
<hr>
<div class="row price-details">
<div class="col-md-6">
<h6>
Delivery Charges
</h6>
<hr>
<h6>
Amount Payable
</h6>
<hr>
<h6>
Grand Total
</h6>
<hr>
<input type="button" value="Continue Shopping" class="btn btn-warning" id="btnHome" onClick="document.location.href='book_a_venue.php'"/>
</div>
<div class="col-md-6">
<h6 class="text-success">
FREE
</h6>
<hr>
<h6>
R <?php echo number_format($total, 2);?>
</h6>
<hr>
<h6>
R <?php echo number_format($total, 2);?>
</h6>
<hr>
<button type="submit" name="submit" class="btn btn-danger mx-2">Check Out</button>
</div>
</div>
</div>
</div>
<?php
}
?>
Комментарии:
1. Это не совсем неправильно, вы на правильном пути, единственная проблема, которую я вижу, заключается в том, что вы не объединяете строки в своем
INSERT
запросе. Я оставлю этот вопрос кому-то более опытному в PHP, чтобы дать лучший ответ (это, вероятно, не единственная проблема). 1 за использованиеmysqli
вместоmysql
(многие новички, которых я вижу, склонны использоватьmysql
, что устарело и представляет угрозу безопасности при неправильном использовании).2. @AStopher Спасибо, на самом деле это был вотум доверия ко мне, и, будучи студентом, я долгое время сталкивался с проблемой и пытался всеми способами получить помощь в этом.
3. @Dharman Я знаю об инъекциях SQL и в настоящее время работаю над этим в переделке этого проекта
4. Можете ли вы показать нам обновленный код? Тот, который использует привязку параметров? У вас все еще возникают проблемы с подготовленным заявлением?
5. @Dharman прав, это может быть решено, если вы перейдете на параметризованные подготовленные операторы (их не сложно освоить), потому что это также решит проблему объединения строк. Если вы сделали это и у вас все еще возникают проблемы, отредактируйте свой вопрос, чтобы добавить обновленный код.
Ответ №1:
Я исправил свою проблему, довольно глупую проблему, у меня никогда не было <form method="post"></form>
кнопки оформления заказа, теперь все правильно вставляется в базу данных. Спасибо всем, кто помогал мне, это действительно поможет мне улучшить мой код.