Comment

PHP প্রসেসিং ফর্ম (Processing Forms)

PHP ফর্ম (form)

Estimated reading: 6 minutes 19 views Contributors

সারাংশ: এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে HTML ফর্ম কাজ করে এবং কিভাবে PHP-তে ফর্ম ডেটা প্রসেস করতে হয়।

PHP ফর্ম প্রসেসিং এর পরিচিতি ;-

একটি ফর্ম তৈরি করতে, আপনি <form> উপাদান নিম্নরূপ ব্যবহার করুন:

<form action="form.php" method="post">
</form>

 <form>  উপাদান এর দুটি গুরুত্বপূর্ণ এট্টিবিউট রয়েছে:

  • কাজ: URL নির্দিষ্ট করে যা ফর্ম জমা দেওয়ার প্রসেস করে। এই উদাহরণে, form.php ফর্ম কে প্রসেস করবে।
  • পদ্ধতি: ফর্ম জমা দেওয়ার জন্য HTTP মেথড নির্দিষ্ট করে। সবচেয়ে বেশি ব্যবহৃত ফর্ম মেথড হল POST এবং GET। এই উদাহরণে, ফর্ম মেথড হল post.

ফর্ম মেথড কেইস ইন্সেন্সিটিভ, এর মানে হল আপনি post বা POST ব্যবহার করতে পারেন। আপনি যদি মেথড এট্টিবিউট উল্লেখ না করেন, তাহলে ফর্ম উপাদান ডিফল্টভাবে গেট মেথড ব্যবহার করবে।

সাধারণত, একটি ফর্মে টেক্সসহ এক বা একাধিক ইনপুট উপাদান থাকে , password, checkbox, radio button, select, file upload ইত্যাদি থাকে, ইনপুট উপাদান কে প্রায়শই ফর্ম ফিল্ড বলা হয়।

একটি ইনপুট উপাদান এর নিম্নলিখিত গুরুত্বপূর্ণ এট্টিবিউট রয়েছে nametype এবং value. PHP-তে ভেল্যু অ্যাক্সেস করার জন্য name এট্টিবিউট ব্যবহার করা হবে।

HTTP পোস্ট মেথড

যদি কোনো ফর্ম POST মেথড ব্যবহার করে, তাহলে ওয়েব ব্রাউজার HTTP রিকোয়েস্ট বডি তে ফর্ম ডেটা অন্তর্ভুক্ত করবে। ফর্ম জমা দেওয়ার পরে, আপনি PHP-এ  associative array  $_POST-এর মাধ্যমে ফর্ম ডেটা অ্যাক্সেস করতে পারেন।

উদাহরণস্বরূপ, যদি একটি ফর্মে email নামের একটি ইনপুট উপাদান থাকে, তাহলে আপনি PHP-এ $_POST['email'] এর মাধ্যমে ইমেলের ভেল্যু অ্যাক্সেস করতে পারেন। যদি ফর্ম এ কোনও ইমেইল ইনপুট না থাকে, তাহলে ’email’ কী সহ $_POST-এ কোনো উপাদান থাকবে না।

ফর্ম ডেটাতে ইমেইল আছে কিনা তা পরীক্ষা করতে, আপনি isset() ব্যবহার করুন:

<?php

if(isset($_POST['email']) {
    // process email
}

নিম্নলিখিত, একটি ইনপুট উপাদান সহ একটি ফর্ম দেখায়:

<form action="form.php" method="post">
    <div>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" />
    </div>
    <button type="submit">Submit</button>
</form>

form.php ফাইলে, আপনি নিম্নরূপ ইমেইল ভেল্যু অ্যাক্সেস করতে পারেন:

<?php

if (isset($_POST['email'])) {
    var_dump($_POST['email']);
}

HTTP গেট মেথড

আপনি যখন GET মেথড ব্যবহার করে একটি ফর্ম জমা দেন, আপনি PHP-এ associative array $_GET-এর মাধ্যমে ফর্ম ডেটা অ্যাক্সেস করতে পারেন।

POST মেথড এর বিপরীতে, GET মেথড URL-এ ফর্ম ডেটা যুক্ত করে যা ফর্ম কে প্রসেস করে। ধরুন, যে UR L ফর্ম কে প্রসেস করে, তা হল http://localhost/form.php, আপনি যখন hello@phptutorial.net হিসেবে ইমেল লিখবেন এবং একটি ফর্ম জমা দেবেন, তখন আপনি দেখতে পাবেন যে ইমেইল-এর ভেল্যু এইভাবে URL-এর সাথে যুক্ত হয়েছে:

http://localhost/form.php?email=hello%40phptutorial.net

মনে রাখবেন @ URL-এ %40 এনকোডেড করা হয়েছে।

PHP-তে, ফর্ম ডেটাতে ইমেইল আছে কিনা তা পরীক্ষা করতে আপনি isset() ব্যবহার করতে পারেন:

<?php

if(isset($_GET['email']) {
    // process email
}

ফর্ম এ মাল্টিপল অ্যারে ইনপুট থাকলে, ওয়েব ব্রাউজার নিম্নলিখিত ফর্মেট-এ URL-এ ফর্ম ইনপুট অ্যাপেন্ড করবে:

http://localhost/form.php?name1=value1&name2=value2&name3=value3

নিম্নলিখিত একটি ইমেইল ইনপুট আছে যে একই ফর্ম দেখায়. যাইহোক, ফর্ম পরিবর্তে GET মেথড ব্যবহার করে:

<form action="form.php" method="get">
    <div>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" />
    </div>
    <button type="submit">Submit</button>
</form>

এবং নিম্নলিখিত form.php ফাইল দেখায়:

<?php

if (isset($_GET['email'])) {
	var_dump($_GET['email']);
}

মনে রাখবেন যে $_POST এবং $_GET অ্যারে উভয়ই সুপার গ্লোবাল ভেরিয়েবলস্। এর মানে হল যে আপনি স্ক্রিপ্টের যেকোনো জায়গায় তা অ্যাক্সেস করতে পারেন।

HTTP GET or POST

সাধারণভাবে, যখন ফর্মটি শুধুমাত্র সার্ভার থেকে ডেটা উদ্ধার করে তখন GET মেথড ব্যবহার করা উচিত। উদাহরণ স্বরূপ, একটি সার্চ ফর্ম যা ব্যবহারকরীকে তথ্য খোঁজার অনুমতি দেয় সেক্ষেত্রে GET মেথড ব্যবহার করা উচিত।

আপনার কাছে যখন এমন একটি ফর্ম থাকে যা সার্ভারে পরিবর্তন ঘটায়, তখন আপনার POST মেথড ব্যবহার করা উচিত। উদাহরণস্বরূপ, একটি ফর্ম যা ব্যবহারকারীকে একটি নিউজলেটার-এ সাবস্ক্রািইব নেওয়ার অনুমতি দেয় তাকে POST মেথড ব্যবহার করা উচিত।

PHP form example

নিম্নলিখিত index.php এ একটি ফর্ম রয়েছে যা ব্যবহারকারী কে একটি নিউজলেটার-এ সাবস্ক্রািইব নিতে দেয়:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="css/style.css">
    <title>PHP Form Demo</title>
</head>
<body>
    <main>
        <form action="subscribe.php" method="post">
            <div>
                <label for="name">Name:</label>
                <input type="text" name="name" required="required" placeholder="Enter your name" />
            </div>

            <div>
                <label for="name">Email:</label>
                <input type="email" name="email" required="required" placeholder="Enter your email" />
            </div>

            <button type="submit">Subscribe</button>
        </form>
    </main>
</body>
</html>

ফর্মটি POST মেথড ব্যবহার করে এবং subscribe.php পেইজ-এ ডেটা জমা দেয়। এতে টেক্স এবং ইমেইল টাইপ সহ দুটি ইনপুট উপাদান রয়েছে।

সার্ভারে ফর্ম জমা দেওয়ার আগে, ওয়েব ব্রাউজার সঠিক ফর্মেট-এ সমস্ত প্রয়োজনীয় ফিল্ড পূরণ করা হয়েছে কিনা তা চেক করে। এটি ক্লায়েন্ট-সাইড ফর্ম ভেলিডেশন হিসাবে পরিচিত।

ক্লায়েন্ট-সাইডে ডেটা ভেলিডেড করতে, আপনি HTML5 ফর্ম ভেলিডেশন বা জাভাস্ক্রিপ্ট ভেলিডেশন ব্যবহার করতে পারেন। যাইহোক, নিরাপত্তা পরিমাপ হিসেবে আপনার কখনই ক্লায়েন্ট সাইড ভেলিডেশন-এর উপর নির্ভর করা উচিত নয়।

ক্লায়েন্ট সাইড ভেলিডেশন এর উদ্দেশ্য হল বৈধ ব্যবহারকারীদের সঠিক ফর্মেট এ ডেটা প্রবেশ করতে সাহায্য করা। যাইহোক, এটি দূষিত অবৈধ ব্যবাহরকারীদের খারাপ ডাটা প্রবেশ করা থেকে বাধা দেয় না যা অ্যাপ্লিকেশনকে সম্ভাব্য ক্ষতি করে। অতএব, সার্ভার-সাইড বৈধতা বাস্তবায়ন করা বাধ্যতামূলক।

নিম্নলিখিত subscribe.php ফাইলের কোড দেখায়:

<?php

//---------------------------------------------
// WARNING: this doesn't include sanitization
// and validation
//---------------------------------------------
if (isset($_POST['name'], $_POST['email'])) {
	$name = $_POST['name'];
	$email = $_POST['email'];

	// show the $name and $email
	echo "Thanks $name for your subscription.<br>";
	echo "Please confirm it in your inbox of the email $email.";
} else {
	echo 'You need to provide your name and email address.';
}

কিভাবে এটা কাজ করে.

  • প্রথমে, isset() ফাংশন ব্যবহার করে name এবং email, $_POST অ্যারেতে আছে কিনা তা চেক করুন।
  • দ্বিতীয়ত, একটি  thank you message. দেখান।

আপনি যদি জন হিসেবে নাম লিখুন এবং john.doe@example.com হিসেবে ইমেল করেন, তাহলে আপনি subscribe.php পৃষ্ঠায় নিম্নলিখিত বার্তা দেখতে পাবেন:

Thanks John for your subscription. 
Please confirm it in your inbox of the email john.doe@example.comCode language: plaintext (plaintext)

PHP ইস্কেপিং আউটপুট

subscribe.php পৃষ্ঠা সরাসরি ফর্ম ডেটা প্রদর্শন করে। যদি হ্যাকাররা ইচ্ছাকৃতভাবে খারাপ ডেটা প্রবেশ করে, তাহলে পৃষ্ঠা সঠিকভাবে কাজ করবে না।

উদাহরণস্বরূপ, যদি নিচের জাভাস্ক্রিপ্ট কোড নামের ক্ষেত্রে প্রবেশ করানো হয় এবং ফর্ম জমা দেওয়া হয়।

<script>alert('Hello');</script>Code language: HTML, XML (xml)

…আপনি দেখতে পাবেন যে পৃষ্ঠাটি এলার্ট প্রদর্শন করে।

ধরুন স্ক্রিপ্ট কেবল এলার্ট দেখায় না কিন্তু অন্য সার্ভার থেকে ব্যবহারকারীর ওয়েব ব্রাউজারে ক্ষতিকারক কোড লোড করে, সেক্ষেত্রে ঝুঁকি বেশি। এই ধরনের আক্রমণকে ক্রস-সাইট স্ক্রিপ্টিং (XSS) আক্রমণ বলা হয়।

<?php

//---------------------------------------------
// WARNING: this doesn't include sanitization
// and validation
//---------------------------------------------
if (isset($_POST['name'], $_POST['email'])) {
	$name = htmlspecialchars($_POST['name']);
	$email = htmlspecialchars($_POST['email']);

	// show the $name and $email
	echo "Thanks $name for your subscription.<br>";
	echo "Please confirm it in your inbox of the email $email.";
} else {
	echo 'You need to provide your name and email address.';
}
Code language: PHP (php)

নোটঃ পরবর্তী টিউটোরিয়ালে ফর্ম ডেটা কীভাবে স্যানিটাইজ এবং যাচাই করতে হয় তা দেখানো হবে।

PHP সেল্ফ প্রসেসিং ফর্ম

কখনও কখনও, আপনি একটি একক PHP ফাইলে ফর্ম জমা দেওয়ার জন্য ফর্ম এবং লজিক উভয়ই অন্তর্ভুক্ত করতে চান। এই ফর্মকে প্রায়ই স্ব-প্রক্রিয়াকরণ ফর্ম হিসাবে উল্লেখ করা হয়।

একটি স্ব-প্রক্রিয়াকরণ ফর্ম তৈরি করতে, আপনি $_SERVER['REQUEST_METHOD'] ব্যবহার করতে পারেন যা অনুরোধের পদ্ধতি যেমন, GET বা POST প্রদান করে।

যদি $_SERVER['REQUEST_METHOD']  পাওয়া যায়, আপনি ফর্মটি দেখান। এবং যদি $_SERVER['REQUEST_METHOD']  পোস্ট হয়, আপনি এটি প্রক্রিয়া করুন৷ উদাহরণ স্বরূপ:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/style.css">
    <title>PHP Form</title>
</head>
<body>
    <main>
        <?php if ($_SERVER['REQUEST_METHOD'] === 'GET') : ?>
            <form action="<?php htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post">
                <div>
                    <label for="name">Name:</label>
                    <input type="text" name="name" required="required" placeholder="Enter your name" />
                </div>

                <div>
                    <label for="name">Email:</label>
                    <input type="email" name="email" required="required" placeholder="Enter your email" />
                </div>

                <button type="submit">Subscribe</button>

            </form>
        <?php else : ?>

            <?php
            //---------------------------------------------
            // WARNING: this doesn't include sanitization
            // and validation
            //---------------------------------------------
            if (isset($_POST['name'], $_POST['email'])) {
                $name = htmlspecialchars($_POST['name']);
                $email = htmlspecialchars($_POST['email']);

                // show the $name and $email
                echo "Thanks $name for your subscription.<br>";
                echo "Please confirm it in your inbox of the email $email.";
            } else {
                echo 'You need to provide your name and email address.';
            }

            ?>

        <?php endif ?>
    </main>
</body>

</html>Code language: PHP (php)

যাইহোক, PHP এবং HTML মিশ্রিত করা সবসময় এটি ভাল অনুশীলন নয়।

কোডকে আরও সংগঠিত করতে, আপনি নিম্নলিখিত ফাইল এবং ডিরেক্টরি কাঠামো তৈরি করতে পারেন:

.
├── css
│   └── style.css
├── inc
│   ├── header.php
│   ├── footer.php
│   ├── get.php
│   ├── post.php
│   └── .htaccess      
└── index.phpCode language: plaintext (plaintext)

রুট ডিরেক্টরির index.php ফাইল এ header.php এবং footer.php অন্তর্ভুক্ত থাকবে।

যদি অনুরোধের পদ্ধতি GET হয়, তাহলে index.php ফাইল get.php ফাইলে ফর্ম লোড করে। অন্যথায়, এটি POST অনুরোধ প্রক্রিয়া করার জন্য post.php ফাইল থেকে কোড লোড করে।

index.php

নিম্নলিখিত index.php ফাইল দেখায়:

<?php

require __DIR__ . '/inc/header.php';

$request_method = strtoupper($_SERVER['REQUEST_METHOD']);

if ($request_method === 'GET') {
	require __DIR__ . '/inc/get.php';
} elseif ($request_method === 'POST') {
	require __DIR__ .  '/inc/post.php';
}

require __DIR__ .  '/inc/footer.php';
Code language: HTML, XML (xml)

header.php

header.php পৃষ্ঠার প্রথম অংশ ধারণ করে:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/style.css">
    <title>PHP Form</title>
</head>
<body>
    <main>Code language: HTML, XML (xml)

footer.php

footer.php ফাইল এ পেজের এনক্লোজিং ট্যাগ রয়েছে:

</main>
</body>

</html>Code language: HTML, XML (xml)

get.php

get.php ফাইলে ফর্ম থাকে। $_SERVER['PHP_SELF'] বর্তমানে কার্যকর করা স্ক্রিপ্টের ফাইলের নাম ফেরত দেয়।

উদাহরণস্বরূপ, যদি এক্সিকিউটিং স্ক্রিপ্টটি https://www.phptutorial.net/app/form/index.php হয়, তাহলে $_SERVER['PHP_SELF'] /app/form/index.php রিটার্ন করে।

যাইহোক, $_SERVER['PHP_SELF'] এর পর থেকে বিশ্বাস করা যায় না এবং এটি XSS আক্রমণের জন্য ঝুঁকিপূর্ণ। তাই, আপনার সর্বদা htmlspecialchars() ফাংশন ব্যবহার করে এটি এড়িয়ে চলা উচিত।

নিম্নলিখিত get.php ফাইল দেখায়:

<form action="<?php htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post">
    <div>
        <label for="name">Name:</label>
        <input type="text" name="name" placeholder="Enter your name" />
    </div>

    <div>
        <label for="name">Email:</label>
        <input type="email" name="email" placeholder="Enter your email" />
    </div>

    <div>
        <button type="submit">Subscribe</button>
    </div>
</form>Code language: HTML, XML (xml)

post.php

নিম্নলিখিত post.php ফাইল দেখায় যা ফর্ম জমা দেওয়ার কাজ পরিচালনা করে:

<?php

//-----------------------------------------------------
// WARNING: this doesn't include sanitization
// and validation
//-----------------------------------------------------

if (isset($_POST['name'], $_POST['email')) {
	$name = htmlspecialchars($_POST['name']);
	$email = htmlspecialchars($_POST['email']);

	// show the $name and $email
	echo "Thanks $name for your subscription.<br>";
	echo "Please confirm it in your inbox of the email $email.";
} else {
	echo 'You need to provide your name and email address.';
}Code language: PHP (php)

.htaccess

.htaccess ফাইল inc ডিরেক্টরিতে ফাইলগুলিতে সরাসরি অ্যাক্সেসকে বাধা দেয়। এটি শুধুমাত্র অ্যাপাচি ওয়েব সার্ভারের সাথে প্রাসঙ্গিক।

Deny from allCode language: JavaScript (javascript)

.htaccess ফাইল ব্যবহার করে, আপনি inc ফোল্ডার থেকে সরাসরি ফাইল ব্রাউজ করতে পারবেন না। যেমন: https://www.phptutorial.net/app/form/inc/get.php এখানে ফর্মের চূড়ান্ত সংস্করণ।

সারসংক্ষেপ

  • একটি HTML ফর্ম তৈরি করতে <form> ট্যাগ ব্যবহার করুন।
  • অ্যাকশন অ্যাট্রিবিউটে যে URL ফর্ম জমা দেওয়ার প্রক্রিয়া করে তা নির্দিষ্ট করুন।
  • জমা দেওয়ার জন্য ফর্মের মেথড অ্যাট্রিবিউটের জন্য GET বা POST পদ্ধতি ব্যবহার করুন।
  • ফর্ম ডেটা অ্যাক্সেস করতে $_GET বা $_POST ব্যবহার করুন।
  • htmlspecialchars() ফাংশন একটি ওয়েবপেজে দেখানোর আগে ব্যবহারকারীর ইনপুট এড়ানোর জন্য ব্যবহার করুন।

Leave a Comment

Share this Doc

PHP ফর্ম (form)

Or copy link

CONTENTS

Subscribe

×
Cancel