ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ 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
// 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"];
}
?>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 ဖြစ်ဖို့ အလားအလာ သိသိသာသာ လျော့ပါတယ်။