PHP සහ MySQL: සම්පූර්ණ CRUD නිබන්ධනය

ස්ථිතික (Static) වෙබ් පිටු වලින් ඔබ්බට ගොස්, දත්ත සමුදායක් සමඟ ගනුදෙනු කරන ගතික (Dynamic) වෙබ් යෙදුමක් නිර්මාණය කිරීමට ඉගෙන ගනිමු.

ඔබ HTML සහ PHP වල මූලික කරුණු ඉගෙන ගෙන ඇත්නම්, ඔබගේ මීළඟ සහ වඩාත්ම වැදගත් පියවර වන්නේ වෙබ් යෙදුමක් දත්ත සමුදායක් (Database) සමඟ සම්බන්ධ කරන ආකාරය ඉගෙන ගැනීමයි. ලෝකයේ ඇති සෑම ගතික වෙබ් යෙදුමක්ම පාහේ (Facebook, Google, E-commerce අඩවි) මෙම මූලධර්මය මත ක්‍රියාත්මක වේ. දත්ත සමුදායක් සමඟ ගනුදෙනු කිරීමේදී අප සිදු කරන මූලිකම මෙහෙයුම් හතර **CRUD** ලෙස හැඳින්වේ.

CRUD යනු කුමක්ද?

CRUD යනු දත්ත සමුදායක දත්ත කළමනාකරණය කිරීමේදී සිදු කරන මූලික මෙහෙයුම් හතරේ Anfangsbuchstaben වේ.

මෙම නිබන්ධනයෙන්, අපි මෙම CRUD මෙහෙයුම් හතරම ක්‍රියාත්මක වන සරල **"ශිෂ්‍ය කළමනාකරණ පද්ධතියක්" (Student Management System)** මුල සිටම PHP සහ MySQL භාවිතා කර නිර්මාණය කරමු. මෙම පාඩම අවසානයේදී, ඔබට ඕනෑම දත්ත-පදනම් වූ වෙබ් යෙදුමක අත්තිවාරම ස්වාධීනව ගොඩනැගීමට අවශ්‍ය දැනුම සහ විශ්වාසය ලැබෙනු ඇත.

පූර්ව අවශ්‍යතා: HTML forms සහ PHP variables පිළිබඳ මූලික දැනුම. ඔබගේ පරිගණකයේ XAMPP හෝ WAMP වැනි local server environment එකක් ස්ථාපනය කර තිබීම.


1 වන කොටස: අත්තිවාරම සකස් කිරීම (The Foundation) 🏗️

කේත ලිවීමට පෙර, අපගේ දත්ත ගබඩා කිරීමට අවශ්‍ය දත්ත සමුදාය සහ ව්‍යාපෘති ගොනු ව්‍යුහය සකසා ගනිමු.

1.1 දත්ත සමුදාය සහ වගුව නිර්මාණය කිරීම

  1. ඔබගේ XAMPP Control Panel එකෙන් Apache සහ MySQL සේවාදායකයන් (servers) පණ ගන්වන්න (Start).
  2. ඔබගේ වෙබ් බ්‍රව්සරයෙන් `http://localhost/phpmyadmin` වෙත පිවිසෙන්න.
  3. `New` ක්ලික් කර, `crud_app` නමින් නව දත්ත සමුදායක් (database) නිර්මාණය කරන්න.
  4. එම දත්ත සමුදාය තෝරා, පහත SQL විධානය `SQL` ටැබ් එකේ ඇතුළත් කර `Go` ක්ලික් කරන්න. මෙමගින් අපගේ ශිෂ්‍ය තොරතුරු ගබඩා කිරීමට `students` නමින් වගුවක් නිර්මාණය වේ.
    CREATE TABLE students (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        grade VARCHAR(50) NOT NULL
    );
    

මෙහි `id` යනු සෑම ශිෂ්‍යයෙකුටම හිමිවන, ස්වයංක්‍රීයව වැඩිවන, අනන්‍ය හඳුනාගැනීමේ අංකයයි (Primary Key).

1.2 දත්ත සමුදා සම්බන්ධතා ගොනුව (`db.php`)

අපගේ සියලුම PHP ගොනු වලට දත්ත සමුදාය සමඟ සම්බන්ධ වීමට අවශ්‍ය වේ. එම සම්බන්ධතා කේතය නැවත නැවත ලිවීම වෙනුවට, එය එක් ගොනුවක ලියා, අවශ්‍ය සෑම තැනකදීම එය `include` කර ගැනීම හොඳ පුරුද්දකි.

<?php
// Database connection parameters
$hostname = "localhost";
$username = "root";
$password = ""; // XAMPP හි සාමාන්‍යයෙන් password එකක් නොමැත
$database = "crud_app";

// Create a database connection
$connection = mysqli_connect($hostname, $username, $password, $database);

// Check if the connection was successful
if (!$connection) {
    die("Database connection failed: " . mysqli_connect_error());
}
?>

මෙම ගොනුව, අපගේ යෙදුම සහ MySQL දත්ත සමුදාය අතර පාලමක් ලෙස ක්‍රියා කරයි.


2 වන කොටස: 'R' for Read - දත්ත පෙන්වීම (Displaying Data) 📄

අපගේ CRUD යෙදුමේ පළමු සහ මූලිකම කොටස වන්නේ, දත්ත සමුදායේ ඇති සියලුම ශිෂ්‍යයන්ගේ තොරතුරු වගුවක පෙන්වීමයි. මේ සඳහා අපි `index.php` ගොනුව නිර්මාණය කරමු.

`php-crud` ෆෝල්ඩරය තුළ, `index.php` නමින් නව ගොනුවක් සාදා පහත කේතය ඇතුළත් කරන්න.

<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
    <title>Student Management System</title>
</head>
<body>
    <h1>Student List</h1>
    <a href="create.php">Add New Student</a>
    <br><br>
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Grade</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <?php
            // SQL query to fetch all students
            $sql = "SELECT * FROM students";
            $result = mysqli_query($connection, $sql);

            if (mysqli_num_rows($result) > 0) {
                // Loop through each row of data
                while ($row = mysqli_fetch_assoc($result)) {
                    echo "<tr>";
                    echo "<td>" . $row['id'] . "</td>";
                    echo "<td>" . $row['name'] . "</td>";
                    echo "<td>" . $row['grade'] . "</td>";
                    echo "<td>";
                    echo "<a href='edit.php?id=" . $row['id'] . "'>Edit</a> | ";
                    echo "<a href='delete.php?id=" . $row['id'] . "' onclick=\"return confirm('Are you sure you want to delete this record?');\">Delete</a>";
                    echo "</td>";
                    echo "</tr>";
                }
            } else {
                echo "<tr><td colspan='4'>No students found</td></tr>";
            }
            ?>
        </tbody>
    </table>
</body>
</html>
<?php mysqli_close($connection); ?>

කේතය විග්‍රහ කරමු:


3 වන කොටස: 'C' for Create - නව දත්ත ඇතුළත් කිරීම (Adding Data) ➕

දැන් අපි පරිශීලකයාට නව ශිෂ්‍යයෙකුගේ තොරතුරු ඇතුළත් කිරීමට HTML form එකක් සහ එම දත්ත දත්ත සමුදායට යවන PHP කේතයක් ලියමු. `create.php` නමින් නව ගොනුවක් සාදන්න.

<?php
include 'db.php';

// Check if the form is submitted
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Get form data and sanitize it to prevent SQL injection
    $name = mysqli_real_escape_string($connection, $_POST['name']);
    $grade = mysqli_real_escape_string($connection, $_POST['grade']);

    // SQL query to insert data
    $sql = "INSERT INTO students (name, grade) VALUES ('$name', '$grade')";

    if (mysqli_query($connection, $sql)) {
        // Redirect to the main page after successful insertion
        header("Location: index.php");
        exit();
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($connection);
    }
}
mysqli_close($connection);
?>

<!DOCTYPE html>
<html>
<head>
    <title>Add New Student</title>
</head>
<body>
    <h1>Add New Student</h1>
    <form method="POST" action="create.php">
        Name: <input type="text" name="name" required><br><br>
        Grade: <input type="text" name="grade" required><br><br>
        <input type="submit" value="Add Student">
    </form>
    <br>
    <a href="index.php">Back to Student List</a>
</body>
</html>
ආරක්ෂාව පළමුව! - SQL Injection
`mysqli_real_escape_string()` ශ්‍රිතය භාවිතා කර ඇත්තේ පරිශීලකයා ඇතුළත් කරන දත්ත "පිරිසිදු" කිරීමටය. මෙය නොකළහොත්, ද්වේශ සහගත පරිශීලකයෙකුට ඔබගේ SQL query එක වෙනස් කර, දත්ත සමුදායට හානි කළ හැකි ප්‍රහාරයක් (SQL Injection) එල්ල කළ හැක. පරිශීලක ආදානයක් සහිත ඕනෑම query එකක් සඳහා මෙය භාවිතා කිරීම අනිවාර්ය වේ.

4 වන කොටස: 'U' for Update - දත්ත සංස්කරණය (Editing Data) ✏️

දත්ත සංස්කරණය කිරීම පියවර දෙකක ක්‍රියාවලියකි: (1) තෝරාගත් ශිෂ්‍යයාගේ දැනට පවතින දත්ත form එකක පෙන්වීම, (2) පරිශීලකයා කරන වෙනස්කම් submit කළ පසු, දත්ත සමුදාය යාවත්කාලීන කිරීම. `edit.php` නමින් නව ගොනුවක් සාදන්න.

<?php
include 'db.php';

// Handle the POST request for updating the record
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $id = $_POST['id'];
    $name = mysqli_real_escape_string($connection, $_POST['name']);
    $grade = mysqli_real_escape_string($connection, $_POST['grade']);
    
    $sql = "UPDATE students SET name='$name', grade='$grade' WHERE id=$id";
    
    if (mysqli_query($connection, $sql)) {
        header("Location: index.php");
        exit();
    } else {
        echo "Error updating record: " . mysqli_error($connection);
    }
}

// Get the student's current data to show in the form
$id = $_GET['id'];
$sql = "SELECT * FROM students WHERE id=$id";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($result);
?>

<!DOCTYPE html>
<html>
<head>
    <title>Edit Student</title>
</head>
<body>
    <h1>Edit Student Record</h1>
    <form method="POST" action="edit.php">
        <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
        Name: <input type="text" name="name" value="<?php echo $row['name']; ?>" required><br><br>
        Grade: <input type="text" name="grade" value="<?php echo $row['grade']; ?>" required><br><br>
        <input type="submit" value="Update Record">
    </form>
    <br>
    <a href="index.php">Back to Student List</a>
</body>
</html>

මෙහිදී සිදුවන්නේ:


5 වන කොටස: 'D' for Delete - දත්ත ඉවත් කිරීම (Deleting Data) ❌

මෙය CRUD මෙහෙයුම් වලින් සරලම එකකි. `delete.php` නමින් නව ගොනුවක් සාදන්න.

<?php
include 'db.php';

// Get the ID from the URL
if (isset($_GET['id'])) {
    $id = $_GET['id'];
    
    // SQL query to delete a record
    $sql = "DELETE FROM students WHERE id=$id";
    
    if (mysqli_query($connection, $sql)) {
        // Redirect back to the main page
        header("Location: index.php");
        exit();
    } else {
        echo "Error deleting record: " . mysqli_error($connection);
    }
}
mysqli_close($connection);
?>

පරිශීලකයෙක් `index.php` හි ඇති Delete link එකක් ක්ලික් කළ විට, මෙම `delete.php` ගොනුව ක්‍රියාත්මක වී, URL එකෙන් අදාළ `id` එක ලබාගෙන, එම වාර්තාව දත්ත සමුදායෙන් ඉවත් කර, නැවත ප්‍රධාන පිටුවට යොමු කරයි. `index.php` හි ඇති JavaScript `confirm()` ශ්‍රිතය, වැරදීමකින් වාර්තා මැකී යාම වැළැක්වීමට උපකාරී වේ.


සාරාංශය (Conclusion) ✨

සුබ පැතුම්! ඔබ PHP සහ MySQL භාවිතා කර, සම්පූර්ණ CRUD ක්‍රියාකාරීත්වයෙන් යුත්, දත්ත-පදනම් වූ වෙබ් යෙදුමක් සාර්ථකව නිර්මාණය කර අවසන්. මෙය වෙබ් සංවර්ධනයේ ඉතාම මූලික සහ අත්‍යවශ්‍ය කුසලතාවයකි. ඔබ දැන් දන්නවා:

මෙම ව්‍යාපෘතිය ඔබගේ අනාගත, වඩාත් සංකීර්ණ වෙබ් යෙදුම් සඳහා ශක්තිමත් අත්තිවාරමක් වනු ඇත. ඔබට මෙයට CSS එකතු කර අලංකාර කිරීමට, වලංගුකරණ (validation) නීති එකතු කිරීමට, සහ සෙවුම් (search) ක්‍රියාකාරීත්වයක් එක් කිරීමට උත්සාහ කළ හැක.

ඊළඟට කුමක්ද? Server-side rendering වලින් ඔබ්බට ගොස්, ඉතා වේගවත්, අන්තර්ක්‍රියාකාරී, නවීන පරිශීලක අතුරුමුහුණත් (User Interfaces) නිර්මාණය කිරීමට භාවිතා කරන, JavaScript library එකක් වන **React** පිළිබඳව අපගේ මීළඟ නිබන්ධනයෙන් ඉගෙන ගනිමු!