Check _POST বিদ্যমান কিনা তা পরীক্ষা করুন


101

আমি একটি _P _POST উপস্থিত আছে কিনা তা যাচাই করার চেষ্টা করছি এবং এটি যদি হয় তবে এটিকে অন্য স্ট্রিংয়ের মধ্যে মুদ্রণ করুন, যদি না হয় তবে একেবারেই মুদ্রণ করবেন না।

এটার মতো কিছু:

$fromPerson = '+from%3A'.$_POST['fromPerson'];

function fromPerson() {
    if !($_POST['fromPerson']) {
        print ''
    } else {
        print $fromPerson
    };
}

$newString = fromPerson();

যেকোনো সাহায্যই অসাধারণ!

উত্তর:



63

সরল। আপনার দুটি পছন্দ আছে:

1. পরীক্ষা করুন যে কোনও পোস্ট ডেটা আছে কি না

//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
    // handle post data
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

(বা)

২. পোস্ট ডেটাতে কোনও পার্টিকুলার কী উপলব্ধ কিনা তা কেবলমাত্র পরীক্ষা করে দেখুন

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

শি এর মন্তব্য অনুযায়ী অগাস্টাস ফ্রান্সিস এর উত্তরে , empty()হয় না কারণ পিএইচপি, স্ট্রিং, পছন্দ # 1 জন্য সঠিক '0'সমতূল্য falseএবং - empty()আয় trueজন্য মিথ্যা সমতূল্য সব মান । সুতরাং ব্যবহার করে empty, কোডটি যদি মান হয় তবে প্রিন্টিং এড়িয়ে যাবে '0'। আপনি যদি খালি স্ট্রিংটি বাদ দিতে চান তবে অগাস্টাসের উত্তর দেখুন।
স্টিভ

34

প্রত্যেকে isset () ব্যবহার করতে বলছে - যা সম্ভবত আপনার পক্ষে কাজ করবে।

তবে এটির মধ্যে পার্থক্যটি বোঝা গুরুত্বপূর্ণ

$_POST['x'] = NULL; এবং $_POST['x'] = '';

isset($_POST['x'])ফিরে আসবে falseপ্রথম উদাহরণ, কিন্তু ফিরে আসবে trueদ্বিতীয় এক যদিও আপনি হয় এক মুদ্রণ করতে চেষ্টা করেছি, উভয় একটি ফাঁকা মান ফিরে আসবে।

যদি আপনার $_POSTকোনও ব্যবহারকারী-ইনপুটযুক্ত ক্ষেত্র / ফর্ম থেকে আসে এবং ফাঁকা ছেড়ে যায় তবে আমি বিশ্বাস করি (যদিও আমি এটি সম্পর্কে 100% নিশ্চিত নই) মানটি হবে তবে "" নাল নয়।

এমনকি যদি এই অনুমানটি ভুল হয় (কেউ যদি ভুল হয় তবে দয়া করে আমাকে সংশোধন করুন!) ভবিষ্যতের ব্যবহারের জন্য উপরেরগুলি এখনও জেনে রাখা ভাল।


4
খালি () পরিবর্তনশীল অস্তিত্ব এবং একটি খালি শূন্য মান যাচাই করে, যাতে খালি স্ট্রিংটি মিথ্যা ফিরতে হবে তখন এটি ব্যবহার করতে হবে।
হান ডিজক

4
@HanDijk - শি এর মন্তব্য অনুযায়ী অগাস্টাস ফ্রান্সিস এর উত্তরে , empty()হয় না সঠিক এখানে, কারণ পিএইচপি, স্ট্রিং '0'সমতূল্য falseএবং - empty()আয় trueজন্য মিথ্যা সমতূল্য সব মান । সুতরাং ব্যবহার করে empty, কোডটি যদি মান হয় তবে প্রিন্টিং এড়িয়ে যাবে '0'
নির্মাতা

30

অবাক হওয়ার বিষয়টি উল্লেখ করা হয়নি

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){

4
কেন? যদি সার্ভার পদ্ধতিটি পোস্ট না করা হয়, তবে পোষ্ট ভেরিয়েবল সেট করা হবে না, তাই দ্বিতীয়ার্ধে যা দরকার তা হল। আমি কি ভূল?
টুলমেকারস্টেভ

@ টুলমেকারস্টেভ হ্যাঁ বেশিরভাগ ক্ষেত্রেই যথেষ্ট যেটি কিন্তু যথেষ্ট নয় তবে আমার উত্তরটি অন্যভাবে করা যেতে পারে show
জন ম্যাগনোলিয়া

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

4
একটি অবস্থা যেখানে বর্ণনা কর isset($_POST['fromPerson']হয় true, যদিও if($_SERVER['REQUEST_METHOD'] == 'POST'হয় false। যদি এ জাতীয় পরিস্থিতি না ঘটে, তবে যা প্রয়োজন তা হ'ল isset...অংশ।
টুলমেকারস্টেভ

সত্য, তবে এটি অন্যভাবে। fromPersonউপস্থিত নাও থাকতে পারে, তবে পোস্ট এখনও উপস্থিত থাকতে পারে। প্রশ্নটি ছিল, "যদি $ _POST বিদ্যমান থাকে।" এবং কেবলমাত্র একটি উদাহরণে, $ _POST ['থেকে পার্সন'] ব্যবহার করা হয়। কিছু পরিস্থিতিতে, যেমন @ বোট এখানে বর্ণনা করে , এমনকি যদি fromPersonএকটি জমা দেওয়ার নামও ছিল, এটি পোস্টে উপস্থিত নাও হতে পারে।
পাপো


13

অ্যারে কী উপস্থিত আছে কিনা তা যাচাই করার সঠিক পদ্ধতি is array_key_exists()

পার্থক্যটি হ'ল যখন আপনার কাছে $_POST['variable'] = nullএটির অর্থ কী উপস্থিত থাকে এবং প্রেরণ করা হত তবে মানটি শূন্য ছিল

অন্য বিকল্পটি isset()যা অ্যারে কী উপস্থিত রয়েছে এবং সেটি সেট করা আছে কিনা তা যাচাই করবে

সর্বশেষ বিকল্পটি ব্যবহার করা হয় empty()যা সেট করা থাকলে অ্যারে কী উপস্থিত আছে কিনা এবং যদি মানটি শূন্য না বিবেচনা করা হয় তা যাচাই করবে use

উদাহরণ:

$arr = [
  'a' => null,
  'b' => '',
  'c' => 1
];

array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true


array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true


array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false

আপনার প্রশ্ন সম্পর্কে

মান প্রেরণ করা হয়েছে কিনা তা যাচাই করার সঠিক উপায় হ'ল অনুরোধ পদ্ধতির চেক সহ অ্যারে_কি_এক্সিস্টগুলি () ব্যবহার করা

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}

কিন্তু কিছু কিছু ক্ষেত্রে আপনার যুক্তিবিজ্ঞান উপর নির্ভর করে কোথায় আছেন isset()এবং empty()পাশাপাশি ভাল হতে পারে।


ব্যবহারের পরামর্শ ব্যতীত চমত্কার উত্তর empty। শি এর মন্তব্য অনুযায়ী অগাস্টাস ফ্রান্সিস এর উত্তরে , empty()হয় না , কারণ পিএইচপি, স্ট্রিং একটি বিকল্প পছন্দ অনুযায়ী সঠিক '0'সমতূল্য false- এবং empty()আয়true জন্য মিথ্যা সমতূল্য সব মান । সুতরাং ব্যবহার করে empty, কোডটি যদি মান হয় তবে প্রিন্টিং এড়িয়ে যাবে '0'। আপনি যদি খালি স্ট্রিংটি বাদ দিতে চান তবে অগাস্টাসের উত্তর দেখুন।
নির্মাতা

সেরা উত্তর +1।
ভিক্টর জোরাস

9
  • সেক্ষেত্রে পদ্ধতি ব্যবহার করা issetউপযুক্ত নয়।

পিএইচপি ডকুমেন্টেশন মতে: http://php.net/manual/en/function.array-key-exists.php
(দেখুন উদাহরণ # 2 array_key_exists () বনাম isset () )
পদ্ধতি array_key_existsঅ্যারের মধ্যে মূল উপস্থিতি চেক করার জন্য উদ্দীষ্ট।

সুতরাং প্রশ্নের কোডটি নিম্নলিখিত হিসাবে পরিবর্তন করা যেতে পারে:

function fromPerson() {
   if (array_key_exists('fromPerson', $_POST) == FALSE) {
        return '';
   } else {
        return '+from%3A'.$_POST['fromPerson'];
   };
}

$newString = fromPerson();


  • অ্যারের উপস্থিতি _P _POST পরীক্ষা করা প্রয়োজনীয় নয় কারণ এটি পিএইচপি পরিবেশগত বৈশ্বিক পরিবর্তনশীল সংস্করণ ৪.১.০ থেকে (আজকাল আমরা পিএইচপি-র পুরানো সংস্করণগুলি পূরণ করি না)।

এই issetক্ষেত্রটি পোস্ট ক্ষেত্রটি সেট করা থাকলে সমাধান থেকে আচরণে পৃথক হয় তবে এতে NUL থাকে। এই হল ভাল বিকল্প , যদি আপনি অনুমতি দিতে চান NULLমধ্যে elseশাখা। তবে এটি একটি ভুল, যদি একটি স্ট্রিং প্রয়োজন হয়; এই পরিস্থিতিতে issetসঠিক জিনিসটি করে, তবে এই কোডটি করে না - এটি NULLমানটি পাস করবে । রবার্টের পরবর্তী উত্তর পার্থক্যটি দেখায়।
স্টিভ

6

সমস্ত পদ্ধতি আসলে নিরুৎসাহিত করা হয়, এটি নেটবিয়ান 7.৪ এ একটি সতর্কবার্তা এবং সরাসরি সুপারগ্লোবাল ভেরিয়েবলগুলি অ্যাক্সেস না করা, পরিবর্তে একটি ফিল্টার ব্যবহার করা ভাল অভ্যাস is

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);

4
অন্যদিকে, কোডের পুনঃনির্ধারণতাও গুরুত্বপূর্ণ। আইএমএইচও, issetফিল্টার এক্সপ্রেশনের চেয়ে অনেক বেশি পঠনযোগ্য। তবে এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ; এটি বিবেচনা করার জন্য একটি দরকারী বিকল্প।
টুলমেকারস্টেভ

ভাল, আপনি নিজের নিজস্ব আইসেট / 2 র‌্যাপার মেটোড লিখতে পারেন যা ফিল্টার ব্যবহার করে তবে সেটটি / 2 এর আচরণ রয়েছে
লিনাক্স্যাটিকো

"সমস্ত পদ্ধতি আসলে নিরুৎসাহিত করা হয়" - এটি একটি শক্ত বক্তব্য (এমনকি নেটবিয়ান একটি সতর্কতা হিসাবে চিহ্নিত করে)) আপনার কি কোনও অনুমোদিত উত্সের কোনও লিঙ্ক রয়েছে , যা direct _POST এর প্রত্যক্ষ রেফারেন্সকে নিরুৎসাহিত করে ? (ক নেই অনেক এই প্রশ্ন ভুল ব্যবহারের উত্তর কতজন লোক তাকান - পিএইচপি সম্পর্কে যে বরং কাঠিন্য চেয়ে সুবিধার কোডিং জন্য ডিজাইন করা হয়েছেempty , পিএইচপি এর আলগা টাইপিং দ্বারা আপ হোঁচট খেয়েছি, তার কঠিন কল্পনা করা অ্যাক্সেস $ _POST দরিদ্র বিবেচিত হবে যে শৈলী।)
স্টিভ

5

চেষ্টা করুন

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}

রাফেলের উত্তরে পের হান ডিজকের মন্তব্য, empty($_POST['fromPerson'])এই সম্মিলিত পরীক্ষাটি করে। পড়তে এবং টাইপ করা সহজ :)
টুলমেকারস্টেভ

@ টুলমেকারস্টেভ: empty('0')প্রত্যাবর্তন true। সুতরাং এটি এক নয়।
শি

4
@ শি - হ্যাঁ, আপনি ঠিক বলেছেন; আমি যা বলেছি তা ভুল! মনে হচ্ছে এখানে প্রদর্শিত কোডের চেয়ে সহজ সমাধান নেই।
স্টিভ


3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}

4
পোস্ট_এর কোনও মান আছে কিনা তা কি_সরে ($ _ পোষ্ট) চেক করে? আমার অ্যাপে আমি নির্ধারণ করার চেষ্টা করছি যে অন্য কিছু করার আগে কোনও পোস্ট ছিল কিনা।
জেফ লাফে

4
আমার সম্পাদনা দেখুন। is_array()এটি অ্যারে রয়েছে কিনা তা পরীক্ষা করে, দ্বিতীয় অংশে এটি কী সহ কোনও আইটেম রয়েছে কিনা তা যাচাই করে 'fromPerson'
jezmck

2

if( isset($_POST['fromPerson']) ) সঠিক.

আপনি একটি ফাংশন ব্যবহার করতে পারেন এবং ফিরে আসতে পারেন, আরও ভাল তারপর ইকো পরিচালনা করে।


4
এই উত্তরটি আলোচনায় কিছুই জুড়ে না, যা অন্যান্য উত্তরগুলিতে ইতিমধ্যে বলা হয়নি, বছরগুলি আগে।
স্টিভ

1

আমি এটি পরীক্ষা করতে চাই এবং এটি কোনও টার্নারি অপারেটরে খালি কিনা।

// POST variable check
$userID  = (isset( $_POST['userID'] )    && !empty( $_POST['userID'] ))   ? $_POST['userID']   :  null;
$line    = (isset( $_POST['line'] )      && !empty( $_POST['line'] ))     ? $_POST['line']     :  null;
$message = (isset( $_POST['message'] )   && !empty( $_POST['message'] ))  ? $_POST['message']  :  null;
$source  = (isset( $_POST['source'] )    && !empty( $_POST['source'] ))   ? $_POST['source']   :  null;
$version = (isset( $_POST['version'] )   && !empty( $_POST['version'] ))  ? $_POST['version']  :  null;
$release = (isset( $_POST['release'] )   && !empty( $_POST['release'] ))  ? $_POST['release']  :  null;

5
empty('0')হয় true। সুতরাং ভাল নেই version 0, অথবা userID 0ইত্যাদি
শি

1

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

আমার সেরা পদ্ধতিটি চেষ্টা করা:

if(sizeof($_POST) !== 0){
// Code...
}

হিসাবে $_POSTএকটি অ্যারের, যদি স্ক্রিপ্ট লোড এবং কোন তথ্য উপস্থিত$_POST পরিবর্তনশীল এটা 0. এই একটি অ্যারের দৈর্ঘ্য একটি If Statement ব্যবহার করা যেতে পারে হবে।

আপনিও ভাবতে পারেন যে এটি যদি কোনও "অপরিবর্তিত সূচক" ত্রুটিটি এমনভাবে দেখায় যে $_POSTআমরা সেট করা আছে কিনা তা পরীক্ষা করে দেখছি ... আসলে$_POST সর্বদা উপস্থিত রয়েছে, আপনি যদি you _POST অনুসন্ধান করার চেষ্টা করেন তবে "অপরিজ্ঞাত সূচক" ত্রুটিটি কেবল তখনই উপস্থিত হয় অ্যারে মান যা বিদ্যমান নেই।

$_POSTসর্বদা হয় খালি থাকার মধ্যে থাকে বা অ্যারের মান থাকে। $_POST['value']অস্তিত্ব থাকতে পারে, এইভাবে একটি "অপরিজ্ঞাত সূচক" ত্রুটি ছুঁড়ে ফেলা হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.