May 3, 2026 2 min read

Jinsi ya Kutengeneza Website Yenye Database kwa PHP na MySQL Step by Step

Tutengeneze website yenye:

✅ Home page
✅ About page
✅ Services page
✅ Contact page
✅ Admin dashboard
✅ Admin anaongeza content
✅ Admin ana-edit content
✅ Admin ana-delete content
✅ Visitors wanaona content
✅ Contact form inahifadhi messages database
✅ Database connection kupitia config.php
✅ Bootstrap design
1. Folder Structure

Tengeneza folder ndani ya htdocs:

database_website/

├── config.php
├── index.php
├── about.php
├── services.php
├── contact.php
├── admin.php
├── add_content.php
├── edit_content.php
├── delete_content.php
└── messages.php
2. Database SQL

Fungua phpMyAdmin, kisha run SQL hii:

CREATE DATABASE database_website_db;

USE database_website_db;

CREATE TABLE website_contents (
id INT AUTO_INCREMENT PRIMARY KEY,
page_name VARCHAR(100) NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
status ENUM('active','inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE contact_messages (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(150) NOT NULL,
email VARCHAR(150) NOT NULL,
phone VARCHAR(30),
subject VARCHAR(255),
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO website_contents (page_name, title, content, status) VALUES
('home', 'Karibu Kwenye Website Yetu', 'Hii ni website yenye database iliyotengenezwa kwa PHP, MySQL na Bootstrap.', 'active'),
('about', 'Kuhusu Sisi', 'Sisi tunatoa huduma bora za teknolojia, elimu, mifumo ya shule na website za kisasa.', 'active'),
('services', 'Huduma Zetu', 'Tunatengeneza websites, school systems, accounting systems, blog systems na dashboards.', 'active');
3. config.php
<?php
date_default_timezone_set("Africa/Dar_es_Salaam");

$host = "localhost";
$user = "root";
$password = "";
$database = "database_website_db";

$conn = new mysqli($host, $user, $password, $database);

if ($conn->connect_error) {
die("Database connection failed.");
}

$conn->set_charset("utf8mb4");

function clean($data) {
return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8');
}
?>
4. index.php
<?php
require_once "config.php";

$stmt = $conn->prepare("SELECT * FROM website_contents WHERE page_name='home' AND status='active' ORDER BY id DESC LIMIT 1");
$stmt->execute();
$content = $stmt->get_result()->fetch_assoc();
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Home - Database Website</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Website yenye database kwa PHP na MySQL.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a href="index.php" class="navbar-brand fw-bold">Database Website</a>

<div>
<a href="index.php" class="btn btn-outline-light btn-sm">Home</a>
<a href="about.php" class="btn btn-outline-light btn-sm">About</a>
<a href="services.php" class="btn btn-outline-light btn-sm">Services</a>
<a href="contact.php" class="btn btn-outline-light btn-sm">Contact</a>
<a href="admin.php" class="btn btn-success btn-sm">Admin</a>
</div>
</div>
</nav>

<header class="bg-primary text-white py-5">
<div class="container text-center">
<h1 class="fw-bold">
<?php echo $content ? clean($content['title']) : 'Karibu'; ?>
</h1>
<p class="lead">
<?php echo $content ? clean($content['content']) : 'Content haijapatikana.'; ?>
</p>
<a href="contact.php" class="btn btn-light">Wasiliana Nasi</a>
</div>
</header>

<section class="container my-5">
<div class="row g-4">
<div class="col-md-4">
<div class="card shadow-sm h-100">
<div class="card-body">
<h4>PHP</h4>
<p>Tunatumia PHP kuendesha logic ya website upande wa server.</p>
</div>
</div>
</div>

<div class="col-md-4">
<div class="card shadow-sm h-100">
<div class="card-body">
<h4>MySQL</h4>
<p>MySQL hutumika kuhifadhi taarifa za website kwenye database.</p>
</div>
</div>
</div>

<div class="col-md-4">
<div class="card shadow-sm h-100">
<div class="card-body">
<h4>Bootstrap</h4>
<p>Bootstrap husaidia website ionekane vizuri kwenye simu na computer.</p>
</div>
</div>
</div>
</div>
</section>

<footer class="bg-dark text-white text-center py-3">
<p class="mb-0">&copy; <?php echo date("Y"); ?> Database Website</p>
</footer>

</body>
</html>
5. about.php
<?php
require_once "config.php";

$stmt = $conn->prepare("SELECT * FROM website_contents WHERE page_name='about' AND status='active' ORDER BY id DESC LIMIT 1");
$stmt->execute();
$content = $stmt->get_result()->fetch_assoc();
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>About Us</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Kuhusu website yetu.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="index.php" class="navbar-brand">Database Website</a>
<div>
<a href="index.php" class="btn btn-outline-light btn-sm">Home</a>
<a href="services.php" class="btn btn-outline-light btn-sm">Services</a>
<a href="contact.php" class="btn btn-outline-light btn-sm">Contact</a>
</div>
</div>
</nav>

<div class="container my-5">
<div class="card shadow-sm">
<div class="card-body">
<h1><?php echo $content ? clean($content['title']) : 'About Us'; ?></h1>
<p class="lead">
<?php echo $content ? nl2br(clean($content['content'])) : 'Content haijapatikana.'; ?>
</p>
</div>
</div>
</div>

<footer class="bg-dark text-white text-center py-3">
<p class="mb-0">&copy; <?php echo date("Y"); ?> Database Website</p>
</footer>

</body>
</html>
6. services.php
<?php
require_once "config.php";

$stmt = $conn->prepare("SELECT * FROM website_contents WHERE page_name='services' AND status='active' ORDER BY id DESC LIMIT 1");
$stmt->execute();
$content = $stmt->get_result()->fetch_assoc();
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Services</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Huduma zetu za website na systems.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="index.php" class="navbar-brand">Database Website</a>
<div>
<a href="index.php" class="btn btn-outline-light btn-sm">Home</a>
<a href="about.php" class="btn btn-outline-light btn-sm">About</a>
<a href="contact.php" class="btn btn-outline-light btn-sm">Contact</a>
</div>
</div>
</nav>

<div class="container my-5">
<h1 class="mb-4"><?php echo $content ? clean($content['title']) : 'Services'; ?></h1>

<div class="alert alert-info">
<?php echo $content ? nl2br(clean($content['content'])) : 'Content haijapatikana.'; ?>
</div>

<div class="row g-4 mt-3">
<div class="col-md-3">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5>Website Design</h5>
<p>Website za kisasa zenye muonekano mzuri.</p>
</div>
</div>
</div>

<div class="col-md-3">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5>School Systems</h5>
<p>Mifumo ya shule, marks, reports na accounts.</p>
</div>
</div>
</div>

<div class="col-md-3">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5>Blog Systems</h5>
<p>Blog zenye admin panel na SEO features.</p>
</div>
</div>
</div>

<div class="col-md-3">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5>Accounting Systems</h5>
<p>Mifumo ya malipo, michango na reports.</p>
</div>
</div>
</div>
</div>
</div>

<footer class="bg-dark text-white text-center py-3">
<p class="mb-0">&copy; <?php echo date("Y"); ?> Database Website</p>
</footer>

</body>
</html>
7. contact.php
<?php
require_once "config.php";

$message = "";
$errors = [];

if (isset($_POST['send'])) {
$full_name = trim($_POST['full_name']);
$email = trim($_POST['email']);
$phone = trim($_POST['phone']);
$subject = trim($_POST['subject']);
$msg = trim($_POST['message']);

if ($full_name == "") {
$errors[] = "Jina linahitajika.";
}

if ($email == "" || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Email si sahihi.";
}

if ($msg == "") {
$errors[] = "Ujumbe unahitajika.";
}

if (empty($errors)) {
$stmt = $conn->prepare("INSERT INTO contact_messages (full_name, email, phone, subject, message) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $full_name, $email, $phone, $subject, $msg);

if ($stmt->execute()) {
$message = "Ujumbe umetumwa kikamilifu.";
} else {
$errors[] = "Imeshindikana kutuma ujumbe.";
}
}
}
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Contact Us</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Wasiliana nasi kupitia contact form.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="index.php" class="navbar-brand">Database Website</a>
<div>
<a href="index.php" class="btn btn-outline-light btn-sm">Home</a>
<a href="about.php" class="btn btn-outline-light btn-sm">About</a>
<a href="services.php" class="btn btn-outline-light btn-sm">Services</a>
</div>
</div>
</nav>

<div class="container my-5">
<div class="row">
<div class="col-md-7">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<h4>Wasiliana Nasi</h4>
</div>

<div class="card-body">

<?php if ($message): ?>
<div class="alert alert-success"><?php echo clean($message); ?></div>
<?php endif; ?>

<?php if (!empty($errors)): ?>
<div class="alert alert-danger">
<ul class="mb-0">
<?php foreach ($errors as $error): ?>
<li><?php echo clean($error); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>

<form method="POST">
<div class="mb-3">
<label class="form-label">Jina Kamili</label>
<input type="text" name="full_name" class="form-control" required>
</div>

<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" name="email" class="form-control" required>
</div>

<div class="mb-3">
<label class="form-label">Simu</label>
<input type="text" name="phone" class="form-control">
</div>

<div class="mb-3">
<label class="form-label">Subject</label>
<input type="text" name="subject" class="form-control">
</div>

<div class="mb-3">
<label class="form-label">Ujumbe</label>
<textarea name="message" rows="5" class="form-control" required></textarea>
</div>

<button type="submit" name="send" class="btn btn-primary">Tuma Ujumbe</button>
</form>

</div>
</div>
</div>

<div class="col-md-5">
<div class="card shadow-sm">
<div class="card-body">
<h4>Contact Details</h4>
<p><strong>Phone:</strong> +255 700 000 000</p>
<p><strong>Email:</strong> info@example.com</p>
<p><strong>Location:</strong> Tanzania</p>
</div>
</div>
</div>
</div>
</div>

<footer class="bg-dark text-white text-center py-3">
<p class="mb-0">&copy; <?php echo date("Y"); ?> Database Website</p>
</footer>

</body>
</html>
8. admin.php
<?php
require_once "config.php";

$result = $conn->query("SELECT * FROM website_contents ORDER BY id DESC");
$message = isset($_GET['message']) ? clean($_GET['message']) : "";
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Admin Dashboard</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Admin dashboard ya website yenye database.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="admin.php" class="navbar-brand fw-bold">Admin Dashboard</a>
<div>
<a href="index.php" class="btn btn-outline-light btn-sm">View Website</a>
<a href="add_content.php" class="btn btn-success btn-sm">+ Add Content</a>
<a href="messages.php" class="btn btn-warning btn-sm">Messages</a>
</div>
</div>
</nav>

<div class="container my-4">

<?php if ($message): ?>
<div class="alert alert-success"><?php echo $message; ?></div>
<?php endif; ?>

<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<h4>Website Contents</h4>
</div>

<div class="card-body table-responsive">
<table class="table table-bordered table-striped align-middle">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Page</th>
<th>Title</th>
<th>Content</th>
<th>Status</th>
<th>Created</th>
<th width="170">Action</th>
</tr>
</thead>

<tbody>
<?php if ($result->num_rows > 0): ?>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo clean($row['id']); ?></td>
<td><?php echo clean($row['page_name']); ?></td>
<td><?php echo clean($row['title']); ?></td>
<td><?php echo clean(substr($row['content'], 0, 80)); ?>...</td>
<td>
<?php if ($row['status'] == 'active'): ?>
<span class="badge bg-success">Active</span>
<?php else: ?>
<span class="badge bg-secondary">Inactive</span>
<?php endif; ?>
</td>
<td><?php echo date("d M Y", strtotime($row['created_at'])); ?></td>
<td>
<a href="edit_content.php?id=<?php echo $row['id']; ?>" class="btn btn-warning btn-sm">Edit</a>
<a href="delete_content.php?id=<?php echo $row['id']; ?>" onclick="return confirm('Una uhakika unataka kufuta?')" class="btn btn-danger btn-sm">Delete</a>
</td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="7" class="text-center">No content found.</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>

</div>

</body>
</html>
9. add_content.php
<?php
require_once "config.php";

$errors = [];

if (isset($_POST['save'])) {
$page_name = trim($_POST['page_name']);
$title = trim($_POST['title']);
$content = trim($_POST['content']);
$status = trim($_POST['status']);

if ($page_name == "") {
$errors[] = "Page name inahitajika.";
}

if ($title == "") {
$errors[] = "Title inahitajika.";
}

if ($content == "") {
$errors[] = "Content inahitajika.";
}

if (!in_array($status, ['active', 'inactive'])) {
$errors[] = "Status si sahihi.";
}

if (empty($errors)) {
$stmt = $conn->prepare("INSERT INTO website_contents (page_name, title, content, status) VALUES (?, ?, ?, ?)");
$stmt->bind_param("ssss", $page_name, $title, $content, $status);

if ($stmt->execute()) {
header("Location: admin.php?message=Content added successfully");
exit;
} else {
$errors[] = "Imeshindikana kuhifadhi content.";
}
}
}
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Add Content</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Ongeza content kwenye website.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="admin.php" class="navbar-brand">Admin Dashboard</a>
<a href="admin.php" class="btn btn-outline-light btn-sm">Back</a>
</div>
</nav>

<div class="container my-4">
<div class="card shadow-sm">
<div class="card-header bg-success text-white">
<h4>Add New Content</h4>
</div>

<div class="card-body">

<?php if (!empty($errors)): ?>
<div class="alert alert-danger">
<ul class="mb-0">
<?php foreach ($errors as $error): ?>
<li><?php echo clean($error); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>

<form method="POST">
<div class="mb-3">
<label class="form-label">Page Name</label>
<select name="page_name" class="form-control" required>
<option value="">Select Page</option>
<option value="home">Home</option>
<option value="about">About</option>
<option value="services">Services</option>
</select>
</div>

<div class="mb-3">
<label class="form-label">Title</label>
<input type="text" name="title" class="form-control" required>
</div>

<div class="mb-3">
<label class="form-label">Content</label>
<textarea name="content" rows="8" class="form-control" required></textarea>
</div>

<div class="mb-3">
<label class="form-label">Status</label>
<select name="status" class="form-control">
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
</div>

<button type="submit" name="save" class="btn btn-success">Save Content</button>
<a href="admin.php" class="btn btn-secondary">Cancel</a>
</form>

</div>
</div>
</div>

</body>
</html>
10. edit_content.php
<?php
require_once "config.php";

$errors = [];

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
header("Location: admin.php?message=Invalid ID");
exit;
}

$id = (int) $_GET['id'];

$stmt = $conn->prepare("SELECT * FROM website_contents WHERE id=?");
$stmt->bind_param("i", $id);
$stmt->execute();
$item = $stmt->get_result()->fetch_assoc();

if (!$item) {
header("Location: admin.php?message=Content not found");
exit;
}

if (isset($_POST['update'])) {
$page_name = trim($_POST['page_name']);
$title = trim($_POST['title']);
$content = trim($_POST['content']);
$status = trim($_POST['status']);

if ($page_name == "") {
$errors[] = "Page name inahitajika.";
}

if ($title == "") {
$errors[] = "Title inahitajika.";
}

if ($content == "") {
$errors[] = "Content inahitajika.";
}

if (!in_array($status, ['active', 'inactive'])) {
$errors[] = "Status si sahihi.";
}

if (empty($errors)) {
$stmt = $conn->prepare("UPDATE website_contents SET page_name=?, title=?, content=?, status=? WHERE id=?");
$stmt->bind_param("ssssi", $page_name, $title, $content, $status, $id);

if ($stmt->execute()) {
header("Location: admin.php?message=Content updated successfully");
exit;
} else {
$errors[] = "Imeshindikana ku-update content.";
}
}
} else {
$page_name = $item['page_name'];
$title = $item['title'];
$content = $item['content'];
$status = $item['status'];
}
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Edit Content</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Edit content ya website.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="admin.php" class="navbar-brand">Admin Dashboard</a>
<a href="admin.php" class="btn btn-outline-light btn-sm">Back</a>
</div>
</nav>

<div class="container my-4">
<div class="card shadow-sm">
<div class="card-header bg-warning">
<h4>Edit Content</h4>
</div>

<div class="card-body">

<?php if (!empty($errors)): ?>
<div class="alert alert-danger">
<ul class="mb-0">
<?php foreach ($errors as $error): ?>
<li><?php echo clean($error); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>

<form method="POST">
<div class="mb-3">
<label class="form-label">Page Name</label>
<select name="page_name" class="form-control" required>
<option value="home" <?php echo ($page_name == 'home') ? 'selected' : ''; ?>>Home</option>
<option value="about" <?php echo ($page_name == 'about') ? 'selected' : ''; ?>>About</option>
<option value="services" <?php echo ($page_name == 'services') ? 'selected' : ''; ?>>Services</option>
</select>
</div>

<div class="mb-3">
<label class="form-label">Title</label>
<input type="text" name="title" class="form-control" required value="<?php echo clean($title); ?>">
</div>

<div class="mb-3">
<label class="form-label">Content</label>
<textarea name="content" rows="8" class="form-control" required><?php echo clean($content); ?></textarea>
</div>

<div class="mb-3">
<label class="form-label">Status</label>
<select name="status" class="form-control">
<option value="active" <?php echo ($status == 'active') ? 'selected' : ''; ?>>Active</option>
<option value="inactive" <?php echo ($status == 'inactive') ? 'selected' : ''; ?>>Inactive</option>
</select>
</div>

<button type="submit" name="update" class="btn btn-warning">Update Content</button>
<a href="admin.php" class="btn btn-secondary">Cancel</a>
</form>

</div>
</div>
</div>

</body>
</html>
11. delete_content.php
<?php
require_once "config.php";

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
header("Location: admin.php?message=Invalid ID");
exit;
}

$id = (int) $_GET['id'];

$stmt = $conn->prepare("DELETE FROM website_contents WHERE id=?");
$stmt->bind_param("i", $id);

if ($stmt->execute()) {
header("Location: admin.php?message=Content deleted successfully");
exit;
} else {
header("Location: admin.php?message=Failed to delete content");
exit;
}
?>
12. messages.php
<?php
require_once "config.php";

$result = $conn->query("SELECT * FROM contact_messages ORDER BY id DESC");
?>
<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="UTF-8">
<title>Contact Messages</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Messages za contact form.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css&quot; rel="stylesheet">
</head>

<body class="bg-light">

<nav class="navbar navbar-dark bg-dark">
<div class="container">
<a href="admin.php" class="navbar-brand">Admin Dashboard</a>
<a href="admin.php" class="btn btn-outline-light btn-sm">Back</a>
</div>
</nav>

<div class="container my-4">
<div class="card shadow-sm">
<div class="card-header bg-warning">
<h4>Contact Messages</h4>
</div>

<div class="card-body table-responsive">
<table class="table table-bordered table-striped align-middle">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Full Name</th>
<th>Email</th>
<th>Phone</th>
<th>Subject</th>
<th>Message</th>
<th>Date</th>
</tr>
</thead>

<tbody>
<?php if ($result->num_rows > 0): ?>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo clean($row['id']); ?></td>
<td><?php echo clean($row['full_name']); ?></td>
<td><?php echo clean($row['email']); ?></td>
<td><?php echo clean($row['phone']); ?></td>
<td><?php echo clean($row['subject']); ?></td>
<td><?php echo clean(substr($row['message'], 0, 100)); ?>...</td>
<td><?php echo date("d M Y H:i", strtotime($row['created_at'])); ?></td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="7" class="text-center">No messages found.</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>

</body>
</html>
13. Jinsi ya Ku-run Website

Fuata hatua hizi:

1. Weka folder database_website ndani ya htdocs.
2. Washa Apache na MySQL kwenye XAMPP.
3. Fungua phpMyAdmin.
4. Run SQL ya database.
5. Fungua browser.

Public website:

http://localhost/database_website/

Admin dashboard:

http://localhost/database_website/admin.php
14. Muhimu Sana

Hii ni version ya kujifunzia. Kwenye production ongeza:

✅ Admin login
✅ Password hashing
✅ Sessions
✅ CSRF protection
✅ Upload image security
✅ HTTPS
✅ SEO friendly URLs
✅ Sitemap.xml
✅ Robots.txt
✅ User roles
15. Hitimisho

Sasa una website kamili yenye database inayoweza:

✅ Kuonyesha content kutoka database
✅ Kuongeza content kupitia admin
✅ Ku-edit content
✅ Ku-delete content
✅ Kupokea contact messages
✅ Kuonyesha pages za Home, About, Services na Contact
✅ Kutumia PHP + MySQL + Bootstrap

Hii ndiyo foundation ya kutengeneza website kubwa kama blog, school website, company website, news website au admin dashboard.

🚀 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