ساخت سیستم مدیریت محصولات

ساخت سیستم مدیریت محصولات با PHP

ساخت سیستم مدیریت محصولات با PHP: یک رویکرد جامع

سیستم‌های مدیریت محصولات (Product Management Systems – PMS) ابزارهای حیاتی برای کسب‌وکارهایی هستند که با فروش محصولات سروکار دارند. این سیستم‌ها امکان سازماندهی، ردیابی، و مدیریت اطلاعات مربوط به محصولات را فراهم می‌کنند. در این مقاله، به بررسی گام‌به‌گام ساخت یک سیستم مدیریت محصولات با استفاده از PHP می‌پردازیم. این مقاله هم جنبه‌های علمی و هم جنبه‌های کاربردی را پوشش می‌دهد و برای توسعه‌دهندگان با دانش متوسط PHP مناسب است.

۱. طراحی پایگاه داده

قلب هر سیستم مدیریت محصول، پایگاه داده آن است. برای این سیستم، یک پایگاه داده رابطه‌ای با جداول زیر پیشنهاد می‌شود:

  • products: شامل اطلاعات اصلی محصولات (id, name, description, price, category_id, image_url, stock_quantity, created_at, updated_at)
  • categories: شامل دسته‌بندی‌های محصولات (id, name, description, created_at, updated_at)
  • users: شامل اطلاعات کاربران سیستم (id, username, password, email, role, created_at, updated_at)

در جدول products، category_id یک کلید خارجی است که به جدول categories اشاره می‌کند. image_url آدرس تصویر محصول را ذخیره می‌کند و stock_quantity مقدار موجودی محصول را نشان می‌دهد. created_at و updated_at برای ردیابی زمان ایجاد و به‌روزرسانی رکوردها استفاده می‌شوند.

۲. ساختار فایل‌ها و پوشه‌ها

برای سازماندهی بهتر کد، ساختار فایل‌ها و پوشه‌های زیر پیشنهاد می‌شود:

  • config: شامل فایل‌های پیکربندی پایگاه داده و سایر تنظیمات
  • controllers: شامل فایل‌های کنترلر که منطق برنامه را مدیریت می‌کنند
  • models: شامل کلاس‌های مدل که با پایگاه داده تعامل دارند
  • views: شامل فایل‌های قالب که رابط کاربری را نمایش می‌دهند
  • public: شامل فایل‌های استاتیک مانند تصاویر، CSS و JavaScript
  • index.php: نقطه ورود اصلی برنامه

۳. اتصال به پایگاه داده

برای اتصال به پایگاه داده، می‌توان از PDO (PHP Data Objects) استفاده کرد. یک فایل پیکربندی (مثلاً config/database.php) ایجاد کنید که شامل اطلاعات اتصال به پایگاه داده باشد:

 'localhost',
    'dbname' => 'product_management',
    'user' => 'root',
    'password' => '',
];
?>

سپس، در یک فایل جداگانه (مثلاً config/Database.php) کلاس اتصال به پایگاه داده را تعریف کنید:

host = $config['host'];
        $this->dbname = $config['dbname'];
        $this->user = $config['user'];
        $this->password = $config['password'];

        try {
            $this->pdo = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->user, $this->password);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            die("Connection failed: " . $e->getMessage());
        }
    }

    public function getPDO() {
        return $this->pdo;
    }
}
?>

۴. ساخت مدل‌ها

برای هر جدول در پایگاه داده، یک مدل ایجاد کنید. به عنوان مثال، برای جدول products، یک مدل Product.php ایجاد کنید:

pdo = $pdo;
    }

    public function getAllProducts() {
        $stmt = $this->pdo->query("SELECT * FROM products");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function getProductById($id) {
        $stmt = $this->pdo->prepare("SELECT * FROM products WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function createProduct($name, $description, $price, $category_id, $image_url, $stock_quantity) {
        $stmt = $this->pdo->prepare("INSERT INTO products (name, description, price, category_id, image_url, stock_quantity) VALUES (?, ?, ?, ?, ?, ?)");
        $stmt->execute([$name, $description, $price, $category_id, $image_url, $stock_quantity]);
        return $this->pdo->lastInsertId();
    }

    // سایر متدها برای به‌روزرسانی، حذف و جستجو
}
?>

مدل‌های مشابهی برای Category و User نیز ایجاد کنید.

۵. ساخت کنترلرها

کنترلرها درخواست‌های کاربر را دریافت کرده و با مدل‌ها تعامل می‌کنند. یک کنترلر ProductController.php ایجاد کنید:

productModel = new Product($pdo);
    }

    public function index() {
        $products = $this->productModel->getAllProducts();
        include 'views/products/index.php';
    }

    public function show($id) {
        $product = $this->productModel->getProductById($id);
        include 'views/products/show.php';
    }

    public function create() {
        include 'views/products/create.php';
    }

    public function store($name, $description, $price, $category_id, $image_url, $stock_quantity) {
        $id = $this->productModel->createProduct($name, $description, $price, $category_id, $image_url, $stock_quantity);
        header("Location: index.php?action=show&id=$id");
    }

    // سایر متدها برای به‌روزرسانی و حذف
}
?>

۶. ساخت نماها (Views)

نماها رابط کاربری را نمایش می‌دهند. برای مثال، فایل views/products/index.php می‌تواند به شکل زیر باشد:

<!DOCTYPE html>
<html>
<head>
    <title>لیست محصولات</title>
</head>
<body>
    <h1>لیست محصولات</h1>
    <table>
        <thead>
            <tr>
                <th>نام</th>
                <th>قیمت</th>
                <th>دسته بندی</th>
                <th>عملیات</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($products as $product) { ?>
                <tr>
                    <td><?php echo $product['name']; ?></td>
                    <td><?php echo $product['price']; ?></td>
                    <td><?php echo $product['category_id']; ?></td>
                    <td>
                        <a href="index.php?action=show&id=<?php echo $product['id']; ?>">مشاهده</a>
                        <a href="index.php?action=edit&id=<?php echo $product['id']; ?>">ویرایش</a>
                        <a href="index.php?action=delete&id=<?php echo $product['id']; ?>">حذف</a>
                    </td>
                </tr>
            <?php } ?>
        </tbody>
    </table>
</body>
</html>

فایل‌های مشابهی برای show.php، create.php و سایر نماها ایجاد کنید.

۷. نقطه ورود (index.php)

فایل index.php نقطه ورود اصلی برنامه است. این فایل درخواست‌های کاربر را دریافت کرده و کنترلر مناسب را فراخوانی می‌کند:

getPDO();

$action = $_GET['action'] ?? 'index';

if ($action == 'index') {
    $productController = new ProductController($pdo);
    $productController->index();
} elseif ($action == 'show') {
    $id = $_GET['id'] ?? null;
    $productController = new ProductController($pdo);
    $productController->show($id);
} elseif ($action == 'create') {
    $productController = new ProductController($pdo);
    $productController->create();
} elseif ($action == 'store') {
    $name = $_POST['name'] ?? null;
    $description = $_POST['description'] ?? null;
    $price = $_POST['price'] ?? null;
    $category_id = $_POST['category_id'] ?? null;
    $image_url = $_POST['image_url'] ?? null;
    $stock_quantity = $_POST['stock_quantity'] ?? null;

    $productController = new ProductController($pdo);
    $productController->store($name, $description, $price, $category_id, $image_url, $stock_quantity);
}

// سایر شرایط برای عملیات دیگر
?>

۸. ملاحظات امنیتی

امنیت یکی از مهم‌ترین جنبه‌های ساخت هر سیستم وب است. در این سیستم، باید به موارد زیر توجه کنید:

  • اعتبارسنجی ورودی‌ها: تمام ورودی‌های کاربر را اعتبارسنجی کنید تا از حملات تزریق SQL و XSS جلوگیری کنید.
  • رمزنگاری رمز عبور: رمز عبور کاربران را با استفاده از توابع رمزنگاری قوی (مانند password_hash) ذخیره کنید.
  • کنترل دسترسی: مطمئن شوید که کاربران فقط به اطلاعاتی دسترسی دارند که مجاز به دیدن آن هستند.

این مقاله یک نمای کلی از ساخت یک سیستم مدیریت محصولات با PHP ارائه می‌دهد. برای ساخت یک سیستم کامل و کاربردی، نیاز به توسعه بیشتر و توجه به جزئیات بیشتری دارید.