পিএইচপি ফর্ম
ফর্ম এর মাধ্যমে তথ্য সংগ্রহের জন্য পিএইচপি সুপার গ্লোবাল ভ্যারিয়েবল $_GET
এবং $_POST
ব্যবহার করা হয়।
পিএইচপিতে সাধারণ এইচটিএমএল ফর্ম
নিচের উদাহরণে তিনটি ইনপুট ফিল্ড এবং একটি সাবমিট বাটনসহ একটি সাধারণ এইচটিএমএল ফর্ম এর উদাহরণ দেখানো হলঃ
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি উদাহরণ</title>
</head>
<body>
<!--তিনটি ইনপুট ফিল্ড বিশিষ্ট একটি এইচটিএমএল ফর্ম-->
<form action="guest_post.php" method="post">
নামঃ < input type="text" name="name">
<br>
ই-মেইলঃ <input type="text" name="email">
<br>
মোবাইলঃ <input type="tel" name="mobile">
<br>
<input type="submit" value="সাবমিট">
</form>
</body>
</html>
যখন কোনো ইউজার উপরের ফর্মটি পূরণ করে সাবমিট বাটনে ক্লিক করে তখন ফর্ম এর ডেটাগুলোকে প্রসেস করার জন্য "guest_post.php" ফাইলের কাছে পাঠানো হয়। এখানে ফর্ম ডেটাকে পোস্ট মেথডের মাধ্যমে পাঠানো হয়েছে।
ফর্ম ডেটাকে প্রদর্শনীর জন্য ভ্যারিয়েবল এর পূর্বে echo
ব্যবহার করা হয়।
"guest_post.php" ফাইলটি দেখতে নিচের মতঃ
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি উদাহরণ</title>
</head>
<body>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// POST মেথডের মাধ্যমে ফর্ম থেকে ইনপুট ফিল্ডের ভ্যালু সংগ্রহ
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$mobile = $_REQUEST['mobile'];
echo $name ." আপনাকে স্বাগতম।
<br> আপনার ই-মেইল এড্রেসঃ " . $email.
"<br> এবং মোবাইল নাম্বারঃ ". $mobile;
}
?>
</body>
</html>
ইনপুট ফিল্ডের ভ্যালুসহ উপরের কোডগুলোর আউটপুট নিচের মত দেখাবেঃ
HTTP GET মেথড ব্যবহার করেও একই ফলাফল পাওয়া যায়।
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি উদাহরণ</title>
</head>
<body>
<!--তিনটি ইনপুট ফিল্ড বিশিষ্ট একটি এইচটিএমএল ফর্ম-->
<form action="guest_get.php" method="get">
নামঃ < input type="text" name="name">
<br>
ই-মেইলঃ <input type="text" name="email">
<br>
মোবাইলঃ <input type="tel" name="mobile">
<br>
<input type="submit" value="সাবমিট">
</form>
</body>
</html>
এবং "guest_get.php" ফাইলটি দেখতে নিচের মতঃ
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি উদাহরণ</title>
</head>
<body>
<?php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
// ফর্ম থেকে ইনপুট ফিল্ডের ভ্যালু সংগ্রহ
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$mobile = $_REQUEST['mobile'];
echo $name ." আপনাকে স্বাগতম।
<br> আপনার ই-মেইল এড্রেসঃ " . $email.
"<br> এবং মোবাইল নাম্বারঃ ". $mobile;
}
?>
</body>
</html>
লক্ষ্য করলে দেখবেন, উপরের কোডগুলো একেবারেই সহজ। কিন্তু এখানে খুবই গুরত্বপূর্ণ একটি বিষয় বাদ পড়েছে সেটা হলো আপনার স্ক্রিপ্টকে খারাপ কোড(malicious code) থেকে রক্ষা করার জন্য ফর্ম ডেটার বৈধতা(validity) চেক করা হয় নি।
পিএইচপি ফর্ম প্রসেস করার সময় সিকিউরিটির কথাও মাথায় রাখতে হবে!
আমাদের এই পেজে ফর্ম ভ্যালিডেশন সম্মন্ধে কিছুই বলা হয় নাই। এইচটিএমএল ফর্ম এর মাধ্যমে কিভাবে তথ্য(data) পাঠানো এবং পুনরুদ্ধার করা যায় এই অধ্যায়ে শুধু তাই দেখানো হয়েছে।
যাইহোক, সিকিউরিটির কথা মাথায় রেখে কিভাবে পিএইচপি ফর্মকে প্রসেস করা হয় তা পরবর্তী অধ্যায়ে দেখানো হয়েছে। হ্যাকার এবং স্পামার থেকে ফর্মকে নিরাপদ রাখার জন্য ফর্ম ডেটার উপযুক্ত ভ্যালিডেশন এর বিকল্প নাই!
GET বনাম POST
GET এবং POST উভয়েই একটি associative array তৈরি করে। যেমন-
array(
key1 => value1,
key2 => value2,
key3 => value3,
...
)
GET এবং POST যেহেতু associative array তাই এই array এর মধ্যে key:value জোড়ায় জোড়ায় থাকে। যেখানে key হচ্ছে ফর্ম এ ব্যবহৃত name এবং value হচ্ছে ইউজার কর্তৃক ইনপুট ডেটা।
GET এবং POST উভয়কেই $_GET
এবং $_POST
হিসাবে বিবেচনা করা হয়। এগুলো সুপার গ্লোবাল হওয়ার কারণে যেকোনো স্কোপ(scope) থেকেই এগুলোকে এক্সেস(access) করা যায়। অর্থাৎ যেকোনো ফাংশন, ক্লাস অথবা ফাইল থেকে কোনো অতিরিক্ত কোড না লিখেই এক্সেস করা যায়।
$_GET
হচ্ছে চলমান স্ক্রিপ্ট এর URL প্যারামিটার এর মাধ্যমে পাঠানো ভ্যারিয়েবলের array।
$_POST
হচ্ছে চলমান স্ক্রিপ্ট এর HTTP POST মেথডের মাধ্যমে পাঠানো ভ্যারিয়েবলের array।
কখন GET ব্যবহার করবেন?
GET মেথডের মাধ্যমে পাঠানো তথ্য সবার কাছেই দৃশ্যমান হয়। অর্থাৎ সকল ভ্যারিয়েবলের name এবং value, URL-এর মধ্যে দেখায়।
GET মেথডের মাধ্যমে তথ্য পাঠানোর ক্ষেত্রে সীমাবদ্ধতাও আছে। GET এর মাধ্যম প্রায় 2000 ক্যারেক্টার পাঠানো যায়।
যাইহোক যেহেতু ভ্যারিয়েবলগুলো URL এর মধ্যে দেখায়, সেহেতু পেজকে বুকমার্ক ও করা যায়। সর্বোপরি কিছু কিছু ক্ষেত্রে এটার উপকারিতাও আছে।
GET এর মাধ্যমে নন-সেনসিটিভ তথ্য পাঠানো হয়।
সতর্কতাঃ পাসওয়ার্ড বা অন্য কোনো সেনসিটিভ তথ্য GET এর মাধ্যমে কখনোই পাঠানো উচিৎ নয়!
কখন POST ব্যবহার করবেন?
POST মেথডের মাধ্যমে পাঠানো তথ্য কারো কাছে দৃশ্যমান হয় না। অর্থাৎ সকল ভ্যারিয়েবলের name এবং value, HTTP request-এর body এর মধ্য দিয়ে সম্প্রসারিত হয় এবং তথ্য পাঠানোর ক্ষেত্রে পরিমাণের উপর কোনো সীমাবদ্ধতা নাই।
সার্ভারে ফাইল আপলোড এর জন্য POST মেথড অতিরিক্ত সুযোগ-সুবিধা দিয়ে থাকে। যেমন- এতে multi-part binary input সাপোর্ট করে।
যাইহোক যেহেতু ভ্যারিয়েবলগুলো URL এর মধ্যে দেখায় না, সেহেতু পেজকে বুকমার্কও করা যায় না।
ডেভেলপাররা POST মেথডকেই বেশি প্রাধান্য দেয়।
পিএইচপি ফর্ম ভ্যালিডেশন
আমরা কেন ফর্ম এর বৈধতা বা ভ্যালিডিটি যাচাই করি? সিকিউরিটির কথা মাথায় রেখেই আমরা মূলত পিএইচপি ফর্ম এর ভ্যালিডিটি যাচাই করি।
সিকিউরিটিকে প্রাধান্য দিয়ে কিভাবে ফর্ম ভ্যালিড করতে হয় এই অধ্যায়ে আমরা স্টেপ বাই স্টেপ দেখবো। হ্যাকার বা স্প্যামার থেকে ফর্মকে রক্ষা করার জন্য উপযুক্ত ফর্ম ভ্যালিডেশন আবশ্যক!
আমরা যে এইচটিএমএল ফর্ম নিয়ে কাজ করবো তার মধ্যে বিভিন্ন ইনপুট ফিল্ড রয়েছেঃ আবশ্যক এবং ঐচ্ছিক টেক্সট ফিল্ড, রেডিও বাটন এবং সাবমিট বাটন।
উপরের ফর্মটি ভ্যালিডেশন করার রুলসগুলো নিম্নরুপঃ
ফিল্ড | ভ্যালিডেশন রুলস |
---|---|
নাম | আবশ্যক। এবং এতে শুধুমাত্র লেটার(letter) এবং whitespace থাকবে। |
ই-মেইল | আবশ্যক। একটি ভ্যালিড ইমেইল হতে হবে (@ এবং . সহ)। |
লিঙ্গ | আবশ্যক। কমপক্ষে একটি ফিল্ড অবশ্যই সিলেক্ট করতে হবে। |
মেসেজ | ঐচ্ছিক। মাল্টি-লাইন ইনপুট ফিল্ড(টেক্সট-এরিয়া)। |
সর্বপ্রথম, আমরা ফর্ম থেকে প্লেইন এইচটিএমএল কোডগুলো লক্ষ্য করবোঃ
টেক্সট ফিল্ড
নাম এবং ই-মেইল হলো টেক্সট ইনপুট এলিমেন্ট এবং মেসেজ হলো টেক্সট-এরিয়া। এই তিনটি ইনপুট ফিল্ডের সমন্বয়ে গঠিত এইচটিএমএল কোডগুলো দেখতে এমনঃ
নামঃ <input type="text" name="name">
ই-মেইলঃ <input type="text" name="email">
মেসেজঃ <textarea name="messege" rows="5" cols="40"></textarea>
রেডিও(Radio) বাটন
লিঙ্গ নির্ধারণ করার ফিল্ডটি হলো রেডিও বাটন এবং এইচটিএমএল কোডগুলো দেখতে এমনঃ
লিঙ্গঃ <input type="radio" name="gender" value="male">পূরুষ
<input type="radio" name="gender" value="female">মহিলা
ফর্ম এলিমেন্ট
ফর্ম এলিমেন্ট দেখতে এমনঃ
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<!--এইচটিএমএল ইনপুট ফিল্ড -->
</form>
যখন ফর্মটি সাবমিট করা হবে, ফর্মের ডাটাগুলো method="post" এর মাধ্যমে পাঠানো হবেঃ
$_SERVER["PHP_SELF"]
ভ্যারিয়েবল কি?$_SERVER["PHP_SELF"]
একটি সুপারগ্লোবাল ভ্যারিয়েবল যা বর্তমানে সম্পাদিত স্ক্রিপ্ট এর নাম রিটার্ন করে। সুতরাং ফর্ম ডেটাকে প্রসেস করার জন্য অন্য পেজে না পাঠিয়ে একই(ফর্মটি যে পেজ থাকে) পেজ থেকে প্রসেস করতে হলে এই ভ্যারিয়েবলটি ব্যবহার করতে হয়।
htmlspecialchars()
ফাংশন কি?htmlspecialchars()
ফাংশনটি বিশেষ বিশেষ ক্যারেক্টারসমূহকে এইচটিএমএল এনটিটি(entity) তে রূপান্তর করে। সুতরাং এটি এইচটিএমএল ক্যারেক্টার যেমন- < এবং > কে যথাক্রমে < এবং > দিয়ে রিপ্লেস করে। এটি হ্যাকার কর্তৃক এইচটিএমএল এবং জাভাস্ক্রিপ্ট কোডের ইনজেকশন (Cross-site Scripting attacks) দ্বারা ফর্ম কোডকে ধ্বংশের হাত থেকে রক্ষা করে।
পিএইচপি ফর্ম সিকিউরিটি
$_SERVER["PHP_SELF"]
ভ্যারিয়েবলটি হ্যাকার কর্তৃক ব্যবহৃত হতে পারে!
আপনি যদি আপনার ওয়েব পেজে PHP_SELF ব্যবহার করে থাকেন তাহলে একজন ইউজার আপনার পেজ লিঙ্কের শেষে একটি স্ল্যাশ(/) এবং এরপরে কিছু Cross Site Scripting(XSS) কমান্ড সম্পাদন করতে পারে।
কম্পিউটারের একটি দুর্বল সিকিউরিটি হচ্ছে Cross-site scripting(XSS) যা সাধারনত ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে দেখা যায়। Cross Site Scripting(XSS) ব্যবহার করে হ্যাকাররা একটি ওয়েব পেজের client-side script ইনজেক্ট করতে সক্ষম হয়।
ধরুন, নিচের ফর্মটি "test_form.php" পেজ রয়েছেঃ
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
এখন যদি একজন ইউজার তার ব্রাউজারের ঠিকানা অংশে সাধারন URL প্রবেশ করায় যেমনঃ "http://www.example.com/test_form.php" তাহলে উপরের কোড নিম্নের কোডে রূপান্তরিত হবেঃ
<form method="post" action="test_form.php">
এখন পর্যন্ত সবই ঠিক আছে।
যাইহোক, ধরুন একজন ইউজার নিম্নের URL টি তার ব্রাউজারের ঠিকানা অংশে প্রবেশ করালোঃ
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
এই অবস্থায় উপরের কোড টুকু নিম্নের কোডে রূপান্তরিত হবেঃ
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
এই কোডটি এলার্ট কমান্ড যুক্ত একটি script ট্যাগ যোগ করবে। আর যখন পেজটি সম্পূর্ণ লোড হবে তখন জাভাস্ক্রিপ্ট কোডটি সম্পাদিত হবে এবং ইউজার একটি সতর্ক বার্তা পাবে। এটি একটি অতি সাধারন এবং ক্ষতি বিহীন উদাহরণ যা আপনাকে বুঝতে সাহায্য করবে কিভাবে PHP_SELF ভ্যারিয়েবলটির অপব্যবহার করা যায়।
সুতরাং সর্বদা সচেতন থাকতে হবে কারন <script> ট্যাগের মধ্যে যে কোনো জাভাস্ক্রিপ্ট কোড লেখা যেতে পারে! উদাহরণ স্বরূপ, একজন হ্যাকার এটি ব্যবহার করে একজন ইউজারকে অন্য সার্ভারে রিডাইরেক্ট করে দিতে পারে এবং ঐ ফাইলটিতে ক্ষতিকারক কোড থাকতে পারে যা গ্লোবাল ভ্যারিয়েবলকে পরিবর্তন করে ফর্মের তথ্য গুলোকে অন্য ঠিকানায় জমা করতে পারে।
কিভাবে $_SERVER["PHP_SELF"] কে নিরাপদ করবেন?
$_SERVER["PHP_SELF"]
কে নিরাপদ করার জন্য htmlspecialchars()
ফাংশনটি ব্যবহার করুন।
ফর্ম কোড নিম্নের মত দেখাবেঃ
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars()
ফাংশনটি বিশেষ ক্যারেকটারসমূহকে এইচটিএমএল এন্টিটিতে রূপান্তর করে। এখন যদি কোনো হ্যাকার PHP_SELF ভ্যারিয়েবলের অপব্যবহার করতে চায়, তাহলে তা নিম্নের মত ফলাফল দেখাবেঃ
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
অপব্যবহারের প্রক্রিয়া ব্যার্থ হয়েছে এবং কোন ক্ষতি সম্পন্ন হয়নি!
পিএইচপি দ্বারা ফর্মের তথ্য যাচাই
প্রথমত, আমরা সকল ভ্যারিয়েবল এর ইনডেক্স ভ্যালু গুলোকে পিএইচপি htmlspecialchars()
ফাংশনের মধ্যে দিয়ে অতিক্রম করাবো।
যখন আমরা htmlspecialchars()
ফাংশনটি ব্যবহার করবো, তখন যদি একজন ইউজার(হ্যাকার) নিম্নের কোড গুলো ফর্মের একটি টেক্স ফিল্ডে লিখে সাবমিট করার চেস্টা করেঃ
<script>location.href('http://www.hacked.com')</script>
- তাহলে কোড সম্পাদিত(execution) হবে না, কারন এটি সংশ্লিষট ভ্যারিয়েবলে নিম্নের মত এইচটিএমএল এনটিটি কোড আকারে জমা হয়ঃ
<script>location.href('http://www.hacked.com')</script>
এখন এই কোড একটি পেইজ বা একটি ই-মেইলের মধ্যে নিরাপদের সাথে প্রর্দশিত হবে।
ইউজার কর্তৃক ফর্ম সাবমিট করার সময় অধিক নিরাপত্তার জন্য আমরা আরো দুটি কাজ করতে পারিঃ
- পিএইচপি
trim()
ফাংশনের মাধ্যমে আমরা ইউজার কর্তৃক ইনপুটকৃত তথ্য থেকে অপ্রয়োজনীয় ক্যারেক্টারসমূহ বাদ দিতে পারি। যেমন- extra space, tab, newline ইত্যাদি। - পিএইচপি
stripslashes()
ফাংশনের মাধ্যমে আমরা ইউজার ইনপুটকৃত তথ্য থেকে ব্যাকস্ল্যাশ(\) গুলোকে সরিয়ে ফেলতে পারি।
পরবর্তী ধাপে আমরা এই ফাংশনগুলোর সমন্বয়ে একটি একক ফাংশন তৈরি করে নিব যার মাধ্যমে আমরা ফর্ম সম্পর্কিত সকল ধরনের যাচাই-বাছাই এক ফাংশন থেকেই করতে পারবো। এটি আমাদের কাজ অনেকটা সহজ করে দিবে এবং একই কোড আর বার বার লিখতে হবে না।
আমরা ফাংশনটির নাম verify_input()
দিলাম।
এখন আমরা প্রতিটি _POST
ভ্যারিয়েবলকে verify_input()
ফাংশন এর মাধ্যমে পরীক্ষা করবো এবং এই কোড নিম্নের ন্যায় দেখাবেঃ
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
// খালি মান সহ ভ্যারিয়েবল গুলো ডিফাইন করি
$name = $email = $gender = $messege = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = verify_input($_POST["name"]);
$email = verify_input($_POST["email"]);
if (isset($_POST["gender"])) {
$gender = verify_input($_POST["gender"]);
}
$messege = verify_input($_POST["messege"]);
}
// ফর্ম এর তথ্য যাচাই
function verify_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>পিএইচপি ফর্ম ভ্যালিডেশন উদাহরণ</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
নামঃ <input type="text" name="name">
<br><br>
ই-মেইলঃ <input type="text" name="email">
<br><br>
লিঙ্গঃ <input type="radio" name="gender" value="male">পুরুষ
<input type="radio" name="gender" value="female">মহিলা
<br><br>
মেসেজঃ <textarea name="messege" rows="5" cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>আপনার ইনপুটকৃত তথ্যঃ</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $gender;
echo "<br>";
echo $messege;
?>
</body>
</html>
উপরের প্রোগ্রামে লক্ষ্য করলে দেখবেন, আমরা প্রোগ্রাম এর শুরুতেই ফর্মটি $_SERVER["REQUEST_METHOD"]
ব্যবহার করে সাবমিট হবে কিনা যাচাই করে নিয়েছি।
যদি REQUEST_METHOD
টি POST
হয় কেবল তখনই ফর্মটি সাবমিট হবে এবং verify_input()
ফাংশনটি সাবমিটেড তথ্যসমূহ যাচাই করবে। আর যদি ফর্মটি সাবমিট না হয় সেক্ষেত্রে যাচাইয়ের পর্বটি এড়িয়ে যায় এবং একটি খালি ফর্ম প্রদর্শিত হবে।
উপরের উদাহরণের সকল ইনপুট ফিল্ড ঐচ্ছিক হওয়ায় ইউজার সকল ইনপুট ফিল্ডে কোন ডেটা ইনপুট না করলেও স্ক্রিপ্টটি সঠিকভাবে কাজ করবে।
পরবর্তী ধাপে আমরা ইনপুট ফিল্ড গুলোকে আবশ্যিক করবো এবং প্রয়োজন অনুসারে এরর মেসেজ তৈরি করবো।
পিএইচপি আবশ্যক(required) ফিল্ড
পূর্বের অধ্যায়ে আমরা ভ্যালিডেশন রুলস টেবিলে দেখেছিলাম "নাম", "ই-মেইল" এবং "লিঙ্গ" আবশ্যক(required) ফিল্ড। এই ফিল্ডগুলো কখনোও খালি রাখা যাবে না। অর্থাৎ এইচটিএমএল ফর্ম এর এই ইনপুট ফিল্ডসমূহ অবশ্যই পূরন করতে হবে।
আমরা আবারো ইনপুট ফিল্ড এবং এদের লেভেল নিচের টেবিলে তুলে ধরলামঃ
ফিল্ড | ভ্যালিডেশন রুলস |
---|---|
নাম | আবশ্যক(required), এই ফিল্ডে শুধুমাত্র অক্ষর এবং স্পেস থাকতে পারবে। |
ই-মেইল | আবশ্যক(required), @ এবং .(ডট) চিহ্ন সহ অবশ্যই ভ্যালিড ইমেইল হতে হবে। |
লিঙ্গ | আবশ্যক(required), অবশ্যই যোকোনো একটি রেডিও বাটন সিলেক্ট করতে হবে। |
মেসেজ | ঐচ্ছিক(optional), অনেক লাইনের ইনপুট ফিল্ড(textarea)। |
পূর্ববর্তী অধ্যায়ে সকল ইনপুট ফিল্ড-ই ঐচ্ছিক (optional) ছিল।
ভ্রান্তিসমূহ(errors) স্টোর এবং প্রদর্শনীর জন্য নিচের পিএইচপি কোড-এ আমরা কিছু নতুন ভ্যারিয়েবল $nameErr, $emailErr এবং $genderErr যোগ করেছি।
এই এরর ভ্যারিয়েবলগুলো যথাক্রমে আবশ্যক ফিল্ডসমূহের জন্য error মেসেজ ধারণ করে। এছাড়া প্রত্যেক $_POST
ভ্যারিয়েবলের জন্য আমরা কন্ডিশনাল if else
স্টেটমেন্টও যোগ করেছি। যার মাধ্যমে আমরা শর্তের উপর ভিত্তিকরে কোড সম্পাদন করতে পারি।
এই কন্ডিশনাল স্টেটমেন্টটি প্রথমেই পিএইচপি empty()
ফাংশন এর মাধ্যমে $_POST
ভ্যারিয়েবল এর ভ্যালু ফাকা কিনা চেক করবে। যদি ফাঁকা হয় তাহলে error মেসেজগুলো শংশ্লিষ্ট error ভ্যারিয়েবল এর মধ্যে জমা হয়।
<?php
// ফাঁকা এরর ভ্যারিয়েবল ডিফাইন
$nameErr = $emailErr = $genderErr = "";
$name = $email = $gender = $messege = "";
// ফর্ম এর ডেটা সংগ্রহ
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ইনপুট ফিল্ডসমূহ ফাঁকা কিনা চেক করে সিদ্ধান্ত নেওয়া
if (empty($_POST["name"])) {
$nameErr = "নাম অবশ্যই পূরন করতে হবে";
} else {
$name = verify_input($_POST["name"]);
}
if (empty($_POST["email"])) {
$emailErr = "ইমেইল অবশ্যই পূরন করতে হবে";
} else {
$email = verify_input($_POST["email"]);
}
if (empty($_POST["gender"])) {
$genderErr = "লিঙ্গ অবশ্যই পূরন করতে হবে";
} else {
$gender = verify_input($_POST["gender"]);
}
if (empty($_POST["messege"])) {
$messege = "";
} else {
$messege = verify_input($_POST["messege"]);
}
}
//ইনপুট ফিল্ডের ভ্যালুসমূহ যাচাই করা।
function verify_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
পিএইচপি Error মেসেজ ব্রাউজারে দেখানো
তারপরে এইচটিএমএল ফর্মের মধ্যে প্রত্যেক আবশ্যক ইনপুট ফিল্ড এর পরে আমরা কিছু অতিরিক্ত কোড লিখেছি। যার মাধ্যমে প্রয়োজন অনুযায়ী সঠিক error মেসেজ দেখানো যায়।
যেমন- যদি কোনো ইউজার ফর্মের আবশ্যক ফিল্ড পূরন না করেই ফর্ম সাবমিট করে তাহলে এই অতিরিক্ত কোডসমূহ তাকে এররে দেখাবেঃ
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি উদাহরণ</title>
</head>
<body>
<h2>পিএইচপি ফর্ম ভ্যালিডেশন উদাহরণ</h2>
//তথ্য ইনপুট দেওয়ার জন্য এইচটিএমএল ফর্ম
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
নামঃ <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
ই-মেইলঃ <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
লিঙ্গঃ <input type="radio" name="gender" value="male">পুরুষ
<input type="radio" name="gender" value="female">মহিলা
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
মেসেজঃ <textarea name="messege" rows="5"cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
এর পরের ধাপে ইনপুট ডাটাকে আরও ভালভাবে ভ্যালিড করা হবে। অর্থাৎ name ফিল্ড-এ শুধুমাত্র অক্ষর এবং স্পেস ইনপুট দিয়েছে কিনা এবং email ফিল্ড এ ই-মেইল এড্রেস এর সঠিক সিনট্যাক্স ব্যবহার করেছে কিনা চেক করা হবে।
পিএইচপি ফর্ম Name এবং Email ভ্যালিডেশন
আমরা দেখবো কিভাবে name এবং e-mail -কে ভ্যালিড করা হয়। সুতরাং এই অধ্যায় শেষে আমরা ইউজারদেরকে এইচটিএমএল ফর্ম এর মাধ্যমে তথ্য ইনপুট দেওয়ার সময় সঠিক ফরম্যাট ব্যবহারে বাধ্য করতে পারবো।
পিএইচপি Name ভ্যালিডেশন
নিম্নের পিএইচপি কোড name ফিন্ড এর value শুধুমাত্র অক্ষর(letter) এবং whitespace কিনা চেক করে। যদি name ফিল্ড এর value ভ্যালিড বা সঠিক ফরম্যাট এর না হয় তাহলে সংশ্লিষ্ট ভ্যারিয়েবলে error মেসেজ স্টোর করে। আমরা echo
ব্যবহার করে স্ব-স্ব ফিল্ডের জন্য আউটপুট নিতে পারি।
$name = verify_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = "শুধুমাত্র অক্ষর(letters) এবং white space ইনপুট দিতে পারেন।";
}
প্যাটার্ন(pattern) অনুযায়ী স্ট্রিং খুঁজে বের করার জন্য preg_match()
ফাংশন ব্যবহার করা হয়। প্যাটার্ন(pattern) বিদ্যমান থাকলে true
রিটার্ন করে, অন্যথায় false
রিটার্ন করে।
পিএইচপি Email ভ্যালিডেশন
ইমেইল এড্রেস এর গঠন সঠিক কিনা যাচাই করার সবচেয়ে সহজ এবং নিরাপদ পদ্ধতি হলো পিএইচপি filter_var()
ফাংশন ব্যবহার করা।
এক্ষেত্রে ইমেইল এড্রেস এর গঠন যদি সঠিক না হয় তাহলে নিম্নের পিএইচপি কোড সংশ্লিষ্ট ভ্যারিয়েবলে error মেসেজ স্টোর বা জমা করেঃ
//Email এড্রেস এঁর গঠন সঠিক কিনা যাচাই এর কোড
$email = verify_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailError = "ইমেইল ফরম্যাট ভ্যালিড নয়";
}
পিএইচপি নাম এবং ইমেইল ভ্যালিডেশন
এখন আমরা একই স্ক্রিপট এর মধ্যে এইচটিএমএল ফর্ম এবং ফর্ম ভ্যালিডেশনের জন্য পিএইচপি কোড লিখবো এবং কোড নিচের মত দেখাবেঃ
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>পিএইচপি ফর্ম ভ্যালিডেশন</title>
</head>
<body>
<!-- এইচটিএমএল ফর্ম ভ্যালিডেশন এর জন্য পিএইচপি স্ক্রিপ্ট -->
<?php
//ফাঁকা ভ্যারিয়েবল ডিক্লেয়ারেশন
$name = $email = $gender = $messege = "";
$nameError = $emailError = $genderError = "";
//ফর্ম মেথড POST কিনা না চেক করে, POST হলে ভ্যালু সংগ্রহ করে।
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// POST ভ্যালু ফাঁকা কিনা চেক করে এরর ম্যাসেজ তৈরি করে
if (empty($_POST["name"])) {
$nameError = "নাম পূরন করা আবশ্যক";
} else {
//ভ্যালু ফাঁকা না হলে ভ্যালিডিটি যাচাই করে
$name = verify_input($_POST["name"]);
// নামের মধ্যে শুধুমাত্র অক্ষর(letter) এবং whitespace রয়েছে কিনা চেক করে
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = "শুধুমাত্র অক্ষর(letters) এবং white space ব্যবহার করুন";
}
}
//একই ভাবে নিচের কোডসমূহ বুঝার জন্য উপরের কমেন্ট লক্ষ্য করুন
if (empty($_POST["email"])) {
$emailError = "ইমেইল পূরন করা আবশ্যক";
} else {
$email = verify_input($_POST["email"]);
// ইমেইলের ফরম্যাট সঠিক আছে কিনা চেক করে
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailError = "ইমেইল ফরম্যাট ভ্যালিড নয়";
}
}
if (empty($_POST["gender"])) {
$genderError = "লিঙ্গ নির্ধারণ আবশ্যক";
} else {
$gender = verify_input($_POST["gender"]);
}
if (empty($_POST["messege"])) {
$messege = "";
} else {
$messege = verify_input($_POST["messege"]);
}
}
//ফর্ম ডেটা ভ্যালিডেশন কোড
function verify_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h1> এইচটিএমএল ফর্ম ভ্যালিডেশন উদাহরণ</h1>
<!-- তথ্য ইনপুট দেওয়ার জন্য এইচটিএমএল ফর্ম -->
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
নামঃ <input type="text" name="name">
<span class="error">* <?php echo $nameError;?></span>
<br><br>
ই-মেইলঃ <input type="text" name="email">
<span class="error">* <?php echo $emailError;?></span>
<br><br>
লিঙ্গঃ <input type="radio" name="gender" value="male">পুরুষ
<input type="radio" name="gender" value="female">মহিলা
<span class="error">* <?php echo $genderError;?></span>
<br><br>
মেসেজঃ <textarea name="messege" rows="5" cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<!-- ফর্ম এর মাধ্যমে ইনপুটকৃত তথ্যের আউটপুট -->
<?php
echo "<h2>আপনার ইনপুটকৃত তথ্যঃ</h2>";
echo $name. "<br>";
echo $email. "<br>";
echo $gender. "<br>";
echo $messege. "<br>";
?>
</body>
</html>
উপরের উদাহরণে ফর্মের মধ্যে কোনো তথ্য ইনপুট না দিয়েও ফর্ম বাটনে মাউস ক্লিক করলে ফর্ম ডেটা সাবমিট হবে।
কিন্তু এইচটিএমএল ফর্ম এর আবশ্যক ইনপুট ফিল্ড ফাকা রাখলে ফর্ম সবমিটে কিভাবে বাধা প্রদান করতে হয় পরবর্তী ধাপে দেখানো হবে।
পিএইচপি সম্পূর্ণ ফর্ম এর উদাহরণ
যদি কোনো ইউজার সম্পূর্ণ ফর্ম পূরণ না করে সাবমিট বাটনে ক্লিক করে তাহলে ফর্ম সাবমিটে কিভাবে বাধা দিতে হয় এবং ইনপুটকৃত তথ্য/তথ্যসমূহ স্ব-স্ব ইনপুট ফিল্ডে কিভাবে জমা রাখতে বা দেখাতে হয়।
পিএইচপির মাধ্যমে ফর্ম এ value জমা রাখা বা দেখানো
ইউজার সাবমিট বাটনে ক্লিক করার পর ইনপুট ফিল্ডের মধ্যে ভ্যালু দেখানোর জন্য name এবং email ইনপুট ফিল্ডের value এট্রিবিউটের মধ্যে আমরা যথাক্রমে খুবই সাধারণ পিএইচপি স্ক্রিপ্ট value="<?php echo $name;?>"
এবং value="<?php echo $email;?>"
যুক্ত করেছি।
মেসেজ টেক্সট-এরিয়া ফিল্ড <textarea>
এবং </textarea>
ট্যাগের মধ্যে <?php echo $messege;?>
স্ক্রিপ্টটি ব্যবহার করেছি।
উপরের এই ছোট ছোট স্ক্রিপ্টসমূহ $name, $email এবং $messege ভ্যারিয়েবলের ভ্যালু নিজ নিজ ইনপুট ফিল্ডে আউটপুট হিসাবে দেখাবে।
তারপর, কোন্ রেডিও বাটনটি check করা হয়েছে এটাও আমাদের দেখানো দরকার। এটার জন্য আমাদেরকে value
এট্রিবিউট এর পরিবর্তে checked
এট্রিবিউটটি ম্যানিপুলেট(manipulate) করতে হবে। যেমন- রেডিও বাটনের এট্রিবিউট gender=="male" এর জন্য পিএইচপি কোড <?php if (isset($gender) && $gender=="male") echo "checked='checked'";?>
নামঃ <input type="text" name="name" value="<?php echo $name;?>">
ই-মেইলঃ <input type="text" name="email" value="<?php echo $email;?>">
লিঙ্গঃ <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male")
echo "checked='checked'";?> value="male">পুরুষ
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female")
echo "checked='checked'";?> value="female">মহিলা
মেসেজঃ <textarea name="messege" rows="5" cols="40"><?php echo $messege;?></textarea>
পিএইচপি সম্পূর্ণ ফর্ম এর উদাহরণ
ফর্ম সাবমিট করার পরে ইনপুট ডেটা সম্পূর্ণ ভ্যালিড না হওয়া পর্যন্ত যেন আউট না দেখায় সেজন্য আমরা একটি শর্তের উপর ভিত্তিকরে ইনপুট এর আউটপুট কোড সম্পাদন করেছি।
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>পিএইচপি উদাহরণ</title>
<style media="screen">
.error{
color: red;
}
</style>
</head>
<body>
<!-- এইচটিএমএল ফর্ম ভ্যালিডেশন এর জন্য পিএইচপি স্ক্রিপ্ট -->
<?php
//ফাঁকা ভ্যারিয়েবল ডিক্লেয়ারেশন
$name = $email = $gender = $messege = "";
$nameError = $emailError = $genderError = "";
$nameOutput = $emailOutput = $genderOutput = $messegeOutput = "";
//ফর্ম মেথড POST কিনা না চেক করে, POST হলে ফর্ম থেকে ভ্যালু সংগ্রহ করে।
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// POST ভ্যালু ফাঁকা কিনা চেক করে এরর ম্যাসেজ তৈরি করে
if (empty($_POST["name"])) {
$nameError = "নাম পূরন করা আবশ্যক";
} else {
//ভ্যালু ফাঁকা না হলে ভ্যালিডিটি যাচাই করে
$name = verify_input($_POST["name"]);
// নামের মধ্যে শুধুমাত্র অক্ষর(letter) এবং whitespace রয়েছে কিনা চেক করে
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = "শুধুমাত্র অক্ষর(letters) এবং white space ব্যবহার করুন";
}
}
//একই ভাবে, নিচের কোডসমূহ বুঝার জন্য উপরের কমেন্ট লক্ষ্য করুন
if (empty($_POST["email"])) {
$emailError = "ইমেইল পূরন করা আবশ্যক";
} else {
$email = verify_input($_POST["email"]);
// ইমেইলের ফরম্যাট ঠিক আছে কিনা তা চেক
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailError = "ইমেইল ফরম্যাট ভ্যালিড নয়";
}
}
if (empty($_POST["gender"])) {
$genderError = "লিঙ্গ নির্ধারণ আবশ্যক";
} else {
$gender = verify_input($_POST["gender"]);
}
if (empty($_POST["messege"])) {
$messege = "";
} else {
$messege = verify_input($_POST["messege"]);
}
// সকল ফিল্ডগুলো সঠিকভাবে ইনপুট হয়েছে কিনা পরিক্ষা করে এবং true হলে ফলাফল রিটার্ন করে
if ($nameError == "" && $emailError == "" && $genderError == "") {
$nameOutput = $name;
$emailOutput = $email;
$genderOutput = $gender;
$messegeOutput = $messege;
}
}
//ফর্ম ডেটা ভ্যালিডেশন কোড
function verify_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!-- এইচটিএমএল অংশ -->
<h2>পিএইচপি ফর্ম ভ্যালিডেশন উদাহরণ</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
নামঃ <input type="text" name="name" value="<?php echo $name;?>"><span class="error">* <?php echo $nameError;?></span>
<br><br>
ই-মেইলঃ <input type="text" name="email" value="<?php echo $email;?>"><span class="error">* <?php echo $emailError;?></span>
<br><br>
লিঙ্গঃ <input type="radio" name="gender"
<?php if (isset($gender) && $gender=="male")
echo "checked";?> value="male">পুরুষ
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="female")
echo "checked";?> value="female">মহিলা<span class="error">* <?php echo $genderError;?></span>
<br><br>
মেসেজঃ <textarea name="messege" rows="5" cols="40">
<?php echo $messege;?></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<!-- ফর্ম এর মাধ্যমে ইনপুটকৃত তথ্যের আউটপুট -->
<?php
echo "<h2>আপনার ইনপুটকৃত তথ্যঃ</h2>";
echo $nameOutput. "<br>";
echo $emailOutput. "<br>";
echo $genderOutput. "<br>";
echo $messegeOutput. "<br>";
?>
</body>
</html>