Comment

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

PHP মাল্টিপল চেকবক্স (Multiple checkboxes)

Estimated reading: 4 minutes 11 views Contributors

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

একটি ফর্মে একাধিক চেকবক্স কীভাবে পরিচালনা করবেন

একটি ফর্ম একই নামের একাধিক চেকবক্স থাকতে পারে। আপনি যখন ফর্মটি জমা দেবেন, আপনি একটি নামে সার্ভারে একাধিক মান পাবেন।

চেক করা চেকবক্সগুলি থেকে সমস্ত মান পেতে, আপনাকে চেকবক্সগুলির নামের পরে বর্গাকার বন্ধনী ([]) যোগ করতে হবে।

পিএইচপি যখন ক্ষেত্রের নামের মধ্যে বর্গাকার বন্ধনী ([]) দেখে, তখন এটি মানগুলির একটি সহযোগী অ্যারে তৈরি করবে যেখানে কীটি চেকবক্সের নাম এবং মানগুলি নির্বাচিত মান।

নিম্নলিখিত উদাহরণটি একটি ফর্ম দেখায় যা “লাল”, “সবুজ” এবং “নীল” বিভিন্ন মান সহ একই নামের (রঙ[]) তিনটি চেকবক্স নিয়ে গঠিত।

<form action="index.php" method="post">
	<input type="checkbox" name="colors[]" value="red" id="color_red" />
	<label for="color_red">Red</label>

	<input type="checkbox" name="colors[]" value="green" id="color_green" />
	<label for="color_red">Green</label>

	<input type="checkbox" name="colors[]" value="blue" id="color_blue" />
	<label for="color_red">Blue</label>
        <input type="submit" value="Submit">
</form>

আপনি যখন তিনটি চেকবক্স চেক করবেন এবং ফর্ম জমা দেবেন, তখন $_POST[‘colors’] তিনটি নির্বাচিত মানগুলির একটি অ্যারে থাকবে:

array(3) 
{ 
    [0]=> string(3) "red" 
    [1]=> string(5) "green" 
    [2]=> string(4) "blue" 
}

আপনি যদি কোনো চেকবক্স চেক না করেন এবং ফর্ম জমা না দেন, $_POST অ্যারেতে কালার কী থাকবে না। এবং আপনি $_POST[‘colors’] সেট করা আছে কিনা তা পরীক্ষা করতে isset() ফাংশন ব্যবহার করতে পারেন:

isset($_POST['colors'])

বিকল্পভাবে, আপনি filter_has_var() ফাংশন ব্যবহার করতে পারেন:

filter_has_var(INPUT_POST, 'colors')

পিএইচপি একাধিক চেকবক্স উদাহরণ

আমরা একটি সাধারণ অ্যাপ তৈরি করব যা ব্যবহারকারীদের পিজ্জা টপিং অর্ডার করতে দেয়।

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

.
├── css
│   └── style.css
├── img
│   └── pizza.svg
├── inc
│   ├── .htaccess
│   ├── footer.php
│   ├── functions.php
│   ├── get.php
│   ├── header.php
│   └── post.php
└── index.php
FileDirectoryDescription
index.phpincHTTP অনুরোধ পদ্ধতির উপর নির্ভর করে get.php বা post.php লোড করে এমন প্রধান যুক্তি ধারণ করুন
get.phpincHTTP অনুরোধ GET হলে একটি চেকবক্স সহ একটি ফর্ম দেখানোর জন্য কোডটি ধারণ করুন৷
post.phpincPOST অনুরোধ পরিচালনার জন্য কোড ধারণ করুন
header.phpincহেডারের জন্য কোড ধারণ করুন
footer.phpincফুটারের কোড ধারণ করুন
functions.phpincসাধারণ ফাংশন ধারণ করুন
.htaccessincinc ডিরেক্টরির ফাইলগুলিতে সরাসরি অ্যাক্সেস প্রতিরোধ করুন
style.csscssCSS কোড ধারণ করুন
pizza.svgimgপিৎজার ছবি যা ফর্মে দেখায়

দ্বিতীয়ত, 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="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Nanum+Gothic+Coding:wght@400;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="css/style.css">
    <title>PHP Multiple Checkboxes - Pizza Toppings</title>
</head>

<body class="center">
    <main>
        <p><img src="img/pizza.svg" height="72" width="72" title="Pizza Toppings"></p>

উল্লেখ্য যে পৃষ্ঠাটি Nanum গথিক কোডিং ফন্ট ব্যবহার করে। header.php style.css ফাইলের সাথে লিঙ্ক করে। শরীরের শুরুতে, এটি pizza.svg চিত্রটি দেখায়। তৃতীয়ত, footer.php এ নিম্নলিখিত কোড যোগ করুন:

</main>
</body>
</html>

footer.php ফাইলটিতে header.php ফাইলের খোলার ট্যাগের সাথে সম্পর্কিত ক্লোজিং ট্যাগ রয়েছে। চতুর্থ, functions.php ফাইলে চেক করা একটি ফাংশন সংজ্ঞায়িত করুন:

<?php

session_start();

require 'inc/header.php';

require 'inc/functions.php';

$pizza_toppings = [
	'pepperoni' => 0.5,
	'mushrooms' => 1,
	'onions' => 1.5,
	'sausage' => 2.5,
	'bacon' => 1.0,
];

$request_method = $_SERVER['REQUEST_METHOD'];

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

require 'inc/footer.php';

কিভাবে index.php কাজ করে। index.php একটি সেশন শুরু (বা পুনরায় শুরু) করার জন্য session_start() ফাংশনকে কল করে। এটি header.php, functions.php, এবং footer.php থেকে কোড লোড করে।

$pizza_toppings অ্যারে পিজ্জা টপিং এবং দাম সংরক্ষণ করে। একটি বাস্তব অ্যাপ্লিকেশনে, আপনি এটি একটি ডাটাবেস বা একটি API থেকে পেতে পারেন।

HTTP পদ্ধতি GET হলে, index.php get.php ফাইল থেকে ফর্ম লোড করে। HTTP পদ্ধতিটি POST হলে, এটি post.php ফাইল থেকে কোড লোড করে। ষষ্ঠ, get.php ফাইলে একটি ফর্ম তৈরি করুন:

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post">

    <h1>Please select your pizza toppings:</h1>
    <ul>
        <?php foreach ($pizza_toppings as $topping => $price) : ?>
            <li>
                <div>
                    <input type="checkbox" name="pizza_toppings[]" value="<?php echo $topping ?>" id="pizza_topping_<?php echo $topping ?>" <?php echo checked($topping, $_SESSION['selected_toppings'] ?? []) ?> />
                    <label for="pizza_topping_<?php echo $topping ?>"><?php echo ucfirst($topping) ?></label>
                </div>
                <span><?php echo '$' . $price ?></span>
            </li>
        <?php endforeach ?>
    </ul>

    <button type="submit">Order Now</button>
</form>

get.php ফাইলটি গতিশীলভাবে চেকবক্স তৈরি করতে $pizza_toppings অ্যারে ব্যবহার করে। $_SESSION[‘selected_toppings’] ভেরিয়েবলে মানটি বিদ্যমান থাকলে checked() ফাংশন চেকবক্স চেক করে।

যখন পৃষ্ঠাটি প্রথমবার লোড হয়, তখন $_SESSION[‘selected_toppings’] সবসময় খালি থাকে। পরে, আমরা post.php-এ এটিতে নির্বাচিত মান যোগ করব। অবশেষে, post.php ফাইলে ফর্ম জমা দেওয়ার জন্য কোডটি রাখুন:

<?php

// sanitize the inputs
$selected_toppings = filter_input(
    INPUT_POST,
    'pizza_toppings',
    FILTER_SANITIZE_STRING,
    FILTER_REQUIRE_ARRAY
) ?? [];

// select the topping names
$toppings = array_keys($pizza_toppings);

$_SESSION['selected_toppings'] = []; // for storing selected toppings
$total = 0; // for storing total

// check data against the original values
if ($selected_toppings) {
    foreach ($selected_toppings as $topping) {
        if (in_array($topping, $toppings)) {
            $_SESSION['selected_toppings'][] = $topping;
            $total += $pizza_toppings[$topping];
        }
    }
} ?>
<?php if ($_SESSION['selected_toppings']) : ?>
    <h1>Order Summary</h1>
    <ul>
        <?php foreach ($_SESSION['selected_toppings'] as $topping) : ?>
            <li>
                <span><?php echo ucfirst($topping) ?></span>
                <span><?php echo '$' . $pizza_toppings[$topping] ?></span>
            </li>
        <?php endforeach ?>

        <li class="total"><span>Total</span><span><?php echo '$' . $total ?></span></li>
    </ul>
<?php else : ?>
    <p>You didn't select any pizza toppings.</p>
<?php endif ?>
<menu>
    <a class="btn" href="<?php htmlentities($_SERVER['PHP_SELF']) ?>" title="Back to the form">Change Toppings</a>
</menu>

post.php ফাইলটি filter_input() ফাংশন ব্যবহার করে ফর্ম ইনপুটকে স্যানিটাইজ করে:

// sanitize the inputs
$selected_toppings = filter_input(
	INPUT_POST,
	'pizza_toppings',
	FILTER_SANITIZE_STRING,
	FILTER_REQUIRE_ARRAY
) ?? [];

এটি $pizza_toppings অ্যারের মূল মানের বিপরীতে নির্বাচিত পিজা টপিংগুলি পরীক্ষা করে এবং $_SESSION[‘selected_toppings’] ভেরিয়েবলে নির্বাচিত মানগুলি যোগ করে। এছাড়াও, এটি নির্বাচিত পিজ্জা টপিংসের উপর ভিত্তি করে মোট মূল্য গণনা করে

$toppings = array_keys($pizza_toppings);

$_SESSION['selected_toppings'] = []; // for storing selected toppings
$total = 0; // for storing total

// check data against the original values
if ($selected_toppings) {
	foreach ($selected_toppings as $topping) {
		if (in_array($topping, $toppings)) {
			$_SESSION['selected_toppings'][] = $topping;
			$total += $pizza_toppings[$topping];
		}
	}
}

এক বা একাধিক পিৎজা টপিং নির্বাচন করা হলে মার্কআপ অংশটি অর্ডারের সারাংশ দেখায়।

সারসংক্ষেপ

একটি ফর্মে একই নামের একাধিক চেকবক্স থাকলে চেকবক্স নামের শেষে বর্গাকার বন্ধনী ([]) যোগ করুন। PHP নির্বাচিত চেকবক্সগুলির সংরক্ষিত মানগুলির জন্য একটি সহযোগী অ্যারে তৈরি করে যদি চেকবক্সগুলির একই নাম থাকে যা [] দিয়ে শেষ হয়।

Leave a Comment

Share this Doc

PHP মাল্টিপল চেকবক্স (Multiple checkboxes)

Or copy link

CONTENTS

Subscribe

×
Cancel