PHP සහ MySQL E-Learning වෙබ් අඩවිය

ශිෂ්‍ය සහ ගුරු උපකරණ පුවරු සහිත සම්පූර්ණ e-learning වෙබ් අඩවියක් පියවරෙන් පියවර නිර්මාණය කරමු.

1. හැඳින්වීම (Introduction)

මෙම නිබන්ධනය මගින්, ඔබ ලබාදුන් වීඩියෝවේ ඇති ආකාරයේ e-learning platform එකක් නිර්මාණය කරන්නේ කෙසේදැයි පියවරෙන් පියවර කියාදෙනු ලැබේ. මෙහිදී අපි PHP (server-side scripting), MySQL (database), සහ Bootstrap (front-end framework) භාවිතා කරමු.

ප්‍රධාන අංග:
  • සිංහල භාෂා සහාය (Unicode/UTF-8)
  • පරිශීලක ලියාපදිංචිය සහ පිවිසීම (Login/Logout)
  • ශිෂ්‍ය උපකරණ පුවරුව (Student Dashboard)
  • ගුරු උපකරණ පුවරුව (Teacher Dashboard)

2. ව්‍යාපෘතියේ ව්‍යුහය (Project Structure)

පළමුව, අපගේ ව්‍යාපෘතිය සඳහා පහත පරිදි ෆෝල්ඩර සහ ගොනු ව්‍යුහයක් සකසා ගනිමු. මෙය කේතය සංවිධානාත්මකව තබා ගැනීමට උපකාරී වේ.


/e-learning-platform/
|-- config/
|   `-- db_connect.php
|-- student/
|   |-- index.php
|   |-- lessons.php
|   `-- profile.php
|-- teacher/
|   |-- index.php
|   |-- manage_lessons.php
|   `-- create_lesson.php
|-- assets/
|   `-- css/
|       `-- style.css
|-- login.php
|-- register.php
|-- logout.php
`-- index.php

3. දත්ත සමුදාය සැකසීම (MySQL Database)

phpMyAdmin හෝ වෙනත් MySQL client එකක් භාවිතයෙන් elearning_db නමින් දත්ත සමුදායක් සාදන්න. ඉන්පසු පහත SQL කේතය ක්‍රියාත්මක කර අවශ්‍ය වගු (tables) සාදාගන්න.


-- පරිශීලකයන් (users) සඳහා වගුව
CREATE TABLE `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `full_name` VARCHAR(100) NOT NULL,
  `email` VARCHAR(100) NOT NULL UNIQUE,
  `password` VARCHAR(255) NOT NULL,
  `user_type` ENUM('student', 'teacher') NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- පාඩම් (lessons) සඳහා වගුව
CREATE TABLE `lessons` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `teacher_id` INT NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  `content` TEXT NOT NULL,
  FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`)
);

-- ශිෂ්‍ය ප්‍රගතිය (student_progress) සඳහා වගුව
CREATE TABLE `student_progress` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `student_id` INT NOT NULL,
    `lesson_id` INT NOT NULL,
    `status` ENUM('completed', 'in_progress') DEFAULT 'in_progress',
    FOREIGN KEY (`student_id`) REFERENCES `users`(`id`),
    FOREIGN KEY (`lesson_id`) REFERENCES `lessons`(`id`)
);

4. PHP මූලික ගොනු (Core PHP Files)

ව්‍යාපෘතියේ හරය වන දත්ත සමුදා සම්බන්ධතාවය සකසමු.

config/db_connect.php

මෙම ගොනුව අපගේ වෙබ් අඩවිය සහ MySQL දත්ත සමුදාය අතර සම්බන්ධතාවය ගොඩනගයි. සිංහල භාෂාව සඳහා utf8 character set එක භාවිතා කිරීම අනිවාර්ය වේ.


<?php
session_start();

$host = 'localhost';
$username = 'root'; // ඔබගේ username
$password = '';     // ඔබගේ password
$dbname = 'elearning_db';

// Create connection
$conn = new mysqli($host, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("සම්බන්ධතාවය අසාර්ථකයි: " . $conn->connect_error);
}

// Set character set to UTF-8 for Sinhala support
mysqli_set_charset($conn, "utf8");
?>

5. පොදු පිටු (Public Pages)

සියලුම පරිශීලකයින්ට පිවිසිය හැකි login සහ register පිටු නිර්මාණය කරමු.

login.php

පරිශීලකයින්ට පද්ධතියට පිවිසීමට මෙම පිටුව භාවිතා කරයි. සාර්ථක පිවිසීමකින් පසු, ඔවුන්ව ඔවුන්ගේ අදාළ උපකරණ පුවරුව වෙත යොමු කෙරේ.


<?php
require 'config/db_connect.php';
$error = '';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $email = $_POST['email'];
    $password = $_POST['password'];

    $sql = "SELECT id, password, user_type FROM users WHERE email = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 1) {
        $user = $result->fetch_assoc();
        if (password_verify($password, $user['password'])) {
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['user_type'] = $user['user_type'];

            if ($user['user_type'] == 'student') {
                header("Location: student/index.php");
            } else {
                header("Location: teacher/index.php");
            }
            exit();
        } else {
            $error = "මුරපදය වැරදියි!";
        }
    } else {
        $error = "මෙම විද්‍යුත් තැපෑල ලියාපදිංචි වී නොමැත!";
    }
}
// HTML form for login goes here...
?>
සටහන: register.php ගොනුවද මීට සමානව සාදාගත යුතුය. එහිදී පරිශීලකයාගේ නම, විද්‍යුත් තැපෑල, මුරපදය, සහ පරිශීලක වර්ගය (student/teacher) ලබාගෙන password_hash() ශ්‍රිතය භාවිතයෙන් මුරපදය සුරක්ෂිතව දත්ත සමුදායට ඇතුළත් කරන්න.

6. ශිෂ්‍ය උපකරණ පුවරුව (Student Dashboard)

student/index.php

ශිෂ්‍යයෙකු පිවිසි පසු පෙනෙන ප්‍රධාන පිටුව මෙයයි. මෙහිදී ශිෂ්‍යයාට අදාළ පාඩම්, ප්‍රගතිය, සහ අනෙකුත් තොරතුරු පෙන්වයි.


<?php
require '../config/db_connect.php';

// Check if user is logged in and is a student
if (!isset($_SESSION['user_id']) || $_SESSION['user_type'] != 'student') {
    header("Location: ../login.php");
    exit();
}

$student_id = $_SESSION['user_id'];
?>
<!DOCTYPE html>
<html lang="si">
<head>
    <title>ශිෂ්‍ය උපකරණ පුවරුව</title>
    <!-- Bootstrap CSS -->
</head>
<body>
    <div class="container">
        <h1>ආයුබෝවන්, ශිෂ්‍යයා!</h1>
        <p>ඔබගේ පාඩම් මෙතනින් ආරම්භ කරන්න.</p>
        <!-- Display lessons assigned to the student -->
        <a href="../logout.php" class="btn btn-danger">ඉවත් වන්න</a>
    </div>
</body>
</html>

7. ගුරු උපකරණ පුවරුව (Teacher Dashboard)

teacher/index.php

ගුරුවරයෙකු පිවිසි පසු පෙනෙන ප්‍රධාන පිටුව මෙයයි. මෙහිදී ගුරුවරයාට පාඩම් කළමනාකරණය කිරීමට සහ ශිෂ්‍යයන්ගේ විස්තර බැලීමට හැකිය.


<?php
require '../config/db_connect.php';

// Check if user is logged in and is a teacher
if (!isset($_SESSION['user_id']) || $_SESSION['user_type'] != 'teacher') {
    header("Location: ../login.php");
    exit();
}

$teacher_id = $_SESSION['user_id'];
?>
<!DOCTYPE html>
<html lang="si">
<head>
    <title>ගුරු උපකරණ පුවරුව</title>
    <!-- Bootstrap CSS -->
</head>
<body>
    <div class="container">
        <h1>ආයුබෝවන්, ගුරුතුමනි!</h1>
        <p>ඔබගේ පාඩම් මෙතනින් කළමනාකරණය කරන්න.</p>
        <a href="create_lesson.php" class="btn btn-primary">නව පාඩමක් සාදන්න</a>
        <a href="manage_lessons.php" class="btn btn-secondary">පාඩම් කළමනාකරණය</a>
        <a href="../logout.php" class="btn btn-danger">ඉවත් වන්න</a>
    </div>
</body>
</html>

8. අවසාන සටහන් (Final Notes)

මෙම නිබන්ධනය මගින් ඔබට e-learning වෙබ් අඩවියක මූලික රාමුවක් ලබා දේ. මෙය තවදුරටත් දියුණු කිරීමට ඔබට හැකිය.

වැඩිදුර දියුණු කිරීම්:
  • ගෙවීම් පද්ධතියක් (Payment Gateway) ඒකාබද්ධ කිරීම.
  • ශිෂ්‍ය ප්‍රගතිය නිරීක්ෂණය සහ වාර්තා ලබා දීම.
  • පාඩම් සඳහා වීඩියෝ සහ PDF වැනි මාධ්‍ය එක් කිරීම.
  • වඩාත් ආකර්ශනීය සහ පරිශීලක-හිතකාමී අතුරුමුහුණතක් (UI) නිර්මාණය කිරීම.