Complete PHP Farm Management System Tutorial 2026 — Build a Professional Farm System with PHP PDO and MySQL
Learn how to build a complete PHP Farm Management System using PHP PDO, MySQL and Bootstrap 5. Manage workers, expenses, sales, crops, livestock, reports and farm records professionally.
What is a PHP Farm Management System?
A Farm Management System helps farmers and agribusiness owners manage:
farm expenses
crop records
livestock records
workers
farm sales
inventory
reports
profits and losses
daily activities
This system can be used for:
crop farming
livestock farming
poultry farming
dairy farming
agricultural businesses
For more tutorials:
https://faulink.com
Technologies Used
This project uses:
PHP PDO
MySQL
Bootstrap 5
HTML5
CSS3
JavaScript
STEP 1 — Create Database
CREATE DATABASE farm_management_system;
USE farm_management_system;
STEP 2 — Create Users Table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(150) NOT NULL,
username VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role VARCHAR(50) DEFAULT 'Manager',
status ENUM('active','inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 3 — Create Workers Table
CREATE TABLE workers (
id INT AUTO_INCREMENT PRIMARY KEY,
worker_name VARCHAR(150) NOT NULL,
gender ENUM('Male','Female') NOT NULL,
phone VARCHAR(30),
address VARCHAR(255),
salary DECIMAL(15,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 4 — Create Crops Table
CREATE TABLE crops (
id INT AUTO_INCREMENT PRIMARY KEY,
crop_name VARCHAR(150) NOT NULL,
planting_date DATE,
harvest_date DATE,
quantity DECIMAL(15,2) DEFAULT 0,
status VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 5 — Create Livestock Table
CREATE TABLE livestock (
id INT AUTO_INCREMENT PRIMARY KEY,
animal_type VARCHAR(150) NOT NULL,
quantity INT DEFAULT 0,
purchase_date DATE,
health_status VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 6 — Create Expenses Table
CREATE TABLE expenses (
id INT AUTO_INCREMENT PRIMARY KEY,
expense_name VARCHAR(150) NOT NULL,
amount DECIMAL(15,2) NOT NULL,
expense_date DATE NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 7 — Create Sales Table
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(150) NOT NULL,
quantity DECIMAL(15,2) DEFAULT 0,
unit_price DECIMAL(15,2) DEFAULT 0,
total_amount DECIMAL(15,2) DEFAULT 0,
sale_date DATE NOT NULL,
customer_name VARCHAR(150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
STEP 8 — Database Connection
config.php
<?php
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$host = "localhost";
$dbname = "farm_management_system";
$user = "root";
$pass = "";
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$pass,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
} catch (PDOException $e) {
die("Database Connection Failed");
}
function clean($data) {
return htmlspecialchars(
trim($data),
ENT_QUOTES,
'UTF-8'
);
}
function money($amount) {
return number_format((float)$amount, 2);
}
?>
STEP 9 — Add Farm Worker
<?php
if (isset($_POST['save_worker'])) {
$worker_name = clean($_POST['worker_name']);
$gender = clean($_POST['gender']);
$phone = clean($_POST['phone']);
$salary = (float)$_POST['salary'];
$stmt = $pdo->prepare("
INSERT INTO workers
(worker_name, gender, phone, salary)
VALUES (?, ?, ?, ?)
");
$stmt->execute([
$worker_name,
$gender,
$phone,
$salary
]);
echo "Worker added successfully.";
}
?>
STEP 10 — Add Farm Expense
<?php
if (isset($_POST['save_expense'])) {
$expense_name = clean($_POST['expense_name']);
$amount = (float)$_POST['amount'];
$expense_date = clean($_POST['expense_date']);
$description = clean($_POST['description']);
$stmt = $pdo->prepare("
INSERT INTO expenses
(expense_name, amount, expense_date, description)
VALUES (?, ?, ?, ?)
");
$stmt->execute([
$expense_name,
$amount,
$expense_date,
$description
]);
echo "Expense saved successfully.";
}
?>
STEP 11 — Add Farm Sale
<?php
if (isset($_POST['save_sale'])) {
$product_name = clean($_POST['product_name']);
$quantity = (float)$_POST['quantity'];
$unit_price = (float)$_POST['unit_price'];
$total_amount = $quantity * $unit_price;
$sale_date = clean($_POST['sale_date']);
$customer_name = clean($_POST['customer_name']);
$stmt = $pdo->prepare("
INSERT INTO sales
(product_name, quantity, unit_price, total_amount, sale_date, customer_name)
VALUES (?, ?, ?, ?, ?, ?)
");
$stmt->execute([
$product_name,
$quantity,
$unit_price,
$total_amount,
$sale_date,
$customer_name
]);
echo "Sale saved successfully.";
}
?>
STEP 12 — Farm Dashboard Calculations
$totalWorkers = $pdo->query("
SELECT COUNT(*)
FROM workers
")->fetchColumn();
$totalExpenses = $pdo->query("
SELECT COALESCE(SUM(amount),0)
FROM expenses
")->fetchColumn();
$totalSales = $pdo->query("
SELECT COALESCE(SUM(total_amount),0)
FROM sales
")->fetchColumn();
$profit = $totalSales - $totalExpenses;
STEP 13 — Bootstrap Farm Dashboard
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<div class="container py-4">
<div class="row g-4">
<div class="col-md-3">
<div class="card shadow-sm border-0 rounded-4 p-3">
<small>Total Workers</small>
<h3><?= $totalWorkers; ?></h3>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 rounded-4 p-3">
<small>Total Expenses</small>
<h3>TZS <?= money($totalExpenses); ?></h3>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 rounded-4 p-3">
<small>Total Sales</small>
<h3>TZS <?= money($totalSales); ?></h3>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 rounded-4 p-3">
<small>Profit</small>
<h3>TZS <?= money($profit); ?></h3>
</div>
</div>
</div>
</div>
STEP 14 — Secure Login System
<?php
$stmt = $pdo->prepare("
SELECT *
FROM users
WHERE username = ?
LIMIT 1
");
$stmt->execute([$username]);
$user = $stmt->fetch();
if (
$user &&
password_verify($password, $user['password'])
) {
session_regenerate_id(true);
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
exit;
}
?>
STEP 15 — Security Best Practices
Use:
PDO prepared statements
password hashing
CSRF protection
session regeneration
input validation
protected pages
Example:
$password = password_hash(
$password,
PASSWORD_DEFAULT
);
Features of PHP Farm Management System
workers management
crops management
livestock management
expenses management
sales management
reports
profit calculation
secure login
Bootstrap dashboard
responsive design
Benefits of Farm Management System
Better Farm Records
You can manage all farm records from one dashboard.
Easy Financial Tracking
Track farm income and expenses easily.
Better Productivity
Workers, crops and livestock are managed efficiently.
Professional Farm Operations
The system improves farm business management.
Conclusion
A PHP Farm Management System is a powerful project for learning PHP PDO and MySQL.
Using:
PHP PDO
MySQL
Bootstrap 5
secure authentication
prepared statements
you can build a professional farm system.
For more tutorials visit:
🚀 Unahitaji mfumo au website ya biashara?
Chagua huduma hapa chini kisha mteja bofya moja kwa moja kwenda kwenye ukurasa wa huduma au kuwasiliana nasi kwa WhatsApp.