37048-vm/checkout.php
2025-12-04 21:21:10 +00:00

185 lines
11 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
// Redirect if cart is empty
if (empty($_SESSION['cart'])) {
header('Location: shop.php');
exit;
}
$cart_items = $_SESSION['cart'];
$total_price = array_reduce($cart_items, function ($sum, $item) {
return $sum + ($item['price'] * $item['quantity']);
}, 0);
// User and address data
$logged_in_user = null;
$user_addresses = [];
$is_logged_in = isset($_SESSION['user_id']);
if ($is_logged_in) {
try {
$pdo = db();
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$logged_in_user = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt = $pdo->prepare("SELECT * FROM user_addresses WHERE user_id = ? ORDER BY is_default DESC, id DESC");
$stmt->execute([$_SESSION['user_id']]);
$user_addresses = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
// In a real app, log this error
die("Error fetching user data.");
}
}
$page_title = 'تکمیل سفارش';
require_once 'includes/header.php';
?>
<div class="container my-5 bg-dark text-light">
<?php
if (isset($_SESSION['error_message'])) {
echo '<div class="alert alert-danger alert-dismissible fade show" role="alert">' . htmlspecialchars($_SESSION['error_message']) . '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>';
unset($_SESSION['error_message']);
}
?>
<div class="text-center mb-5">
<h1 class="fw-bold">تکمیل فرآیند خرید</h1>
<p class="text-muted">فقط یک قدم دیگر تا نهایی شدن سفارش شما باقیست.</p>
</div>
<form action="checkout_handler.php" method="POST">
<div class="row g-5">
<!-- Shipping Details -->
<div class="col-lg-7">
<h3 class="mb-4">اطلاعات ارسال</h3>
<?php if ($is_logged_in && !empty($user_addresses)): ?>
<div class="mb-4">
<label for="saved_address" class="form-label">انتخاب آدرس</label>
<select class="form-select bg-dark text-light" id="saved_address">
<option value="">یک آدرس انتخاب کنید یا فرم زیر را پر کنید...</option>
<?php foreach ($user_addresses as $addr): ?>
<option value='<?php echo json_encode($addr, JSON_HEX_APOS | JSON_HEX_QUOT); ?>'>
<?php echo htmlspecialchars($addr['province'] . '، ' . $addr['city'] . '، ' . $addr['address_line']); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<?php endif; ?>
<div class="card bg-dark border-secondary shadow-sm rounded-4">
<div class="card-body p-4">
<div class="row g-3">
<div class="col-md-6">
<label for="first_name" class="form-label">نام</label>
<input type="text" class="form-control bg-dark text-light" id="first_name" name="first_name" value="<?php echo htmlspecialchars($logged_in_user['first_name'] ?? ''); ?>" required>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-6">
<label for="last_name" class="form-label">نام خانوادگی</label>
<input type="text" class="form-control bg-dark text-light" id="last_name" name="last_name" value="<?php echo htmlspecialchars($logged_in_user['last_name'] ?? ''); ?>" required>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-6">
<label for="phone_number" class="form-label">تلفن همراه</label>
<input type="tel" class="form-control bg-dark text-light" id="phone_number" name="phone_number" value="<?php echo htmlspecialchars($logged_in_user['phone_number'] ?? ''); ?>" required>
<div class="invalid-feedback"></div>
<?php if (!$is_logged_in): ?>
<div class="form-text text-info fw-bold">توجه: فقط با شماره تلفن همراه میتوان سفارش را رهگیری کرد.</div>
<?php endif; ?>
</div>
<div class="col-md-6">
<label for="province" class="form-label">استان</label>
<input type="text" class="form-control bg-dark text-light" id="province" name="province" required>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-6">
<label for="city" class="form-label">شهر</label>
<input type="text" class="form-control bg-dark text-light" id="city" name="city" required>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-6">
<label for="address_line" class="form-label">آدرس دقیق</label>
<textarea class="form-control bg-dark text-light" id="address_line" name="address_line" rows="2" required></textarea>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-5">
<label for="postal_code" class="form-label">کد پستی</label>
<input type="text" class="form-control bg-dark text-light" id="postal_code" name="postal_code" required>
<div class="invalid-feedback"></div>
</div>
<div class="col-md-7">
<label for="email" class="form-label">ایمیل (اختیاری)</label>
<input type="email" class="form-control bg-dark text-light" id="email" name="email" value="<?php echo htmlspecialchars($logged_in_user['email'] ?? ''); ?>">
<div class="invalid-feedback"></div>
</div>
</div>
<div class="form-check mt-4">
<input type="checkbox" class="form-check-input" id="terms" name="terms" required>
<label class="form-check-label" for="terms">
با <a href="#">قوانین و مقررات</a> سایت موافقم.
</label>
<div class="invalid-feedback">لطفاً قوانین و مقررات را بپذیرید.</div>
</div>
</div>
</div>
</div>
<!-- Order Summary -->
<div class="col-lg-5">
<div class="card bg-dark border-secondary shadow-sm rounded-4 sticky-top" style="top: 100px;">
<div class="card-body p-4">
<h4 class="card-title fw-bold mb-4">خلاصه سفارش</h4>
<ul class="list-group list-group-flush mb-4">
<?php foreach($cart_items as $item): ?>
<li class="list-group-item bg-dark text-light d-flex justify-content-between align-items-center px-0">
<div class="d-flex align-items-center">
<img src="<?php echo htmlspecialchars($item['image_url']); ?>" width="60" class="rounded-3 me-3" alt="<?php echo htmlspecialchars($item['name']); ?>">
<div>
<?php echo htmlspecialchars($item['name']); ?>
<small class="d-block text-muted">تعداد: <?php echo $item['quantity']; ?></small>
<?php if (!empty($item['color'])): ?>
<div class="d-flex align-items-center gx-2 mt-1">
<small class="text-muted">رنگ:</small>
<span class="d-inline-block rounded-circle border ms-2" style="width: 15px; height: 15px; background-color: <?php echo htmlspecialchars($item['color']); ?>;"></span>
</div>
<?php endif; ?>
</div>
</div>
<span class="fw-bold"><?php echo number_format($item['price'] * $item['quantity']); ?></span>
</li>
<?php endforeach; ?>
</ul>
<div class="d-flex justify-content-between mb-2">
<span class="text-muted">جمع کل</span>
<span><?php echo number_format($total_price); ?> تومان</span>
</div>
<div class="d-flex justify-content-between mb-3">
<span class="text-muted">هزینه ارسال</span>
<span class="text-success">رایگان</span>
</div>
<hr class="border-secondary">
<div class="d-flex justify-content-between align-items-center mb-4">
<span class="h5 fw-bold">مبلغ نهایی</span>
<span class="h5 fw-bolder text-primary"><?php echo number_format($total_price); ?> تومان</span>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary btn-lg">ثبت نهایی سفارش</button>
</div>
<div class="text-center mt-3">
<small class="text-muted"><i class="ri-lock-line me-1"></i> پرداخت امن و مطمئن</small>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<script src="assets/js/checkout_validation.js?v=<?php echo time(); ?>"></script>
<?php require_once 'includes/footer.php'; ?>