May 10, 2026 3 min read

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&quot; 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:

https://faulink.com

🚀 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.

Share this post

Comments

0
No comments yet. Be the first to comment.

Continue Reading

Subscribe

Get new updates

Jiunge upokee posts mpya, tutorials, na updates za mifumo moja kwa moja kwenye email yako.

Faulink Support