जांचें कि क्या $ _POST मौजूद है


100

मैं यह जांचने की कोशिश कर रहा हूं कि क्या $ _POST मौजूद है और यदि ऐसा है, तो इसे दूसरे स्ट्रिंग के अंदर प्रिंट करें, यदि नहीं, तो बिल्कुल प्रिंट न करें।

कुछ इस तरह:

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

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

$newString = fromPerson();

कोई भी मदद बहुत अच्छी रहेगी!

जवाबों:


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

60

सरल। आपके पास दो विकल्प हैं:

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;
}

(या)

2. केवल यह देखें कि पोस्ट डेटा में एक PARTICULAR कुंजी उपलब्ध है या नहीं

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

शि की टिप्पणी के अनुसार ऑगस्टस फ्रांसिस के जवाब पर , empty()है नहीं क्योंकि php में, स्ट्रिंग, विकल्प # 1 के लिए सही '0'करने के बराबर है falseऔर - empty()रिटर्न trueके लिए झूठे के बराबर सभी मूल्यों । इसलिए empty, यदि मान होता तो कोड मुद्रण को छोड़ देता '0'। यदि आप खाली स्ट्रिंग को बाहर करना चाहते हैं, तो अगस्टस उत्तर देखें।
टूलमेकरसैट

33

हर कोई उपयोग करने के लिए कह रहा है () - जो शायद आपके लिए काम करेगा।

हालाँकि, यह महत्वपूर्ण है कि आप इसके बीच के अंतर को समझते हैं

$_POST['x'] = NULL; तथा $_POST['x'] = '';

isset($_POST['x'])falseपहले उदाहरण पर लौटेगा , लेकिन trueदूसरे पर लौटेगा, भले ही आपने दोनों में से किसी एक को प्रिंट करने की कोशिश की हो, दोनों एक रिक्त मान लौटाएंगे।

यदि आपका $_POSTउपयोगकर्ता-इनपुट वाले फ़ील्ड / फ़ॉर्म से आ रहा है और उसे खाली छोड़ दिया गया है, तो मैं BELIEVE (मैं इस पर 100% निश्चित नहीं हूं) हालांकि यह मान "" होगा लेकिन पूरा नहीं है।

यहां तक ​​कि अगर यह धारणा गलत है (कोई व्यक्ति मुझे सही कर रहा है तो मैं गलत हूं!) उपरोक्त अभी भी भविष्य के उपयोग के लिए जानना अच्छा है।


4
खाली () चर अस्तित्व और एक गैर-खाली मान के लिए जाँच करता है, ताकि खाली स्ट्रिंग गलत होने पर उपयोग करने के लिए फ़ंक्शन हो।
हान डेजक

1
@HanDijk - शि की टिप्पणी के अनुसार ऑगस्टस फ्रांसिस के जवाब पर , empty()है सही यहाँ है, क्योंकि php में, स्ट्रिंग '0'के बराबर है falseऔर - empty()रिटर्न trueके लिए झूठे के बराबर सभी मूल्यों । इसलिए empty, यदि मान होता तो कोड मुद्रण को छोड़ देता '0'
टूलमेकरसेव

30

हैरानी की बात यह उल्लेख नहीं किया गया है

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

2
क्यों? यदि सर्वर विधि POST नहीं है, तो POST वैरिएबल सेट नहीं किया जाएगा, इसलिए दूसरी छमाही की आवश्यकता है। क्या मै गलत हु?
टूलमेकरसेव

@ToolmakerSteve ज्यादातर मामलों में हां पर्याप्त है लेकिन हमेशा मेरा जवाब नहीं था कि एक और तरीका दिखाया जाए।
जॉन मैगनोलिया

यह भी काम करेगा यदि आपके पास चेकबॉक्स के साथ एक फॉर्म है और बिना नाम के सबमिट करें।
जॉन मैग्नोलिया

2
ऐसी स्थिति का वर्णन करें , जहां isset($_POST['fromPerson']है true, भले ही if($_SERVER['REQUEST_METHOD'] == 'POST'है false। जब तक ऐसी स्थिति नहीं है, तब तक जो कुछ भी आवश्यक है वह isset...हिस्सा है।
टूलमेकरसेव

सच है, लेकिन यह दूसरा तरीका है। fromPersonमौजूद नहीं हो सकता है, लेकिन POST अभी भी मौजूद हो सकता है। सवाल था, "अगर $ _POST मौजूद है।" और केवल एक उदाहरण में, $ _POST ['fromPerson'] का उपयोग किया जाता है। कुछ स्थितियों में, जैसा कि @goat यहां वर्णन करता है , भले ही fromPersonएक सबमिट नाम था, यह POST में मौजूद नहीं हो सकता है।
पापो


13

सरणी कुंजी मौजूद है, तो जाँच का उचित तरीका फ़ंक्शन है array_key_exists()

अंतर यह है कि जब आपके पास $_POST['variable'] = nullयह है कि इसका मतलब है कि कुंजी मौजूद है और भेजा गया था, लेकिन मूल्य शून्य था

दूसरा विकल्प वह है isset()जो यह जांच करेगा कि क्या सरणी कुंजी मौजूद है और यदि यह सेट किया गया है

अंतिम विकल्प का उपयोग करना है, empty()जो यह जांच करेगा कि क्या सेट होने पर सरणी कुंजी मौजूद है और यदि मान रिक्त नहीं है।

उदाहरण:

$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

आपके प्रश्न के बारे में

यदि मान भेजा गया था, तो यह जांचने का उचित तरीका है कि अनुरोध विधि की जाँच के साथ array_key_exists () का उपयोग किया जाए

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

लेकिन वहाँ कुछ मामलों अपने तर्क पर निर्भर करता है, जहां कर रहे हैं isset()और empty()साथ ही अच्छा हो सकता है।


शानदार जवाब, उपयोग करने के सुझाव को छोड़कर empty। शि की टिप्पणी के अनुसार ऑगस्टस फ्रांसिस के जवाब पर , empty()है नहीं क्योंकि php में, स्ट्रिंग, एक विकल्प के विकल्प के रूप में सही '0'के बराबर है falseऔर - empty()रिटर्न trueके लिए झूठे के बराबर सभी मूल्यों । इसलिए empty, यदि मान होता तो कोड मुद्रण को छोड़ देता '0'। यदि आप खाली स्ट्रिंग को बाहर करना चाहते हैं, तो अगस्टस उत्तर देखें।
टूलमेकरसैट

सबसे अच्छा जवाब +1।
विक्टर जोरास

9
  • उस मामले में विधि issetका उपयोग करना उचित नहीं है।

PHP प्रलेखन के अनुसार: 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();


  • सरणी की उपस्थिति की जाँच $ _POST आवश्यक नहीं है क्योंकि यह 4.1.0 संस्करण (आजकल हम PHP के पुराने संस्करणों को पूरा नहीं करते हैं) के बाद से PHP पर्यावरण वैश्विक चर है।

यह कोड केवल issetपोस्ट फ़ील्ड सेट होने पर समाधान से व्यवहार में भिन्न होता है, लेकिन इसमें NULL होता है। यह एक अच्छा विकल्प है , यदि आप शाखा NULLमें अनुमति देना चाहते हैं elseहालांकि , यह एक गलती है, अगर एक स्ट्रिंग की आवश्यकता है; उस स्थिति issetमें सही काम करता है, लेकिन यह कोड नहीं है - यह NULLमूल्य को पारित करेगा । रॉबर्ट का बाद का जवाब अंतर को दर्शाता है।
टूलमेकरसेव

6

सभी विधियां वास्तव में हतोत्साहित करती हैं, यह Netbeans 7.4 में एक चेतावनी है और यह निश्चित रूप से एक अच्छा तरीका है कि सीधे सुपरग्लोबल चर का उपयोग न करें, इसके बजाय एक फिल्टर का उपयोग करें

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

1
दूसरी ओर, कोड की आवश्यकता भी महत्वपूर्ण है। IMHO, issetएक फ़िल्टर अभिव्यक्ति की तुलना में बहुत अधिक पठनीय है। लेकिन इस ओर इशारा करने के लिए धन्यवाद; यह विचार करने के लिए एक उपयोगी विकल्प है।
टूलमेकरसैट

ठीक है, आप अपने खुद के myIsset / 2 रैपर मेट्रो लिख सकते हैं जो फ़िल्टर का उपयोग करता है लेकिन isset / 2 का व्यवहार है
linuxatico

"सभी विधियां वास्तव में हतोत्साहित की जाती हैं" - यह एक मजबूत कथन है (भले ही NetBeans एक चेतावनी के रूप में चिह्नित करता है)। क्या आपके पास एक आधिकारिक स्रोत का लिंक है , जो $ _POST के प्रत्यक्ष संदर्भों को हतोत्साहित करता है? ( Php के बारे में बहुत कुछ है जो कठोरता के बजाय कोडिंग सुविधा के लिए डिज़ाइन किया गया है - इस प्रश्न के उत्तर में कितने लोग गलत तरीके से उपयोग करते हैं empty, php की ढीली टाइपिंग के द्वारा ट्रिप किए गए हैं; इसकी $ _POST तक पहुँचने की कल्पना करना कठिन है; शैली।)
टूलमेकरसैट

4

प्रयत्न

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

राफेल के जवाब पर हान हैन्ज की टिप्पणी, empty($_POST['fromPerson'])यह संयुक्त परीक्षण करती है। पढ़ने में आसान और टाइप करने के लिए :)
ToolmakerSteve

@ टूलमेकरसइट: empty('0')रिटर्न true। तो यह वही नहीं है।
शि

1
@ शी - हाँ, आप सही हैं; मैंने जो कहा वो गलत है! ऐसा लगता है कि यहां दिखाए गए कोड की तुलना में कोई सरल उपाय नहीं है।
टूलमेकरसैट


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

1
क्या is_array ($ _ POST) जाँच करता है कि क्या POST में कोई मूल्य हैं? अपने एप्लिकेशन में मैं यह निर्धारित करने की कोशिश कर रहा हूं कि कुछ और करने से पहले कोई पोस्ट था या नहीं।
जेफ लाफे

1
मेरा संपादन देखें। is_array()यह जाँचता है कि क्या यह एक सरणी है, दूसरा भाग यह जाँचता है कि इसमें कुंजी के साथ कोई आइटम है या नहीं 'fromPerson'
jezmck

2

if( isset($_POST['fromPerson']) ) सही है।

आप एक फ़ंक्शन का उपयोग कर सकते हैं और वापसी कर सकते हैं, बेहतर फिर गूंज को निर्देशित कर सकते हैं।


2
यह जवाब चर्चा में कुछ भी नहीं जोड़ता है, जो पहले से ही अन्य उत्तरों में नहीं कहा गया था, वर्षों पहले।
टूलमेकरसैट

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, आदि
शि

0

मैं अपना उत्तर जोड़ना चाहूंगा, भले ही यह धागा वर्षों पुराना हो और यह मेरे लिए Google में उच्च स्थान पर है।

मेरी सबसे अच्छी विधि है:

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

जैसा $_POSTकि एक सरणी है, यदि स्क्रिप्ट लोड होती है और कोई डेटा $_POSTचर में मौजूद नहीं है, तो इसकी सरणी लंबाई 0. होगी। इसका उपयोग IF स्टेटमेंट में किया जा सकता है।

आप यह भी सोच रहे होंगे कि क्या यह एक "अपरिभाषित सूचकांक" त्रुटि फेंकता है, जैसे कि हम देख रहे हैं कि $_POSTक्या सेट किया गया है ... वास्तव में $_POSTहमेशा मौजूद है, "अपरिभाषित सूचकांक" त्रुटि केवल तब दिखाई देगी जब आप $ _POST की खोज करने का प्रयास करेंगे सरणी मान मौजूद नहीं है।

$_POSTहमेशा अपने आप में मौजूद रहता है या तो खाली है या सरणी मान है। $_POST['value']इस प्रकार, "अपरिभाषित सूचकांक" त्रुटि को फेंकना मौजूद नहीं हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.