SAMPLE MVC
<?php
// MODEL/database.php
$dsn = 'mysql:host=localhost;dbname=my_guitar_shop1';
$username = 'mgs_user';
$password = 'pa55word';
try {
$db = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
$error_message = $e->getMessage();
include('../errors/database_error.php');
exit();
}
// MODEL/category_db.php
function get_categories() {
global $db;
$query = 'SELECT * FROM categories
ORDER BY categoryID';
$statement = $db->prepare($query);
$statement->execute();
return $statement;
}
function get_category_name($category_id) {
global $db;
$query = 'SELECT * FROM categories
WHERE categoryID = :category_id';
$statement = $db->prepare($query);
$statement->bindValue(':category_id', $category_id);
$statement->execute();
$category = $statement->fetch();
$statement->closeCursor();
$category_name = $category['categoryName'];
return $category_name;
}
// #############################################################################
// MODEL/product_db.php
function get_products_by_category($category_id) {
global $db;
$query = 'SELECT * FROM products
WHERE products.categoryID = :category_id
ORDER BY productID';
$statement = $db->prepare($query);
$statement->bindValue(":category_id", $category_id);
$statement->execute();
$products = $statement->fetchAll();
$statement->closeCursor();
return $products;
}
function get_product($product_id) {
global $db;
$query = 'SELECT * FROM products
WHERE productID = :product_id';
$statement = $db->prepare($query);
$statement->bindValue(":product_id", $product_id);
$statement->execute();
$product = $statement->fetch();
$statement->closeCursor();
return $product;
}
function delete_product($product_id) {
global $db;
$query = 'DELETE FROM products
WHERE productID = :product_id';
$statement = $db->prepare($query);
$statement->bindValue(':product_id', $product_id);
$statement->execute();
$statement->closeCursor();
}
function add_product($category_id, $code, $name, $price) {
global $db;
$query = 'INSERT INTO products
(categoryID, productCode, productName, listPrice)
VALUES
(:category_id, :code, :name, :price)';
$statement = $db->prepare($query);
$statement->bindValue(':category_id', $category_id);
$statement->bindValue(':code', $code);
$statement->bindValue(':name', $name);
$statement->bindValue(':price', $price);
$statement->execute();
$statement->closeCursor();
}
// #############################################################################
// VIEW/product_add.php
<?php include '../view/header.php'; ?>
<main>
<h1>Add Product</h1>
<form action="index.php" method="post" id="add_product_form">
<input type="hidden" name="action" value="add_product">
<label>Category:</label>
<select name="category_id">
<?php foreach ( $categories as $category ) : ?>
<option value="<?php echo $category['categoryID']; ?>">
<?php echo $category['categoryName']; ?>
</option>
<?php endforeach; ?>
</select>
<br>
<label>Code:</label>
<input type="text" name="code" />
<br>
<label>Name:</label>
<input type="text" name="name" />
<br>
<label>List Price:</label>
<input type="text" name="price" />
<br>
<label> </label>
<input type="submit" value="Add Product" />
<br>
</form>
<p class="last_paragraph">
<a href="index.php?action=list_products">View Product List</a>
</p>
</main>
<?php include '../view/footer.php'; ?>
<?php
// VIEW/product_list.php
<?php include '../view/header.php'; ?>
<main>
<h1>Product List</h1>
<aside>
<!-- display a list of categories -->
<h2>Categories</h2>
<nav>
<ul>
<?php foreach ($categories as $category) : ?>
<li>
<a href="?category_id=<?php echo $category['categoryID']; ?>">
<?php echo $category['categoryName']; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</nav>
</aside>
<section>
<!-- display a table of products -->
<h2><?php echo $category_name; ?></h2>
<table>
<tr>
<th>Code</th>
<th>Name</th>
<th class="right">Price</th>
<th> </th>
</tr>
<?php foreach ($products as $product) : ?>
<tr>
<td><?php echo $product['productCode']; ?></td>
<td><?php echo $product['productName']; ?></td>
<td class="right"><?php echo $product['listPrice']; ?></td>
<td><form action="." method="post">
<input type="hidden" name="action"
value="delete_product">
<input type="hidden" name="product_id"
value="<?php echo $product['productID']; ?>">
<input type="hidden" name="category_id"
value="<?php echo $product['categoryID']; ?>">
<input type="submit" value="Delete">
</form></td>
</tr>
<?php endforeach; ?>
</table>
<p class="last_paragraph">
<a href="?action=show_add_form">Add Product</a>
</p>
</section>
</main>
<?php include '../view/footer.php'; ?>
<?php
// #############################################################################
// CONTROLLER/index.php
require('../model/database.php');
require('../model/product_db.php');
require('../model/category_db.php');
$action = filter_input(INPUT_POST, 'action');
if ($action == NULL) {
$action = filter_input(INPUT_GET, 'action');
if ($action == NULL) {
$action = 'list_products';
}
}
if ($action == 'list_products') {
$category_id = filter_input(INPUT_GET, 'category_id',
FILTER_VALIDATE_INT);
if ($category_id == NULL || $category_id == FALSE) {
$category_id = 1;
}
$category_name = get_category_name($category_id);
$categories = get_categories();
$products = get_products_by_category($category_id);
include('product_list.php');
} else if ($action == 'delete_product') {
$product_id = filter_input(INPUT_POST, 'product_id',
FILTER_VALIDATE_INT);
$category_id = filter_input(INPUT_POST, 'category_id',
FILTER_VALIDATE_INT);
if ($category_id == NULL || $category_id == FALSE ||
$product_id == NULL || $product_id == FALSE) {
$error = "Missing or incorrect product id or category id.";
include('../errors/error.php');
} else {
delete_product($product_id);
header("Location: .?category_id=$category_id");
}
} else if ($action == 'show_add_form') {
$categories = get_categories();
include('product_add.php');
} else if ($action == 'add_product') {
$category_id = filter_input(INPUT_POST, 'category_id',
FILTER_VALIDATE_INT);
$code = filter_input(INPUT_POST, 'code');
$name = filter_input(INPUT_POST, 'name');
$price = filter_input(INPUT_POST, 'price', FILTER_VALIDATE_FLOAT);
if ($category_id == NULL || $category_id == FALSE || $code == NULL ||
$name == NULL || $price == NULL || $price == FALSE) {
$error = "Invalid product data. Check all fields and try again.";
include('../errors/error.php');
} else {
add_product($category_id, $code, $name, $price);
header("Location: .?category_id=$category_id");
}
}