Cześć, obecnie uczę się PHP / OOP.
Stworzyłem skrypt który zarządza tabelą (dodaje, usuwa, modyfikuje) z produktami w bazie danych MySQL.
Mój skrypt działa bez zarzutu jednak chciałbym się dowiedzieć od kogoś kto "zjadł zęby" na PHP jak mój kod prezentuję się od strony profesionalnego programowania gdzie są błędy co muszę poprawić mimo tego że kod działa.
skrypt jest dość prosty więc każdy powinien go zrozumieć.
z góry dzięki za każdą odpowiedź.
<?php
class Product{
private $pdo = null;
private $config;
private $table;
/*
|--------------------------------------------------------------------------
| __construct($createTable = NULL)
|--------------------------------------------------------------------------
|
| $createTable - nazwa tabeli, jeżeli NULL tabela default products
|
*/
public function __construct($createTable = NULL){
$this->config = parse_ini_file('config.ini', true); // Data base config.
try{
$this->pdo = new PDO('mysql:host=' . $this->config['db_MySQL']['db_server'] . ';dbname=' . $this->config['db_MySQL']['db'] .
';charset=' . $this->config['db_MySQL']['charset'], $this->config['db_MySQL']['db_user'], $this->config['db_MySQL']['db_password']);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<samp>> Połączono z bazą danych</samp><br>";
}
catch(PDOException $e){
echo "Error: " . $e->getMessage();
exit();
}
if($createTable != NULL){
$this->table = $createTable;
$this->createTable($this->table);
}else{
$this->table = 'products'; // Tabela o nazwie default products MUSI JUŻ ISTNIEĆ W BAZIE DANYCH.
}
}
public function __destruct(){ $this->pdo = NULL;} // Destruktor zamyka połączenie z bazą danych MySQL.
/*
|--------------------------------------------------------------------------
| createTable($name)
|--------------------------------------------------------------------------
|
| $name - nazwa tabeli
|
*/
private function createTable($name){
try{
$sql = "CREATE TABLE IF NOT EXISTS $name (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Category VARCHAR(255) NOT NULL,
Price DOUBLE NOT NULL,
PRIMARY KEY (Id)
)ENGINE=InnoDB;";
$this->pdo->exec($sql);
echo "<samp>> Utworzono tabele: <b>$name</b></samp><br>";
}
catch(PDOException $e){
echo 'Error: ' . $e->getMessage();
}
}
/*
|--------------------------------------------------------------------------
| addProduct($name, $category, $price)
|--------------------------------------------------------------------------
|
| $name - nazwa produktu
| $category - kategoria produktu
| $price - cena produktu
|
*/
public function addProduct($name, $category, $price){
$name = filter_var($name, FILTER_SANITIZE_STRING);
$category = filter_var($category, FILTER_SANITIZE_STRING);
if(filter_var($price, FILTER_VALIDATE_FLOAT) === false){$price = 0;} // Złe dane, cena = 0
try{
$stmt = $this->pdo->prepare("INSERT INTO $this->table (Name, Category, Price) VALUES (:name, :category, :price)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':category', $category);
$stmt->bindParam(':price', $price);
$stmt->execute();
echo "<samp>> Dodano produkt <b>($name, $category, $price)</b> </samp><br>";
}
catch(PDOException $e){
echo 'Error: ' . $e->getMessage();
}
}
/*
|--------------------------------------------------------------------------
| deleteProduct($id)
|--------------------------------------------------------------------------
|
| $id - numer id produktu
|
*/
public function deleteProduct($id){
try{
if(!filter_var($id, FILTER_VALIDATE_INT) === false) {
$stmt = $this->pdo->prepare("DELETE FROM $this->table WHERE Id = ? LIMIT 1");
$stmt->execute([$id]);
$deleted = $stmt->rowCount(); // ile rekordów usunięto.
echo "<samp>> Usunięto: <b>$deleted</b></samp><br>";
}
}
catch(PDOException $e){
echo 'Error: ' . $e->getMessage();
}
}
/*
|--------------------------------------------------------------------------
| updateProduct($id, $newName, $newCategory, $newPrice)
|--------------------------------------------------------------------------
|
| $id - numer id produktu
| $newName - nowa nazwa produktu
| $newCategory - nowa kategoria produktu
| $newPrice - nowa cena produktu
|
*/
public function updateProduct($id, $newName, $newCategory, $newPrice){
$newName = filter_var($newName, FILTER_SANITIZE_STRING);
$newCategory = filter_var($newCategory, FILTER_SANITIZE_STRING);
if(filter_var($newPrice, FILTER_VALIDATE_FLOAT) === false){$newPrice = 0;} // Złe dane, cena = 0
try{
if(!filter_var($id, FILTER_VALIDATE_INT) === false) {
$sql = "UPDATE $this->table SET Name = ?, Category = ?, Price = ? WHERE Id = ?";
$this->pdo->prepare($sql)->execute([$newName, $newCategory, $newPrice, $id]);
echo "<samp>> Zmieniono</samp><br>";
}
}
catch(PDOException $e){
echo 'Error: ' . $e->getMessage();
}
}
/*
|--------------------------------------------------------------------------
| view($id = NULL)
|--------------------------------------------------------------------------
|
| $id - Numer produktu do wyświetlenia jeżeli puste wyświetl wszystkie
|
*/
public function view($id = NULL){
try{
if(!filter_var($id, FILTER_VALIDATE_INT) === false && $id != NULL){
$stmt = $this->pdo->query("SELECT * FROM $this->table WHERE Id = $id");
echo "<table>";
echo "<tr><th>Nazwa</th><th>Kategoria</th><th>Cena</th></tr>";
while($row = $stmt->fetch()){
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",
htmlspecialchars($row['Name']),
htmlspecialchars($row['Category']),
htmlspecialchars($row['Price']));
}
echo "</table>";
}else{
$stmt = $this->pdo->query("SELECT * FROM $this->table");
echo "<table>";
echo "<tr><th>Nazwa</th><th>Kategoria</th><th>Cena</th></tr>";
while($row = $stmt->fetch()){
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",
htmlspecialchars($row['Name']),
htmlspecialchars($row['Category']),
htmlspecialchars($row['Price']));
}
echo "</table>";
}
}
catch(PDOException $e){
echo 'Error: ' . $e->getMessage();
}
}
}
?>