अगर $ _POST की शुरुआत होती है


100

मेरे पास एक पेज पर एक फॉर्म है जो दूसरे पेज पर सबमिट होता है। वहां, यह जांचता है कि इनपुट मेल भरा है या नहीं। अगर ऐसा है तो कुछ करो और अगर नहीं भरा है तो कुछ और करो। मुझे समझ में नहीं आता कि यह हमेशा क्यों कहता है कि यह सेट है, भले ही मैं एक खाली फॉर्म भेजूं। क्या याद आ रही है या गलत है?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}

6
आपके प्रपत्र में मौजूद सभी पाठ-जैसे इनपुट और टेक्सारैस सर्वर पर जमा किए जाएंगे, भले ही उनके मूल्य खाली तार हों।
प्रचार

जवाबों:


223

अधिकांश फॉर्म इनपुट हमेशा सेट होते हैं, भले ही भरे हुए न हों, इसलिए आपको खालीपन की भी जांच करनी चाहिए।

चूंकि !empty()दोनों के लिए पहले से ही जाँच है, आप इसका उपयोग कर सकते हैं:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}

9
यह तुलना तालिका इस php.net/manual/en/types.comparison.php
एक स्टार

2
मामूली बात ... मुझे लगता है कि !इस तरह के मामलों में ऑपरेटर से बचना आसान है (पढ़ने में आसान, त्रुटि की संभावना कम है, आदि) और तर्क को उल्टा कर दें ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

के !emptyबजाय का उपयोग करें isset। isset लौटना सही है $_POSTक्योंकि$_POST सरणी सुपरग्लोबल है और हमेशा मौजूद है (सेट)।

या बेहतर उपयोग $_SERVER['REQUEST_METHOD'] == 'POST'


2
आपको उल्लेख करना चाहिए कि BOTH का उपयोग करें issetऔर !emptyत्रुटि को रोकने के लिए। संपादित करें: वूप्स, यह स्पष्ट रूप से हर दिन लर्निंग फिर रेफरी करता है
टोकी

1
मैंने कोशिश की और दोनों ठीक काम करते हैं। $ _SERVER ['REQUEST_METHOD'] == '' POST 'बेहतर क्यों है? यह वास्तव में क्या करता है? क्या यह एक विशिष्ट इनपुट को संदर्भित करता है या यह फॉर्म के लिए सामान्य है?
एनकेटी

3
$_SERVER['REQUEST_METHOD']उपयोगकर्ता ने फॉर्म जमा कर दिया है। $_POSTइस मामले में भी खाली हो सकता है। इस फ़ॉर्म पर विचार करें: <form method="post"></form>इसे सबमिट करने से कार्रवाई के लिए कुछ भी नहीं भेजा जाएगा, लेकिन अनुरोध प्रकार होगा post। या यह कर्ल के साथ किया जा सकता है curl -X POST http://example.com/processor.php:। यदि प्रोसेसर में कोड जैसा है echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, तो आप देखेंगेPOST true
निमोडेन

5

Php.net से , isset

यदि संस्करण मौजूद है तो TRUE लौटाता है और NULL, FALSE के अलावा अन्य मूल्य है।

खाली जगह को सेट माना जाता है। आपको सभी अशक्त विकल्पों की जाँच के लिए खाली () का उपयोग करने की आवश्यकता है।


2

यदि आप फॉर्म को खाली भेजते हैं, तो $ _POST ['मेल'] अभी भी भेजा जाएगा, लेकिन मूल्य खाली है। यह जाँचने के लिए कि फ़ील्ड खाली है या नहीं, आपको जाँचने की आवश्यकता है

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

मैं कोड पेस्ट करता हूं और मुझे लगता है कि यह काम नहीं करता है? क्या आपने इसकी जाँच की है?
एनकेटी

2

इनपुट टेक्स्ट फॉर्म में निम्नलिखित विशेषता जोड़ें required="required":। यदि फॉर्म नहीं भरा गया है, तो यह उपयोगकर्ता को फॉर्म जमा करने की अनुमति नहीं देगा।

आपका नया कोड होगा:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}

2

आप बस का उपयोग कर सकते हैं:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

वैकल्पिक रूप से, खाली का उपयोग करें ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

PHP प्रकार की तुलना तालिकाओं के अनुसार आप बिल्कुल सही हैं। एक साधारण बूलियन खाली स्ट्रिंग की जांच करने के लिए खाली फ़ंक्शन का काम करता है।
viery365

मुझे पता है कि यह पुराना उत्तर है लेकिन पहली विधि अपरिभाषित सूचकांक सूचना का कारण बन सकती है।
ICE

1
@ यह चर को आसानी से बाईपास किया जा सकता है @, अर्थात: के साथ @$_POST['username']। ध्यान देने के लिए धन्यवाद।
CONvid19

2

के !empty()बजाय का उपयोग करें isset()। क्योंकि isset()आपके मामले में हमेशा सही वापसी होगी।

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

शायद आप यह एक कोशिश कर सकते हैं:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

3
आपको यह बताना चाहिए कि आपका कोड ओपी के प्रश्न का उत्तर क्यों देता है।
मार्कस

1

चलिए सोचते हैं कि यह आपका HTML फॉर्म है step2.php में

step2.php

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

मुझे लगता है कि आपको अपने डेटाबेस के लिए इसकी आवश्यकता है, इसलिए आप अपने HTML फ़ॉर्म मान को php के लिए निर्दिष्ट कर सकते हैं, अब आप रियल एस्केप स्ट्रिंग का उपयोग कर सकते हैं और नीचे आपका होना चाहिए

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

जहाँ $ db आपका डेटाबेस कनेक्शन है।


1

यह देखने के लिए जांचें कि क्या फ़ोरम पहले सबमिट किया गया है, फिर फ़ील्ड। हैकर्स को रोकने के लिए आपको फील्ड को सैनिटाइज भी करना चाहिए।

form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

पोस्ट किए गए प्रश्न का उत्तर देने के लिए: एक साथ शुरुआत करना और खाली करना तीन शर्तें देता है। यह जावास्क्रिप्ट के रूप में एक अजाक्स कमांड के साथ भी इस्तेमाल किया जा सकता है।

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";

0

आप यह कोशिश कर सकते हैं:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

आपको अपना उत्तर समझाने की आवश्यकता है। तो बस सवालों का जवाब नहीं है, लेकिन लोगों को शिक्षित करने के लिए मौजूद है
Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>

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