Thuta Learning
ရှာဖွေရန်
ExercisesProgrammingbeginner

Exercises: Forms, Arrays & Database

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Exercises: Forms, Arrays & Database ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ lesson က Forms, Validation, Arrays, DB Connect/Select/Insert chapter တွေမှာ သင်ခဲ့ပြီးသား skill တွေကို တွဲသုံးအောင် design လုပ်ထားတဲ့ practice ဖြစ်ပါတယ်။ Lesson 1 ထက် တစ်ဆင့်တက်ပြီး logic ရှုပ်ရှုပ်ရှင်းရှင်း၊ input validation, array manipulation, database query ကို တစ်ချက်တည်း ကိုင်တွယ်ရမှာ ဖြစ်ပါတယ်။ task တစ်ခုချင်းစီကို ကိုယ်ပိုင် project folder မှာ ဆောက်ပြီးမှ run စမ်းကြည့်ပါ။ $_SERVER['REQUEST_METHOD'], prepared statement စတာတွေကို မှန်အောင် အသုံးချနိုင်ဖို့ အဓိကထားပါတယ်။

လေ့ကျင့်ခန်းများ

Task 1: name နဲ့ email field ပါတဲ့ HTML form တစ်ခု ဆောက်ပြီး POST လာတဲ့ data ကို empty ဟုတ်မဟုတ်နဲ့ filter_var(FILTER_VALIDATE_EMAIL) နဲ့ validate လုပ်ပါ — error ရှိရင် error message array ကို loop ပြီး ပြပါ။ Task 2: students ဆိုတဲ့ associative array (name => score) list တစ်ခုကို 60 marks အောက်ကျရင် "Fail" ၊ အထက်ဆိုရင် "Pass" ပြန်ပြထုတ်ပေးတဲ့ function ရေးပါ။ Task 3: users table ကနေ prepared statement (mysqli or PDO) သုံးပြီး email column အလိုက် WHERE condition နဲ့ user data တစ်ယောက်ကို ရှာထုတ်ပြီး echo လုပ်ပါ, table မရှိသေးရင် schema (id, name, email) ကို ကိုယ်တိုင် comment အနေနဲ့ ရေးထားရုံနဲ့ လုံလောက်ပါတယ်။

Code နမူနာ

php
<?php
// Task 1
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $errors = [];
    $name = trim($_POST["name"] ?? "");
    $email = trim($_POST["email"] ?? "");

    if ($name === "") $errors[] = "Name is required";
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = "Invalid email";

    foreach ($errors as $err) {
        echo $err . "<br>";
    }
}

// Task 2
$students = ["Su" => 75, "Kyaw" => 45, "Mya" => 88];
function checkResult($students) {
    foreach ($students as $name => $score) {
        $status = ($score < 60) ? "Fail" : "Pass";
        echo $name . ": " . $status . "<br>";
    }
}
checkResult($students);

// Task 3 (schema: users(id, name, email))
$stmt = $conn->prepare("SELECT id, name, email FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo $row["name"] . " - " . $row["email"];
}
?>
You should see
Task 3 ခုစလုံးအောင်မြင်ရင် invalid form ကို submit လုပ်တဲ့အခါ error message list ပေါ်လာမယ်၊ students array က Pass/Fail status list ထုတ်ပေးမယ်၊ email ရှိတဲ့ user ကို database ကနေ ရှာတွေ့ပြီး name/email print ထုတ်ပေးမှာ ဖြစ်ပါတယ်။

၅ မိနစ် စမ်းကြည့်

Task 3 ကို string concatenation ($conn->query()) နဲ့ တိုက်ရိုက်ရေးပြီးမှ prepared statement version ကို comment ချထားလိုက်ကြည့်ပါ — ဘာကြောင့် prepared statement က ပိုစိတ်ချရသလဲဆိုတာကို ကိုယ်တိုင် ချိန်းစစ်ကြည့်ပါ (5 မိနစ်)။

သတိလေးတစ်ချက်

Real project မှာ user input ကို database query string ထဲ တိုက်ရိုက် ဘယ်တော့မှ မထည့်ပါနဲ့ — prepared statement (bind_param) ကိုပဲ အမြဲသုံးပါ၊ ဒီ habit ကို အစကတည်းက မှန်အောင် လေ့ကျင့်ထားရင် production မှာ security bug ဖြစ်ဖို့ အလားအလာ သိသိသာသာ လျော့ပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • $_POST array ထဲက key မရှိလို့ Undefined array key warning တက်တာကို ?? null coalescing operator နဲ့ မကာကွယ်ထားတာ
  • Database query မှာ user input ($email) ကို string ထဲ တိုက်ရိုက် ထည့်ပြီး concatenate လုပ်လိုက်လို့ SQL injection risk ဖြစ်တာ

အခု ကိုယ်တိုင် စမ်းကြည့်

Task 3 ကို string concatenation ($conn->query()) နဲ့ တိုက်ရိုက်ရေးပြီးမှ prepared statement version ကို comment ချထားလိုက်ကြည့်ပါ — ဘာကြောင့် prepared statement က ပိုစိတ်ချရသလဲဆိုတာကို ကိုယ်တိုင် ချိန်းစစ်ကြည့်ပါ (5 မိနစ်)။

You'll know it worked when: Task 3 ခုစလုံးအောင်မြင်ရင် invalid form ကို submit လုပ်တဲ့အခါ error message list ပေါ်လာမယ်၊ students array က Pass/Fail status list ထုတ်ပေးမယ်၊ email ရှိတဲ့ user ကို database ကနေ ရှာတွေ့ပြီး name/email print ထုတ်ပေးမှာ ဖြစ်ပါတယ်။

Exercises: Forms, Arrays & Database | Thuta Learning