PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); } catch (PDOException $e) { die("Veritabanına bağlanılamadı: " . $e->getMessage()); } /* ========== TABLOLARIN OLUŞTURULMASI (İLK SEFERDE YAP) ========== */ $pdo->exec(" CREATE TABLE IF NOT EXISTS products ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10,2) NOT NULL, stock_quantity INT DEFAULT 0, low_stock_threshold INT DEFAULT 5 ); CREATE TABLE IF NOT EXISTS sales ( id INT AUTO_INCREMENT PRIMARY KEY, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS sale_items ( id INT AUTO_INCREMENT PRIMARY KEY, sale_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, total_price DECIMAL(10,2) NOT NULL, profit_amount DECIMAL(10,2) NOT NULL, FOREIGN KEY (sale_id) REFERENCES sales(id) ON DELETE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ); "); /* ========== İŞLEMLER (GET/POST) ========== */ // Ürün ekleme if(isset($_POST['add_product'])){ $stmt = $pdo->prepare("INSERT INTO products (name, price, stock_quantity, low_stock_threshold) VALUES (?,?,?,?)"); $stmt->execute([$_POST['name'], $_POST['price'], $_POST['stock_quantity'], $_POST['low_stock_threshold']]); $_SESSION['success'] = "Ürün eklendi."; } // Ürün silme if(isset($_GET['delete_product'])){ $stmt = $pdo->prepare("DELETE FROM products WHERE id=?"); $stmt->execute([$_GET['delete_product']]); $_SESSION['success'] = "Ürün silindi."; } // Satış ekleme if(isset($_POST['add_sale'])){ $product_ids = $_POST['product_id']; $quantities = $_POST['quantity']; try { $pdo->beginTransaction(); $pdo->exec("INSERT INTO sales (created_at) VALUES (NOW())"); $sale_id = $pdo->lastInsertId(); foreach($product_ids as $i => $pid){ $qty = intval($quantities[$i]); if($qty <= 0) continue; $product = $pdo->prepare("SELECT price, stock_quantity FROM products WHERE id=?"); $product->execute([$pid]); $p = $product->fetch(); if(!$p || $p['stock_quantity'] < $qty) continue; $total_price = $p['price'] * $qty; $profit_amount = $total_price * 0.2; $stmt = $pdo->prepare("INSERT INTO sale_items (sale_id, product_id, quantity, total_price, profit_amount) VALUES (?,?,?,?,?)"); $stmt->execute([$sale_id, $pid, $qty, $total_price, $profit_amount]); $pdo->prepare("UPDATE products SET stock_quantity = stock_quantity - ? WHERE id=?")->execute([$qty, $pid]); } $pdo->commit(); $_SESSION['success'] = "Satış eklendi."; } catch(PDOException $e){ $pdo->rollBack(); $_SESSION['error'] = "Satış eklenirken hata: ".$e->getMessage(); } } /* ========== VERİLERİN ÇEKİLMESİ ========== */ // Dashboard istatistikleri $stats = [ 'total_revenue' => $pdo->query("SELECT SUM(total_price) FROM sale_items")->fetchColumn() ?: 0, 'total_profit' => $pdo->query("SELECT SUM(profit_amount) FROM sale_items")->fetchColumn() ?: 0, 'product_count' => $pdo->query("SELECT COUNT(*) FROM products")->fetchColumn(), 'low_stock_count' => $pdo->query("SELECT COUNT(*) FROM products WHERE stock_quantity <= low_stock_threshold")->fetchColumn() ]; // Son 5 satış $recent_sales = $pdo->query(" SELECT p.name AS product_name, si.quantity, si.total_price, s.created_at FROM sale_items si JOIN sales s ON si.sale_id = s.id JOIN products p ON si.product_id = p.id ORDER BY s.created_at DESC LIMIT 5 ")->fetchAll(PDO::FETCH_ASSOC); // Ürün listesi $products = $pdo->query("SELECT * FROM products ORDER BY name ASC")->fetchAll(PDO::FETCH_ASSOC); // Stoğu azalan ürünler $low_stock_products = $pdo->query("SELECT * FROM products WHERE stock_quantity <= low_stock_threshold ORDER BY stock_quantity ASC")->fetchAll(PDO::FETCH_ASSOC); ?> Stok & Satış Takip
".$_SESSION['success']."
"; unset($_SESSION['success']); } ?> ".$_SESSION['error'].""; unset($_SESSION['error']); } ?>

Dashboard

Toplam Gelir

TL

Toplam Kâr

TL

Ürün Çeşidi

Düşük Stok

Ürün

Ürünler

AdFiyatStokDüşük Stokİşlemler
TL Sil

Satışlar

ÜrünAdet
(Stok: )

Son 5 Satış

ÜrünAdetToplamTarih
TL

Düşük Stok Ürünler