ফর্ম জমা দেওয়া হয়েছে কিনা তা যাচাই করা হচ্ছে - পিএইচপি


122

আমাকে ফর্মের ভেরিয়েবলগুলি আমার বৈধতা শ্রেণিতে পাস করতে হবে কিনা তা নির্ধারণের জন্য কোনও ফর্ম জমা দেওয়া হয়েছে কিনা তা যাচাই করার সর্বোত্তম উপায় কী?

প্রথমে আমি ভেবেছিলাম সম্ভবত:

isset($_POST)

সুপারগ্লোবালকে সর্বত্র সংজ্ঞায়িত করা হলেও এটি সর্বদা সত্যই ফিরে আসবে। আমি আমার ফর্মের প্রতিটি উপাদান দিয়ে পুনরাবৃত্তি করতে চাই না:

if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc

এই প্রশ্নটি লিখতে গিয়ে আমি আরও অনেক মৌলিক সমাধানের কথা ভেবেছিলাম, আমি যাচাই করতে পারি এমন পতাকা হিসাবে কাজ করার জন্য একটি লুকানো ক্ষেত্র যুক্ত করুন।

আমার নিজস্ব পতাকা যুক্ত করার চেয়ে কি এটি করার কোনও 'ক্লিনার' উপায় আছে?


4
ঠিক আছে, আপনি একটি সাবমিট বাটন করতে পারেন যার একটি নির্দিষ্ট নাম রয়েছে, submitedএবং তারপরে পিএইচপি if(isset($_POST['submited']))বা কোনও লুকানো ইনপুট ব্যবহার করতে পারেন ...
ম্যাক্স অ্যালান

2
আপনার ফর্মটিতে রিপ্লে আক্রমণ রোধ করতে আপনার একটি ননস যুক্ত করা উচিত।
হ্যাক্রে

উত্তর:


191

কোনও POSTঅ্যাকশন ব্যবহার ছিল কিনা তা সাধারণ পরীক্ষার জন্য:

if (!empty($_POST))

সম্পাদনা : মন্তব্যে বর্ণিত হিসাবে, এই পদ্ধতিটি কিছু ক্ষেত্রে (যেমন নাম ছাড়া চেক বাক্স এবং বোতাম সহ) কাজ করবে না। আপনার সত্যই ব্যবহার করা উচিত:

if ($_SERVER['REQUEST_METHOD'] == 'POST')


69

আসলে, জমা বোতামটি ইতিমধ্যে এই ফাংশনটি সম্পাদন করে।

ফরমে চেষ্টা করুন:

<form method="post">
<input type="submit" name="treasure" value="go!">
</form>

তারপরে পিএইচপি হ্যান্ডলারটিতে:

if (isset($_POST['treasure'])){
echo "treasure will be set if the form has been submitted (to TRUE, I believe)";
}

6
এটা সঠিক উত্তর. কেবল $ _POST এর জন্য পরীক্ষা করা যথেষ্ট ভাল নয় কারণ এটি কেবল একটি ফর্ম পোস্ট থেকে নয়, বিভিন্ন স্থান থেকে তৈরি করা যেতে পারে। ধন্যবাদ জাজান্দ
হিউস্টন

আদর্শভাবে এখন আপনার ব্যবহার করা উচিত if (null !== (filter_input(INPUT_POST, 'macaddress'))){যা আপনাকে ফিল্টার_ইনপুট ব্যবহারের অভ্যাসে পেয়ে যায়
চিত্র

2
পোস্ট অ্যাজাক্স দিয়ে করা যেতে পারে, যার কোনও সাবমিট বাটন থাকবে না, সুতরাং এটি সর্বজনীন সমাধান নয়।
মুহাম্মদ বিন ইউসরাত

সেটা সত্য; এটি এজেএক্স দ্বারা পোস্ট করা কোনও ভেরিয়েবলও পরীক্ষা করতে পারে।
তাজশান্দ

34

ব্যবহার

if(isset($_POST['submit'])) // name of your submit button

1
সহজ সমাধান। সমস্ত ফর্মের একটি জমা বোতাম থাকা উচিত!
আনহ ট্রান

1
তবে কিছু ফর্মের একাধিক বোতাম থাকতে পারে।
অগ্রগতি

2
@ রেলউইসগুলি কখনও কখনও জাভাস্ক্রিপ্ট দ্বারা ফর্ম জমা দেওয়া হয় এবং জমা দেওয়ার বোতাম লাগবে না
ওয়াকাস মালিক


14

এটা চেষ্টা কর

 <form action="" method="POST" id="formaddtask">
      Add Task: <input type="text"name="newtaskname" />
      <input type="submit" value="Submit"/>
 </form>

    //Check if the form is submitted
    if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['newtaskname'])){

    }

2
এই পদ্ধতিটি সর্বাধিক প্রস্তাবিত, কারণ এটি "কোডিং একাডেমি" দ্বারা "সেরা অনুশীলন" হিসাবে স্বীকৃত বলে মনে হয়।
ডার্কডেন

1

অন্য নোটে, আপনার ফর্মটিতে একটি টোকেন যুক্ত করা এবং ডেটা বাইরে থেকে প্রেরণ করা হয়নি কিনা তা যাচাই করার জন্য এটি সর্বদা একটি ভাল অনুশীলন। পদক্ষেপ এখানে:

  1. একটি অনন্য টোকেন তৈরি করুন (আপনি হ্যাশ ব্যবহার করতে পারেন) প্রাক্তন:

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
  2. এই টোকেনটি একটি সেশন ভেরিয়েবলকে বরাদ্দ করুন। উদা:

    $_SESSION['form_token'] = $token;
  3. টোকেন জমা দেওয়ার জন্য একটি লুকানো ইনপুট যুক্ত করুন। উদা:

    input type="hidden" name="token" value="{$token}"
  4. তারপরে আপনার বৈধতার অংশ হিসাবে, জমা দেওয়া টোকেনটি সেশনের সাথে মেলে কিনা তা পরীক্ষা করে দেখুন।

    Ex: if ( $_POST['token'] === $_SESSION['form_token'] ) ....

0

আমার একই সমস্যা ছিল - name=""আপনিও ইনপুট বোতামে যুক্ত করেছেন তা নিশ্চিত করুন। ঠিক আছে, এই ফিক্সটি আমার পক্ষে কাজ করেছিল।

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['add'])){
    echo "stuff is happening now";
}

<input type="submit" name="add" value="Submit">

-6

আপনি এটি ব্যবহার করতে পারেন:

is_array($_POST)

4
is_array($_POST)সর্বদা সত্য দেয় (আমার মেশিনে)। মতে stackoverflow.com/questions/5594020/php-check-if-post-is-array : $_POST is a superglobal array which is always defined, unless somewhere in your code you either unset or overwrite $_POST somehow, এটা .. আশা করা যে এই সবসময় সত্য ফেরৎ বলে মনে হয় তাই
GitaarLAB

is_array($_POST)ফর্মটি জমা দেওয়া হয়েছে কিনা তা অবশ্যই পরীক্ষা করার উপায় নয়।
লুকাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.