अगर फॉर्म सबमिट किया गया है तो जाँच करना - PHP


122

यह जांचने का सबसे अच्छा तरीका क्या है कि क्या यह निर्धारित करने के लिए कि मुझे अपने सत्यापन वर्ग में फॉर्म के चर पास करने चाहिए या नहीं, प्रस्तुत किया गया है?

पहले मुझे लगा कि शायद:

isset($_POST)

लेकिन यह हमेशा सच हो जाएगा क्योंकि एक सुपरग्लोबल हर जगह परिभाषित किया गया है। मैं अपने फॉर्म के प्रत्येक तत्व के माध्यम से पुनरावृति नहीं करना चाहता:

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

इस प्रश्न को लिखते समय मैंने एक और अधिक बुनियादी समाधान के बारे में सोचा, एक छिपे हुए क्षेत्र को एक ध्वज के रूप में कार्य करने के लिए जोड़ें जिसे मैं जांच सकता हूं।

क्या मेरा अपना झंडा जोड़ने की तुलना में ऐसा करने का एक 'क्लीनर' तरीका है?


4
खैर, आप एक सबमिट बटन बना सकते हैं जिसमें एक विशिष्ट नाम है, जैसे submitedऔर फिर php if(isset($_POST['submited']))या एक छिपे हुए इनपुट का उपयोग करें ...
Max Allan

2
आपको अपने फ़ॉर्म पर पुनरावृत्ति के हमलों को रोकने के लिए एक nounce जोड़ना चाहिए।
हकर्रे

जवाबों:


191

सामान्य जांच के लिए अगर कोई POSTएक्शन उपयोग था:

if (!empty($_POST))

संपादित करें : जैसा कि टिप्पणियों में कहा गया है, यह विधि कुछ मामलों में काम नहीं करेगी (जैसे बिना नाम के चेक बॉक्स और बटन)। आपको वास्तव में उपयोग करना चाहिए:

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


69

दरअसल, सबमिट बटन पहले से ही इस फ़ंक्शन को करता है।

फार्म में प्रयास करें:

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

फिर PHP हैंडलर में:

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'))){जो आपको filter_input का उपयोग करने की आदत में मिलता है
depicus

2
अजाक्स के साथ POST किया जा सकता है, जिसमें कोई सबमिट बटन नहीं होगा, इसलिए यह एक सार्वभौमिक समाधान नहीं है।
मुहम्मद बिन युसरत

यह सच है; यह AJAX द्वारा पोस्ट किए गए किसी भी चर की जांच कर सकता है।
22 दिसंबर को तजशंड

34

उपयोग

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

1
सबसे सरल उपाय। सभी फॉर्म में सबमिट बटन होना चाहिए!
अनह त्रान

1
लेकिन कुछ रूपों में कई बटन हो सकते हैं।
प्रोग्रोक

2
@rilwis कभी-कभी फ़ॉर्म जावास्क्रिप्ट द्वारा प्रस्तुत किए जाते हैं और उन्हें सबमिट बटन की आवश्यकता नहीं होती है
वकास मलिक


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. एक अद्वितीय टोकन बनाएं (आप हैश का उपयोग कर सकते हैं) Ex:

    $token = hash (string $algo , string $data [, bool $raw_output = FALSE ] );
  2. सत्र टोकन के लिए इस टोकन को असाइन करें। उदाहरण के लिए:

    $_SESSION['form_token'] = $token;
  3. टोकन जमा करने के लिए एक छिपा हुआ इनपुट जोड़ें। उदाहरण के लिए:

    input type="hidden" name="token" value="{$token}"
  4. फिर अपनी मान्यता के भाग के रूप में, जाँच लें कि प्रस्तुत टोकन सत्र var से मेल खाता है या नहीं।

    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)निश्चित रूप से यह जांचने का तरीका नहीं है कि क्या फॉर्म जमा किया गया था।
लुकास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.