Я пишу программу с php / mysql, в которой вошедшие в систему пользователи используют систему баллов для заказа товаров через корзину для покупок (никаких денег, PayPal, платежей по кредитным картам, налогов на доставку и т. Д. - только баллы) .Мои знания php - от базового до низкого среднего.
У меня есть два сценария ниже:
Корзина / корзина с именем view_cart.php Это работаетштраф (и отключает проверку, если у них недостаточно очков).
Порядок подачи заявок в базу данных называется submit_order.php
У меня проблемы с привязкой сессии корзины покупок к странице / базе данных отправки заказа.Я получаю первое сообщение об ошибке, но оно создает новый заказ под таблицей заказов, но только с идентификатором вошедших в систему пользователей, а общее количество становится равным 0. С таблицей order_contents тоже ничего не происходит.
Я предполагаюэто как-то связано с переменными / массивом сессии 'cart', так что если кто-то может помочь или направить меня в правильном направлении, это было бы здорово.
Спасибо A
view_cart.php ниже:
<?php //view_cart.php
$page_title = 'ViewCart';
include ('./includes/header.html');
if (!isset($_SESSION['users_id'])) {
$url = 'http://' . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF']);
if ((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
$url = substr ($url, 0, -1);
}
$url .= '/login.php';
ob_end_clean();
header("Location: $url");
exit();
}
$rwp = $_SESSION['points'];
$problem = FALSE;
if (isset($_POST['submitted']))
{
foreach ($_POST['qty'] as $k => $v) {
$pid = (int) $k;
$qty = (int) $v;
if ( $qty == 0 ) {
unset ($_SESSION['cart'][$pid]);
} elseif ( $qty > 0 ) {
$_SESSION['cart'][$pid] ['quantity'] = $qty;
}
}
}
$empty = TRUE;
if (isset ($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $key =>$value) {
if (isset($value)) {
$empty = FALSE;
break;
}
}
}
if (!$empty) {
require_once ('mysql_connect.php');
$query = "SELECT users_id, points FROM user_points
WHERE user_points.users_id = users.users_id";
$result = mysql_query($query);
$query = "SELECT products_id, products_name FROM categories, products
WHERE categories.categories_id = products.categories_id AND products.products_id
IN (";foreach ($_SESSION['cart'] as $pid =>$value) {
$query .= $pid . ',';
}
$query = substr ($query, 0, -1) . ') ORDER BY categories.categories_name ASC';
$result = mysql_query($query);
echo '
<table border="0" width="100%" cellspacing="1" cellpadding="5"
align="center">
<tr class="top">
<td align="left" width="46%"><b>Product</b></td>
<td align="right" width="18%"><b>Price</b></td>
<td align="center" width="16%"><b>Qty</b></td>
<td align="right" width="20%"><b>Sub Total</b></td>
</tr>
<form action="view_cart.php" method="post">
';
$total = 0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$subtotal = $_SESSION['cart'][$row
['products_id']]['quantity'] *
$_SESSION['cart'][$row ['products_id']]['price'];
$total += $subtotal;
echo " <tr>
<td align=\"left\">{$row['products_name']}</td>
<td align=\"right\">{$_SESSION['cart'][$row['products_id']] ['price']} pts</td>
<td align=\"center\"><input type=\"text\" size=\"3\"
name=\"qty[{$row['products_id']}]\"
value=\"{$_SESSION['cart'][$row['products_id']]['quantity']}\" /></td>
<td align=\"right\">" . number_format ($subtotal) . " pts</td>
</tr>\n";
}
mysql_close($dbc);
$str = '<tr class="even">
<td colspan="3" align="right"><b> TOTAL:<b></td>
<td align="right"><b>' . number_format ($total) . ' pts </b></td>
</tr>
</table>
<br />
<div align="center"><input type="submit" name="submit" value="Update" />
<input type="hidden" name="submitted" value="TRUE" />
</form><br /><br /></div>';
if($up >= $total) {
$str .='<a href="submit_order.php">Submit Order</a></p>';
}
else {
$str .='<p>You do not have enough points to proceed to checkout</p>';
}
echo $str;
} else {
echo '<p>Your cart is currently empty.</p>';
}
?>
<?php
include ('./includes/footer.html');
?>
Вот сценарий submit_order.php .
<?php
$page_title = 'Order Confirmation';
include ('./includes/header.html');
if (!isset($_SESSION['users_id'])) {
$url = 'http://' . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF']);
if ((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
$url = substr ($url, 0, -1);
}
$url .= '/login.php';
ob_end_clean();
header("Location: $url");
exit();
}
$users = $_SESSION['users_id']; // Temporary.
$total = 0;
require_once ('mysql_connect.php'); // Connect to the database.
@mysqli_autocommit ($dbc, FALSE);
$query = "INSERT INTO orders (users_id, total) VALUES
($users, $total)";
$result = @mysql_query($query);
if (@mysql_affected_rows($dbc) == 1) {
$oid = @mysql_insert_id();
$query = "INSERT INTO order_contents (order_id, products_id, quantity, price)
VALUES ";
foreach ($_SESSION['cart'] as $pid => $value) {
$query .= "($oid, $pid, {$value['quantity']}, {$value['price']})";
}
$query = substr($query, 0, -2);
$result = @mysql_query($query);
if (@mysql_affected_rows($dbc) == count($_SESSION['cart'])) {
@mysqli_commit($dbc);
@mysql_close($dbc);
unset($_SESSION['cart']);
echo '<p>Thank you for your order.
It has been submitted for processing.</p>';
} else {
@mysqli_rollback($dbc);
@mysql_close($dbc);
echo '<p>Your order could not be processed due to a system error.
You will be contacted in order to have the problem fixed.
We apologize for the inconvenience 1.</p>';
}
}
else {
@mysqli_rollback($dbc);
@mysql_close($dbc);
echo '<p>Your order could not be processed due to a system error.
You will be contacted in order to have the problem fixed.
We apologize for the inconvenience 2.</p>';
}
?>
</div></div>
<?php
include ('./includes/footer.html');
?>