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