index

<?php
require_once('util/main.php');

require_once('model/database.php');
require_once('model/product_db.php');
require_once('model/category_db.php');
require_once('model/product.php');
require_once('model/category.php');

/*********************************************
 * Select some products
 **********************************************/

// Sample data
$cat_id = 1;

// Get the products
$products = ProductDB::getProductsByCategory($cat_id);

/***************************************
 * Delete a product
 ****************************************/

// Sample data for the product name
$product_name = 'Fender Telecaster';

// get by mane
$products = ProductDB::getProductsByName($product_name);

$product_id = $products[0]->getID();

// delete by id
$deleted_rows = ProductDB::deleteProduct($product_id);

// see if delete
if ($deleted_rows > 0) {
    $delete_message = "Product was deleted successfully.";
} else {
    $delete_message = "Failed to delete product '$product_name'.";
}


/***************************************
 * Insert a product
 ****************************************/
// Sample data
$category_id = 1;
$code = 'telesssss';
$name = 'Fender Telecaster';
$description = 'NA';
$price = '949.99';
$discount_percent = '10';

// make new product to add
$category = CategoryDB::getCategory($category_id);
$new_product = new Product($category, $code, $name, $description, $price, $discount_percent);

// add product
$db_inserted_id = ProductDB::addProduct($new_product);

// see if add
if ($db_inserted_id !== false) {
    $insert_message = "Product added successfully";
} else {
    $insert_message = "Failed to add product.";
}

// Get the refresehd list
$products = ProductDB::getProductsByCategory($cat_id);


include 'home.php';

product_db

<?php
class ProductDB {    
    public static function getProductsByCategory($category_id) {
        $db = Database::getDB();
        $category = CategoryDB::getCategory($category_id);
        $query = 'SELECT categoryID, productID, productCode, productName, 
                     description, listPrice, discountPercent 
                  FROM products
                  WHERE categoryID = :category_id
                  ORDER BY productID';
        try {
            $statement = $db->prepare($query);
            $statement->bindValue(':category_id', $category_id);
            $statement->execute();
            
            $rows = $statement->fetchAll();
            $statement->closeCursor();
            
            $products = [];
            foreach ($rows as $row) {
                $products[] = self::loadProduct($row, $category);
            }
            return $products;
        } catch (PDOException $e) {
            Database::displayError($e->getMessage());
        }
    }
    
    private static function loadProduct($row, $category) {
        $product = new Product($category,
                               $row['productCode'],
                               $row['productName'],
                               $row['description'],
                               $row['listPrice'],
                               $row['discountPercent']);
        $product->setID($row['productID']);
        return $product;
    }

    public static function getProduct($product_id) {
        $db = Database::getDB();
        $query = 'SELECT categoryID, productID, productCode, productName, 
                     description, listPrice, discountPercent 
                  FROM products
                  WHERE productID = :product_id';
        try {
            $statement = $db->prepare($query);
            $statement->bindValue(':product_id', $product_id);
            $statement->execute();
            
            $row = $statement->fetch();
            $statement->closeCursor();
            
            $category = CategoryDB::getCategory($row['categoryID']);
            return self::loadProduct($row, $category);
        } catch (PDOException $e) {
            Database::displayError($e->getMessage());
        }
    }

    public static function addProduct($product) {
        $db = Database::getDB();
        $query = 'INSERT INTO products
                    (categoryID, productCode, productName, description,
                     listPrice, discountPercent, dateAdded)
                 VALUES
                    (:category_id, :code, :name, :description, :price,
                     :discount_percent, NOW())';
       try {
           $statement = $db->prepare($query);
           $statement->bindValue(':category_id', 
                   $product->getCategory()->getID());
           $statement->bindValue(':code', $product->getCode());
           $statement->bindValue(':name', $product->getName());
           $statement->bindValue(':description', $product->getDescription());
           $statement->bindValue(':price', $product->getPrice());
           $statement->bindValue(':discount_percent', 
                   $product->getDiscountPercent());
           $statement->execute();
           $statement->closeCursor();

           // Get the last product ID that was automatically generated
           return $db->lastInsertId();
       } catch (PDOException $e) {
           Database::displayError($e->getMessage());
       }
    }
    
    public static function updateProduct($product) {
        $db = Database::getDB();
        $query = 'UPDATE Products
                  SET productName = :name, productCode = :code,
                      description = :description, listPrice = :price,
                      discountPercent = :discount_percent,
                      categoryID = :category_id
                  WHERE productID = :product_id';
        try {
            $statement = $db->prepare($query);
            $statement->bindValue(':category_id', 
                   $product->getCategory()->getID());
            $statement->bindValue(':code', $product->getCode());
            $statement->bindValue(':name', $product->getName());
            $statement->bindValue(':description', $product->getDescription());
            $statement->bindValue(':price', $product->getPrice());
            $statement->bindValue(':discount_percent', 
                   $product->getDiscountPercent());
            $statement->bindValue(':product_id', $product->getID());
            $statement->execute();
            
            $row_count = $statement->rowCount();
            $statement->closeCursor();
            return $row_count;
        } catch (PDOException $e) {
            Database::displayError($e->getMessage());
        }
    }
    
    public static function deleteProduct($product_id) {
        $db = Database::getDB();
        $query = 'DELETE FROM products
                  WHERE productID = :product_id';
        try {
            $statement = $db->prepare($query);
            $statement->bindValue(':product_id', $product_id);
            $statement->execute();
            
            $row_count = $statement->rowCount();
            $statement->closeCursor();
            return $row_count;
        } catch (PDOException $e) {
            Database::displayError($e->getMessage());
        }
    }
    public static function getProductsByName($productName) {
        $db = Database::getDB();
        
        $query = 'SELECT categoryID, productID, productCode, productName, 
                     description, listPrice, discountPercent 
                  FROM products
                  WHERE productName LIKE :productName
                  ORDER BY productName';
                  
        try {
            $statement = $db->prepare($query);
            $statement->bindValue(':productName', '%' . $productName . '%');
            $statement->execute();
            
            $rows = $statement->fetchAll();
            $statement->closeCursor();
            
            $products = [];
            foreach ($rows as $row) {
                $category = CategoryDB::getCategory($row['categoryID']);
                $products[] = self::loadProduct($row, $category);
            }
            return $products;
        } catch (PDOException $e) {
            Database::displayError($e->getMessage());
        }
    }


}