Comment

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

PHP কন্টাক্ট ফর্ম (Upload multiple files)

Estimated reading: 5 minutes 8 views Contributors

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

PHP পরিচিতি ফর্ম পরিচিতি

একটি কন্টাক্ট ফর্ম একটি ওয়েবসাইটের দর্শকদের বার্তা ছেড়ে অনুমতি দেয়. সাধারণত, একটি কন্টাক্ট ফর্মের নাম, ইমেল, বিষয় এবং বার্তা ইনপুট ক্ষেত্র থাকে।

দর্শকদের এই ক্ষেত্রগুলি পূরণ করতে হবে এবং একটি বার্তা পাঠাতে জমা দিন (বা পাঠান) বোতামে ক্লিক করতে হবে। পিএইচপি-তে, আপনি ফর্ম ডেটা যাচাই করতে পারেন এবং একটি উদ্দেশ্যমূলক ইমেল ঠিকানায় প্রবেশ করা বার্তা পাঠাতে পারেন।

যোগাযোগ ফর্মটি স্প্যামারদের জন্য একটি লক্ষ্য যারা বিজ্ঞাপন, ফিশিং, ম্যালওয়্যার ছড়ানো ইত্যাদির জন্য অযাচিত বার্তা পাঠাতে স্প্যামবট ব্যবহার করে।

একটি স্প্যামবট হল সফ্টওয়্যার যা স্বয়ংক্রিয়ভাবে স্প্যাম ক্রিয়াকলাপগুলিকে স্বয়ংক্রিয়ভাবে পূরণ করে এবং স্বয়ংক্রিয়ভাবে যোগাযোগ ফর্ম জমা দেয়৷

একটি স্প্যাম-মুক্ত কন্টাক্ট ফর্ম তৈরি করতে, আপনি এটিতে একটি ক্যাপচা যোগ করতে পারেন। যাইহোক, কখনও কখনও, ক্যাপচা পড়া অসম্ভব। ফলস্বরূপ, তারা বৈধ ব্যবহারকারীদের জন্য একটি ভয়ানক অভিজ্ঞতা তৈরি করে।

স্প্যাম থেকে পরিচিতি রক্ষা করার সময় একটি ক্যাপচা ব্যবহার এড়াতে, আপনি স্প্যামবটগুলিকে ঠকানোর জন্য একটি honeypot ব্যবহার করতে পারেন৷

হানিপট হল ফর্মের একটি ক্ষেত্র যা দর্শক দেখতে পারে না, কিন্তু স্প্যামবট দেখতে পারে। যখন একটি স্প্যামবট হানিপট ক্ষেত্রটি দেখে, তখন এটি একটি মান দিয়ে ক্ষেত্রটি পূরণ করে। PHP-এ, আপনি হানিপটের মান আছে কিনা তা পরীক্ষা করতে পারেন এবং বার্তা পাঠানো এড়িয়ে যেতে পারেন।

একটি হানিপট তৈরি করতে, আপনার একটি CSS ক্লাস থাকতে হবে যা সম্পূর্ণরূপে হানিপট  ক্ষেত্রকে নিম্নরূপ লুকিয়ে রাখে:

.user-cannot-see {
    display:none
}

এবং ফর্মটিতে আপনার একটি হানিপট  রয়েছে:

<label for="nickname" aria-hidden="true" class="user-cannot-see"> Nickname
    <input type="text" 
           name="nickname" 
           id="nickname" 
           class="user-cannot-see" 
           autocomplete="off" 
           tabindex="-1">
</label>

মনে রাখবেন যে হানিপট এর নামটি বৈধ দেখতে হবে। সম্প্রতি, স্প্যামবটটি আরও স্মার্ট হয়ে উঠেছে যা হানিপট সনাক্ত করতে পারে।

এই স্মার্ট স্প্যামবটগুলির সাথে মোকাবিলা করার জন্য আপনার একটি স্মার্ট হানিপট দরকার৷ উদাহরণস্বরূপ, একটি স্মার্ট হানিপটের প্রতিটি অনুরোধের জন্য আলাদা নাম থাকতে পারে। এছাড়াও, ফর্মে এর অবস্থান এলোমেলোভাবে পরিবর্তিত হয়।

কন্টাক্ট ফর্ম তৈরি করুন

নিম্নলিখিত ছবিতে দেখানো হিসাবে আমরা একটি যোগাযোগ ফর্ম তৈরি করব:

কন্টাক্ট ফর্মটিতে নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  • ফর্ম বৈধতা
  • ইমেলের মাধ্যমে বার্তা পাঠানো হচ্ছে
  • স্প্যাম প্রতিরোধ করুন
  • ডবল জমা প্রতিরোধ

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

├── config
|  └── app.php
├── css
|  └── style.css
├── inc
|  ├── footer.php
|  ├── get.php
|  ├── header.php
|  ├── mail.php
|  └── post.php
└── index.php

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 Contact Form</title>
</head>
<body>
    <main>

footer.php

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

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

get.php

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

<?php if (isset($message)) : ?>
    <div class="alert alert-success">
        <?= $message ?>
    </div>
<?php endif ?>

<form action="index.php" method="post">
    <header>
        <h1>Send Us a Message</h1>
    </header>

    <div>
        <label for="name">Name:</label>
        <input type="text" value="<?= $inputs['name'] ?? '' ?>" name="name" id="name" placeholder="Full name">
        <small><?= $errors['name'] ?? '' ?></small>
    </div>

    <div>
        <label for="email">Email:</label>
        <input type="email" name="email" id="email" value="<?= $inputs['email'] ?? '' ?>" placeholder="Email address">
        <small><?= $errors['email'] ?? '' ?></small>
    </div>

    <div>
        <label for="subject">Subject:</label>
        <input type="subject" name="subject" id="subject" value="<?= $inputs['subject'] ?? '' ?>" placeholder="Enter a subject">
        <small><?= $errors['subject'] ?? '' ?></small>
    </div>

    <div>
        <label for="message">Message:</label>
        <textarea id="message" name="message" rows="5"><?= $inputs['message'] ?? '' ?></textarea>
        <small><?= $errors['message'] ?? '' ?></small>
    </div>

    <label for="nickname" aria-hidden="true" class="user-cannot-see"> Nickname
        <input type="text" name="nickname" id="nickname" class="user-cannot-see" tabindex="-1" autocomplete="off">
    </label>

    <button type="submit">Send Message</button>
</form>

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

প্রথমে, একটি সফল বার্তা প্রদর্শন করুন যদি এটি সেট করা থাকে:

<?php if (isset($message)) : ?>
    <div class="alert alert-success">
        <?= $message ?>
    </div>
<?php endif ?>

দ্বিতীয়ত, $inputs অ্যারে থেকে ডেটা দিয়ে ইনপুট ক্ষেত্রগুলি পূরণ করুন। যদি ক্ষেত্রের অবৈধ ডেটা থাকে, $errors অ্যারে থেকে ত্রুটি বার্তা দেখান।

তৃতীয়, ফর্মটিতে একটি হানিপট যোগ করুন:

<label for="nickname" aria-hidden="true" class="user-cannot-see"> Nickname
    <input type="text" name="nickname" id="nickname" class="user-cannot-see" tabindex="-1" autocomplete="off">
</label>

post.php

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

<?php

// check the honeypot
$honeypot = filter_input(INPUT_POST, 'nickname', FILTER_SANITIZE_STRING);
if ($honeypot) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 405 Method Not Allowed');
    exit;
}

// validate name
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$inputs['name'] = $name;
if (!$name || trim($name) === '') {
    $errors['name'] = 'Please enter your name';
}

// validate email
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$inputs['email'] = $email;
if ($email) {
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
    if (!$email) {
        $errors['email'] = 'Please enter a valid email';
    }
} else {
    $errors['email'] = 'Please enter an email';
}

// validate subject
$subject = filter_input(INPUT_POST, 'subject', FILTER_SANITIZE_STRING);
$inputs['subject'] = $subject;
if (!$subject || trim($subject) === '') {
    $errors['subject'] = 'Please enter the subject';
}

// validate message
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);
$inputs['message'] = $message;
if (!$message || trim($message) === '') {
    $errors['message'] = 'Please enter the message';
}

post.php honeypot চেক করে এবং স্প্যামবট শনাক্ত করলে 405 HTTP স্ট্যাটাস কোড ফেরত দেয়। অন্যথায়, এটি নাম, ইমেল, বিষয় এবং বার্তা সহ ইনপুট ক্ষেত্রগুলিকে স্যানিটাইজ করে এবং যাচাই করে।

config.php

config.php কনফিগারেশন তথ্য সংরক্ষণ করে যেমন, প্রাপকের ইমেল ঠিকানা:

<?php

return [
    'mail' => [
        'to_email' => 'webmaster@phptutorial.net'
    ]
];

mail.php

mail.php to app.php কনফিগারেশন ফাইল থেকে রিসিভারের ইমেল ঠিকানা পায়। এটি mail() ফাংশন ব্যবহার করে পরিচিতি ফর্মে প্রবেশ করা বার্তায় পাঠায়:

<?php

// get email from the config file
$config = require_once __DIR__ . '/../config/app.php';
$recipient_email = $config['mail']['to_email'];

// contact information
$contact_name = $inputs['name'];
$contact_email = $inputs['email'];
$message = $inputs['message'];
$subject = $inputs['subject'];

// Email header
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';
$headers[] = "To: $recipient_email";
$headers[] = "From: $contact_email";
$header = implode('\r\n', $headers);

mail($recipient_email, $subject, $message, $header);

index.php

index.php ফাইলটিতে প্রধান যুক্তি রয়েছে:

<?php

session_start();

$errors = [];
$inputs = [];

$request_method = strtoupper($_SERVER[‘REQUEST_METHOD’]);

if ($request_method === ‘GET’) {

// show the message
if (isset($_SESSION['message'])) {
    $message = $_SESSION['message'];
    unset($_SESSION['message']);
} elseif (isset($_SESSION['inputs']) && isset($_SESSION['errors'])) {
    $errors = $_SESSION['errors'];
    unset($_SESSION['errors']);
    $inputs = $_SESSION['inputs'];
    unset($_SESSION['inputs']);
}
// show the form
require_once __DIR__ . '/inc/get.php';

} elseif ($request_method === ‘POST’) {
// check the honeypot and validate the field
require_once DIR . ‘/inc/post.php’;

if (!$errors) {
    // send an email
    require_once __DIR__ . '/inc/mail.php';
    // set the message
    $_SESSION['message'] =  'Thanks for contacting us! We will be in touch with you shortly.';
} else {
    $_SESSION['errors'] =   $errors;
    $_SESSION['inputs'] =   $inputs;
}

header('Location: index.php', true, 303);
exit;

<?php

session_start();

$errors = [];
$inputs = [];

$request_method = strtoupper($_SERVER[‘REQUEST_METHOD’]);

if ($request_method === ‘GET’) {

// show the message
if (isset($_SESSION['message'])) {
    $message = $_SESSION['message'];
    unset($_SESSION['message']);
} elseif (isset($_SESSION['inputs']) && isset($_SESSION['errors'])) {
    $errors = $_SESSION['errors'];
    unset($_SESSION['errors']);
    $inputs = $_SESSION['inputs'];
    unset($_SESSION['inputs']);
}
// show the form
require_once __DIR__ . '/inc/get.php';

} elseif ($request_method === ‘POST’) {
// check the honeypot and validate the field
require_once DIR . ‘/inc/post.php’;

if (!$errors) {
    // send an email
    require_once __DIR__ . '/inc/mail.php';
    // set the message
    $_SESSION['message'] =  'Thanks for contacting us! We will be in touch with you shortly.';
} else {
    $_SESSION['errors'] =   $errors;
    $_SESSION['inputs'] =   $inputs;
}

header('Location: index.php', true, 303);
exit;
<?php

session_start();

$errors = [];
$inputs = [];

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

if ($request_method === 'GET') {

    // show the message
    if (isset($_SESSION['message'])) {
        $message = $_SESSION['message'];
        unset($_SESSION['message']);
    } elseif (isset($_SESSION['inputs']) && isset($_SESSION['errors'])) {
        $errors = $_SESSION['errors'];
        unset($_SESSION['errors']);
        $inputs = $_SESSION['inputs'];
        unset($_SESSION['inputs']);
    }
    // show the form
    require_once __DIR__ . '/inc/get.php';
} elseif ($request_method === 'POST') {
    // check the honeypot and validate the field
    require_once __DIR__ . '/inc/post.php';

    if (!$errors) {
        // send an email
        require_once __DIR__ . '/inc/mail.php';
        // set the message
        $_SESSION['message'] =  'Thanks for contacting us! We will be in touch with you shortly.';
    } else {
        $_SESSION['errors'] =   $errors;
        $_SESSION['inputs'] =   $inputs;
    }

    header('Location: index.php', true, 303);
    exit;
}

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

প্রথমে, কন্টাক্ট ফর্ম দেখান যদি HTTP অনুরোধ পদ্ধতিটি GET হয়। এছাড়াও, $_SESSION থেকে $message, $errors এবং $inputs ডেটা পান।

দ্বিতীয়ত, এইচটিটিপি রিকোয়েস্ট পদ্ধতি POST হলে ফর্ম জমা দেওয়ার কাজটি পরিচালনা করুন, কোনো ত্রুটি না থাকলে একটি ইমেল পাঠান এবং কন্টাক্ট ফর্মে পুনঃনির্দেশ করুন৷ মনে রাখবেন যে ডাবল জমা দেওয়ার সমস্যা এড়াতে আমরা PRG (পোস্ট-রিডাইরেক্ট-গেট) কৌশল ব্যবহার করি।

Leave a Comment

Share this Doc

PHP কন্টাক্ট ফর্ম (Upload multiple files)

Or copy link

CONTENTS

Subscribe

×
Cancel