Jinsi ya Kutengeneza Exam Results CRUD System
Kuongeza matokeo ya mwanafunzi.
Kuona orodha ya matokeo.
Kuhariri au kufuta matokeo (CRUD).
Kuonyesha statistics au averages (baadaye).
Mfumo huu utatumia:
PDO + Prepared Statements (salama)
Password Hashing kwa user login (ikiwa kuna authentication)
Bootstrap (optional) kwa interface nzuri
βοΈ 2. Database Setup
Tengeneza database na table ya exam_results:
CREATE DATABASE school_db;
USE school_db;
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
class VARCHAR(50) NOT NULL
);
CREATE TABLE exam_results (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
subject VARCHAR(50) NOT NULL,
marks INT NOT NULL,
exam_date DATE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
);
π‘ Maelezo:
student_id ni foreign key kuunganisha na students.
ON DELETE CASCADE inahakikisha matokeo ya mwanafunzi yanafutwa ikiwa mwanafunzi anaondolewa.
βοΈ 3. Database Connection (config.php)
<?php
$dsn = "mysql:host=localhost;dbname=school_db;charset=utf8mb4";
$username = "root";
$password = "";
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("β Connection failed: " . $e->getMessage());
}
?>
β 4. Add Exam Result (add_result.php)
<?php
include 'config.php';
// Get students for dropdown
$studentsStmt = $pdo->query("SELECT * FROM students ORDER BY name ASC");
$students = $studentsStmt->fetchAll(PDO::FETCH_ASSOC);
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$student_id = $_POST['student_id'];
$subject = trim($_POST['subject']);
$marks = $_POST['marks'];
$exam_date = $_POST['exam_date'];
$stmt = $pdo->prepare("INSERT INTO exam_results (student_id, subject, marks, exam_date) VALUES (:student_id, :subject, :marks, :exam_date)");
$stmt->execute([
'student_id' => $student_id,
'subject' => $subject,
'marks' => $marks,
'exam_date' => $exam_date
]);
echo "<p style='color:green;'>β Exam result added successfully!</p>";
}
?>
<h2>β Add Exam Result</h2>
<form method="POST">
<select name="student_id" required>
<option value="">Select Student</option>
<?php foreach($students as $student): ?>
<option value="<?= $student['id'] ?>"><?= htmlspecialchars($student['name'])." - ".$student['class'] ?></option>
<?php endforeach; ?>
</select><br><br>
<input type="text" name="subject" placeholder="Subject" required><br><br>
<input type="number" name="marks" placeholder="Marks" required><br><br>
<input type="date" name="exam_date" required><br><br>
<button type="submit">Add Result</button>
</form>
<a href="results.php">π Back to Results</a>
π 5. View Exam Results (results.php)
<?php
include 'config.php';
$stmt = $pdo->query("SELECT er.id, s.name, s.class, er.subject, er.marks, er.exam_date
FROM exam_results er
JOIN students s ON er.student_id = s.id
ORDER BY er.exam_date DESC");
?>
<h2>π Exam Results</h2>
<a href="add_result.php">β Add Result</a><br><br>
<table border="1" cellpadding="8">
<tr>
<th>ID</th>
<th>Student</th>
<th>Class</th>
<th>Subject</th>
<th>Marks</th>
<th>Exam Date</th>
<th>Actions</th>
</tr>
<?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)): ?>
<tr>
<td><?= $row['id'] ?></td>
<td><?= htmlspecialchars($row['name']) ?></td>
<td><?= $row['class'] ?></td>
<td><?= htmlspecialchars($row['subject']) ?></td>
<td><?= $row['marks'] ?></td>
<td><?= $row['exam_date'] ?></td>
<td>
<a href="edit_result.php?id=<?= $row['id'] ?>">βοΈ Edit</a> |
<a href="delete_result.php?id=<?= $row['id'] ?>" onclick="return confirm('Are you sure?')">ποΈ Delete</a>
</td>
</tr>
<?php endwhile; ?>
</table>
βοΈ 6. Edit Exam Result (edit_result.php)
<?php
include 'config.php';
$id = $_GET['id'];
// Get result
$stmt = $pdo->prepare("SELECT * FROM exam_results WHERE id=:id");
$stmt->execute(['id'=>$id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// Get students for dropdown
$studentsStmt = $pdo->query("SELECT * FROM students ORDER BY name ASC");
$students = $studentsStmt->fetchAll(PDO::FETCH_ASSOC);
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$stmt = $pdo->prepare("UPDATE exam_results SET student_id=:student_id, subject=:subject, marks=:marks, exam_date=:exam_date WHERE id=:id");
$stmt->execute([
'student_id'=>$_POST['student_id'],
'subject'=>$_POST['subject'],
'marks'=>$_POST['marks'],
'exam_date'=>$_POST['exam_date'],
'id'=>$id
]);
echo "<p style='color:green;'>β Exam result updated successfully!</p>";
}
?>
<h2>βοΈ Edit Exam Result</h2>
<form method="POST">
<select name="student_id" required>
<?php foreach($students as $student): ?>
<option value="<?= $student['id'] ?>" <?= $student['id']==$result['student_id']?'selected':'' ?>>
<?= htmlspecialchars($student['name'])." - ".$student['class'] ?>
</option>
<?php endforeach; ?>
</select><br><br>
<input type="text" name="subject" value="<?= htmlspecialchars($result['subject']) ?>" required><br><br>
<input type="number" name="marks" value="<?= $result['marks'] ?>" required><br><br>
<input type="date" name="exam_date" value="<?= $result['exam_date'] ?>" required><br><br>
<button type="submit">Update Result</button>
</form>
<a href="results.php">π Back to Results</a>
β 7. Delete Exam Result (delete_result.php)
<?php
include 'config.php';
$id = $_GET['id'];
$stmt = $pdo->prepare("DELETE FROM exam_results WHERE id=:id");
$stmt->execute(['id'=>$id]);
header("Location: results.php");
exit;
?>
π§ 8. Vidokezo vya Security
PDO + Prepared Statements β Kuzuia SQL Injection.
Input Validation β Hakikisha marks ni nambari sahihi.
Authentication β Zuia users wasio admin ku-access system.
HTTPS β Linda data ya mtumiaji wakati inapotumwa.
CSRF Protection β Kuongeza token kwa forms ili kuzuia attacks.
β 9. Hitimisho
Mfumo huu ni msingi wa Exam Results CRUD System.
Admin au teacher anaweza ku-add, edit, delete, na view results kwa urahisi.
PDO na prepared statements zinaboresha security na data integrity.
π Tembelea:
π https://www.faulink.com/
Kwa mafunzo zaidi ya PHP, PDO, MySQL, na web systems development.