FAUSTINE MWOYA November 24, 2025 1 min read

Jinsi ya Kutengeneza Mfumo Kamili wa Kupakia, Kuhariri, na Kusimamia Faili za Excel kwa PHP & MySQL full code step by step for beginners

Katika makala hii, tutajenga mfumo kamili wa kusimamia mifumo ya Excel (Excel Systems) kwa kutumia PHP, MySQL, na Bootstrap.

Mfumo huu unaruhusu admin:

✔ Kupakia faili za Excel (xlsx, xls, zip)
✔ Kuhifadhi maelezo ya faili kwenye database
✔ Kuonyesha mifumo yote kwa mtindo wa kisasa
✔ Kuedit taarifa au kubadilisha faili
✔ Kufuta mfumo
✔ Kuongeza video ya YouTube kwa ajili ya maelezo ya mfumo

Mfumo huu ni rahisi, salama, na unafaa kwa mafunzo, huduma za IT, au website za kuuza mifumo mbalimbali.

🔧 1. Database Structure (excel_files table)

Kabla ya kitu chochote, unda table hii kwenye database yako:

CREATE TABLE excel_files (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
filename VARCHAR(255),
size VARCHAR(50),
type ENUM('sample','complete'),
youtube_link VARCHAR(255) NULL,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

🔐 2. Admin Login Protection

Faili zote za admin hutumia:

session_start();
if (!isset($_SESSION['admin_logged'])) {
header("Location: upload_login.php");
exit;
}

Hii inalinda mfumo.

🧩 3. CODE KAMILI YA MFUMO WOTE (Upload, Edit, Display, Delete)

👇👇 Hii ndiyo code ya mfumo wote kwa pamoja. Unaweza kuipaste moja kwa moja.

<?php
session_start();
if (!isset($_SESSION['admin_logged'])) {
header("Location: upload_login.php");
exit;
}

$conn = new mysqli("localhost", "Kakuzi1", "=Kaku\i1", "Kakuzi1");
if ($conn->connect_error) die("Database connection failed.");

$msg = "";

/* ============================
UPLOAD FILE
=============================*/
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['excel_file'])) {
$title = $conn->real_escape_string($_POST['title']);
$description = $conn->real_escape_string($_POST['description']);
$type = $conn->real_escape_string($_POST['type']);
$youtube_link = !empty($_POST['youtube_link']) ? $conn->real_escape_string($_POST['youtube_link']) : NULL;

$upload_dir = "uploads/excel/";
@mkdir($upload_dir, 0777, true);

$filename = time() . "_" . basename($_FILES["excel_file"]["name"]);
$target = $upload_dir . $filename;

if (move_uploaded_file($_FILES["excel_file"]["tmp_name"], $target)) {
$size = round($_FILES["excel_file"]["size"] / 1024, 1) . " KB";

$sql = "INSERT INTO excel_files (title, description, filename, size, type, youtube_link, uploaded_at)
VALUES ('$title', '$description', '$filename', '$size', '$type', " . ($youtube_link ? "'$youtube_link'" : "NULL") . ", NOW())";
$conn->query($sql);

$msg = "<div class='alert alert-success'>Mfumo umeongezwa kwa mafanikio!</div>";
} else {
$msg = "<div class='alert alert-danger'>Imeshindikana kupakia faili.</div>";
}
}

/* ============================
UPDATE FILE
=============================*/
if (isset($_POST['update_id'])) {
$id = intval($_POST['update_id']);
$title = $conn->real_escape_string($_POST['edit_title']);
$description = $conn->real_escape_string($_POST['edit_description']);
$type = $conn->real_escape_string($_POST['edit_type']);
$youtube_link = !empty($_POST['edit_youtube_link']) ? $conn->real_escape_string($_POST['edit_youtube_link']) : NULL;

$file_sql = "";
if (!empty($_FILES['edit_excel_file']['name'])) {
$upload_dir = "uploads/excel/";
@mkdir($upload_dir, 0777, true);
$filename = time() . "_" . basename($_FILES["edit_excel_file"]["name"]);
$target = $upload_dir . $filename;

if (move_uploaded_file($_FILES["edit_excel_file"]["tmp_name"], $target)) {
$size = round($_FILES["edit_excel_file"]["size"] / 1024, 1) . " KB";
$file_sql = ", filename='$filename', size='$size'";
}
}

$sql = "UPDATE excel_files SET
title='$title',
description='$description',
type='$type',
youtube_link=" . ($youtube_link ? "'$youtube_link'" : "NULL") . "
$file_sql
WHERE id=$id";

$conn->query($sql);
$msg = "<div class='alert alert-info'>Mfumo umesasishwa kwa mafanikio!</div>";
}

/* ============================
GET ALL FILES
=============================*/
$result = $conn->query("SELECT * FROM excel_files ORDER BY id DESC");
?>

<!DOCTYPE html>
<html lang="sw">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Admin - Manage Mifumo ya Excel</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css&quot; rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css&quot; rel="stylesheet">

<style>
body { background: #f1f3f6; font-family: 'Inter', sans-serif; }
.card, .table { border-radius: 1rem; box-shadow: 0 10px 25px rgba(0,0,0,.08); }
</style>
</head>
<body>

<div class="container my-5">
<div class="card shadow-lg p-4">

<h3 class="mb-4 text-center text-success">
<i class="fa fa-file-excel"></i> Ongeza / Hariri Mifumo ya Excel
</h3>

<?= $msg ?>

<!-- ADD NEW SYSTEM -->
<form method="POST" enctype="multipart/form-data">
<div class="row g-3">

<div class="col-md-6">
<label class="form-label">Jina la Mfumo</label>
<input type="text" name="title" class="form-control" required>
</div>

<div class="col-md-6">
<label class="form-label">Aina</label>
<select name="type" class="form-select">
<option value="sample">Sample</option>
<option value="complete">Complete</option>
</select>
</div>

<div class="col-12">
<label class="form-label">Maelezo</label>
<textarea name="description" class="form-control"></textarea>
</div>

<div class="col-12">
<label class="form-label">YouTube Link (Hiari)</label>
<input type="url" name="youtube_link" class="form-control">
</div>

<div class="col-12">
<label class="form-label">Faili la Excel</label>
<input type="file" name="excel_file" class="form-control" required>
</div>

<div class="col-12 text-end">
<button class="btn btn-success"><i class="fa fa-upload"></i> Pakia Mfumo</button>
</div>

</div>
</form>

<hr class="my-4">

<!-- DISPLAY SYSTEM LIST -->
<h5 class="text-center text-secondary mb-3">Mifumo Iliyopo</h5>

<div class="table-responsive">
<table class="table table-striped table-bordered bg-white">

<thead class="table-success text-center">
<tr>
<th>#</th><th>Jina</th><th>Aina</th><th>Ukubwa</th>
<th>Video</th><th>Tarehe</th><th>Vitendo</th>
</tr>
</thead>

<tbody>

<?php while($row = $result->fetch_assoc()): ?>
<tr class="align-middle text-center">

<td><?= $row['id'] ?></td>
<td><?= htmlspecialchars($row['title']) ?></td>
<td>
<span class="badge bg-<?= $row['type']=='sample'?'primary':'success' ?>">
<?= ucfirst($row['type']) ?>
</span>
</td>
<td><?= $row['size'] ?></td>

<td>
<?php if (!empty($row['youtube_link'])):
preg_match('/(?:v=|be\/)([a-zA-Z0-9_-]+)/', $row['youtube_link'], $m);
$vid = $m[1] ?? '';
if ($vid): ?>
<iframe width="150" height="90"
src="https://www.youtube.com/embed/&lt;?= $vid ?>"
allowfullscreen></iframe>
<?php endif; else: ?>
<span class="text-muted">--</span>
<?php endif; ?>
</td>

<td><?= $row['uploaded_at'] ?></td>

<td>
<a href="#" class="btn btn-outline-primary btn-sm"
data-bs-toggle="modal"
data-bs-target="#editModal<?= $row['id'] ?>">
<i class="fa fa-edit"></i>
</a>

<a href="excel_mifumo.php?download=<?= $row['id'] ?>"
class="btn btn-outline-success btn-sm">
<i class="fa fa-download"></i>
</a>

<a href="delete_excel.php?id=<?= $row['id'] ?>"
class="btn btn-outline-danger btn-sm"
onclick="return confirm('Futa mfumo huu?')">
<i class="fa fa-trash"></i>
</a>
</td>

</tr>

<!-- EDIT MODAL -->
<div class="modal fade" id="editModal<?= $row['id'] ?>">
<div class="modal-dialog modal-lg">
<div class="modal-content">

<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Hariri Mfumo</h5>
<button class="btn-close" data-bs-dismiss="modal"></button>
</div>

<form method="POST" enctype="multipart/form-data">
<div class="modal-body">

<input type="hidden" name="update_id" value="<?= $row['id'] ?>">

<label>Jina</label>
<input type="text" name="edit_title" class="form-control"
value="<?= htmlspecialchars($row['title']) ?>">

<label class="mt-3">Maelezo</label>
<textarea name="edit_description" class="form-control">
<?= htmlspecialchars($row['description']) ?>
</textarea>

<label class="mt-3">Aina</label>
<select name="edit_type" class="form-select">
<option value="sample" <?= $row['type']=='sample'?'selected':'' ?>>Sample</option>
<option value="complete" <?= $row['type']=='complete'?'selected':'' ?>>Complete</option>
</select>

<label class="mt-3">YouTube Link</label>
<input type="url" name="edit_youtube_link" class="form-control"
value="<?= htmlspecialchars($row['youtube_link']) ?>">

<label class="mt-3">Badilisha Faili</label>
<input type="file" name="edit_excel_file" class="form-control">

</div>

<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">Funga</button>
<button class="btn btn-primary"><i class="fa fa-save"></i> Hifadhi</button>
</div>
</form>

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

<?php endwhile; ?>

</tbody>
</table>
</div>

</div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
</body>
</html>

🎉 Hitimisho

Kwa kutumia code hii, sasa una mfumo kamili unaofanya:

✔ Upload
✔ Edit
✔ Display
✔ Delete
✔ YouTube preview
✔ Responsive Bootstrap UI

Ni mfumo wa kiwango cha kitaalamu unaoweza kuboreshwa kulingana na mahitaji ya mradi wako au project yako.

🔗 Links Za Kujifunza Zaidi

🌐 Faulink Official Website:
https://www.faulink.com/

📘 Jifunze Web Design & Programming:
https://www.faulink.com/excel_mifumo.php

📲 WhatsApp kwa msaada:
https://wa.me/255693118509

🚀 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