الجزء 7: إدارة المنتجات والعملاء
المنتجات (عرض القائمة، إنشاء، تعديل، حذف)
عرض المنتجات (products/index.php)
لإظهار قائمة المنتجات وربطها بالفئات، استخدم الكود التالي في products/index.php
:
<?php
include '../includes/header.php';
include '../includes/db_connect.php';
// جلب جميع المنتجات مع أسماء الفئات
$stmt = $pdo->query('
SELECT products.*, categories.name AS category_name
FROM products
JOIN categories ON products.category_id = categories.id
');
$products = $stmt->fetchAll();
?>
<div class="flex justify-between mb-4">
<h2 class="text-2xl font-semibold">Products</h2>
<a href="create.php" class="bg-green-500 text-white px-4 py-2 rounded">Add Product</a>
</div>
<table class="min-w-full bg-white">
<thead>
<tr>
<th class="py-2">ID</th>
<th class="py-2">Name</th>
<th class="py-2">Category</th>
<th class="py-2">Price</th>
<th class="py-2">Stock</th>
<th class="py-2">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($products as $product): ?>
<tr class="text-center border-t">
<td class="py-2"><?php echo htmlspecialchars($product['id']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($product['name']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($product['category_name']); ?></td>
<td class="py-2">$<?php echo htmlspecialchars($product['price']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($product['stock']); ?></td>
<td class="py-2">
<a href="edit.php?id=<?php echo $product['id']; ?>" class="bg-blue-500 text-white px-2 py-1 rounded">Edit</a>
<a href="delete.php?id=<?php echo $product['id']; ?>" class="bg-red-500 text-white px-2 py-1 rounded" onclick="return confirm('Are you sure you want to delete this product?');">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php include '../includes/footer.php'; ?>
إنشاء منتج جديد (products/create.php)
لإضافة منتج جديد إلى قاعدة البيانات، استخدم الكود التالي في products/create.php
:
<?php
include '../includes/header.php';
include '../includes/db_connect.php';
// جلب الفئات للاختيار من القائمة المنسدلة
$stmt = $pdo->query('SELECT * FROM categories');
$categories = $stmt->fetchAll();
$name = '';
$category_id = '';
$price = '';
$stock = '';
$error = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = trim($_POST['name']);
$category_id = $_POST['category_id'];
$price = $_POST['price'];
$stock = $_POST['stock'];
if (empty($name) || empty($category_id) || empty($price) || empty($stock)) {
$error = 'All fields are required.';
} elseif (!is_numeric($price) || !is_numeric($stock)) {
$error = 'Price and Stock must be numeric.';
} else {
// إدخال البيانات في قاعدة البيانات
$stmt = $pdo->prepare('INSERT INTO products (category_id, name, price, stock) VALUES (:category_id, :name, :price, :stock)');
$stmt->execute([
'category_id' => $category_id,
'name' => $name,
'price' => $price,
'stock' => $stock
]);
header('Location: index.php');
exit();
}
}
?>
<div class="max-w-md mx-auto bg-white p-6 rounded shadow">
<h2 class="text-2xl font-semibold mb-4">Add New Product</h2>
<?php if ($error): ?>
<div class="bg-red-100 text-red-700 p-2 mb-4 rounded">
<?php echo htmlspecialchars($error); ?>
</div>
<?php endif; ?>
<form method="POST" action="">
<div class="mb-4">
<label class="block text-gray-700">Name</label>
<input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="mb-4">
<label class="block text-gray-700">Category</label>
<select name="category_id" class="w-full px-3 py-2 border rounded" required>
<option value="">Select Category</option>
<?php foreach ($categories as $category): ?>
<option value="<?php echo $category['id']; ?>" <?php if ($category['id'] == $category_id) echo 'selected'; ?>>
<?php echo htmlspecialchars($category['name']); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-4">
<label class="block text-gray-700">Price</label>
<input type="number" step="0.01" name="price" value="<?php echo htmlspecialchars($price); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="mb-4">
<label class="block text-gray-700">Stock</label>
<input type="number" name="stock" value="<?php echo htmlspecialchars($stock); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="flex justify-end">
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded">Add Product</button>
</div>
</form>
</div>
<?php include '../includes/footer.php'; ?>
تعديل المنتج (products/edit.php)
لتعديل منتج، استخدم الكود التالي في products/edit.php
:
<?php
include '../includes/header.php';
include '../includes/db_connect.php';
if (!isset($_GET['id'])) {
header('Location: index.php');
exit();
}
$id = $_GET['id'];
$error = '';
// جلب المنتج الحالي
$stmt = $pdo->prepare('SELECT * FROM products WHERE id = :id');
$stmt->execute(['id' => $id]);
$product = $stmt->fetch();
if (!$product) {
echo "Product not found.";
exit();
}
// جلب الفئات للاختيار من القائمة المنسدلة
$stmt = $pdo->query('SELECT * FROM categories');
$categories = $stmt->fetchAll();
$name = $product['name'];
$category_id = $product['category_id'];
$price = $product['price'];
$stock = $product['stock'];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = trim($_POST['name']);
$category_id = $_POST['category_id'];
$price = $_POST['price'];
$stock = $_POST['stock'];
if (empty($name) || empty($category_id) || empty($price) || empty($stock)) {
$error = 'All fields are required.';
} elseif (!is_numeric($price) || !is_numeric($stock)) {
$error = 'Price and Stock must be numeric.';
} else {
// تحديث البيانات في قاعدة البيانات
$stmt = $pdo->prepare('UPDATE products SET category_id = :category_id, name = :name, price = :price, stock = :stock WHERE id = :id');
$stmt->execute([
'category_id' => $category_id,
'name' => $name,
'price' => $price,
'stock' => $stock,
'id' => $id
]);
header('Location: index.php');
exit();
}
}
?>
<div class="max-w-md mx-auto bg-white p-6 rounded shadow">
<h2 class="text-2xl font-semibold mb-4">Edit Product</h2>
<?php if ($error): ?>
<div class="bg-red-100 text-red-700 p-2 mb-4 rounded">
<?php echo htmlspecialchars($error); ?>
</div>
<?php endif; ?>
<form method="POST" action="">
<div class="mb-4">
<label class="block text-gray-700">Name</label>
<input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="mb-4">
<label class="block text-gray-700">Category</label>
<select name="category_id" class="w-full px-3 py-2 border rounded" required>
<option value="">Select Category</option>
<?php foreach ($categories as $category): ?>
<option value="<?php echo $category['id']; ?>" <?php if ($category['id'] == $category_id) echo 'selected'; ?>>
<?php echo htmlspecialchars($category['name']); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-4">
<label class="block text-gray-700">Price</label>
<input type="number" step="0.01" name="price" value="<?php echo htmlspecialchars($price); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="mb-4">
<label class="block text-gray-700">Stock</label>
<input type="number" name="stock" value="<?php echo htmlspecialchars($stock); ?>" class="w-full px-3 py-2 border rounded" required>
</div>
<div class="flex justify-end">
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded">Update Product</button>
</div>
</form>
</div>
<?php include '../includes/footer.php'; ?>
حذف المنتج (products/delete.php)
لحذف منتج من قاعدة البيانات، استخدم الكود التالي في products/delete.php
:
<?php
include '../includes/db_connect.php';
if (isset($_GET['id'])) {
$id = $_GET['id'];
// حذف المنتج
$stmt = $pdo->prepare('DELETE FROM products WHERE id = :id');
$stmt->execute(['id' => $id]);
}
header('Location: index.php');
exit();
?>
إدارة العملاء (عرض القائمة، إنشاء، تعديل، حذف)
عملية إدارة العملاء مشابهة جدًا لعملية إدارة المنتجات. تتضمن الحقول المتعلقة بالأسماء، البريد الإلكتروني، الهاتف، والعنوان. إليك كيفية عرض العملاء باستخدام الكود التالي في customers/index.php
:
<?php
include '../includes/header.php';
include '../includes/db_connect.php';
// جلب جميع العملاء
$stmt = $pdo->query('SELECT * FROM customers');
$customers = $stmt->fetchAll();
?>
<div class="flex justify-between mb-4">
<h2 class="text-2xl font-semibold">Customers</h2>
<a href="create.php" class="bg-green-500 text-white px-4 py-2 rounded">Add Customer</a>
</div>
<table class="min-w-full bg-white">
<thead>
<tr>
<th class="py-2">ID</th>
<th class="py-2">Name</th>
<th class="py-2">Email</th>
<th class="py-2">Phone</th>
<th class="py-2">Address</th>
<th class="py-2">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($customers as $customer): ?>
<tr class="text-center border-t">
<td class="py-2"><?php echo htmlspecialchars($customer['id']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($customer['name']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($customer['email']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($customer['phone']); ?></td>
<td class="py-2"><?php echo htmlspecialchars($customer['address']); ?></td>
<td class="py-2">
<a href="edit.php?id=<?php echo $customer['id']; ?>" class="bg-blue-500 text-white px-2 py-1 rounded">Edit</a>
<a href="delete.php?id=<?php echo $customer['id']; ?>" class="bg-red-500 text-white px-2 py-1 rounded" onclick="return confirm('Are you sure you want to delete this customer?');">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php include '../includes/footer.php'; ?>
وبنفس الطريقة يمكنك تطبيق عمليات CRUD الأخرى (إنشاء، تعديل، حذف) للعملاء كما تم شرحها سابقًا.
الخطوات القادمة
بعد إتمام عمليات CRUD للمنتجات والعملاء، يمكنك الآن إدارة المنتجات والمخزون، بالإضافة إلى معلومات العملاء بنجاح داخل نظام نقاط البيع الخاص بك.
اترك تعليقاً