POST के साथ भेजे गए सभी चर प्राप्त करें?


85

मुझे पोस्ट के साथ भेजे गए सभी चर डालने की आवश्यकता है, वे प्रत्येक उपयोगकर्ता का प्रतिनिधित्व करने वाले चेकबॉक्स थे।

अगर मैं GET का उपयोग करता हूं तो मुझे कुछ ऐसा मिलता है:

?19=on&25=on&30=on

मुझे डेटाबेस में चर डालने की आवश्यकता है।

मुझे POST के साथ भेजे गए सभी चर कैसे प्राप्त होंगे? एक सरणी या मूल्यों के रूप में कोमा या कुछ और के साथ अलग हो गए?


जवाबों:


164

चर $_POSTस्वचालित रूप से आबादी है।

var_dump($_POST);सामग्री देखने का प्रयास करें ।

आप इस तरह अलग-अलग मूल्यों तक पहुँच सकते हैं: echo $_POST["name"];

यह, निश्चित रूप से, आपके प्रपत्र को विशिष्ट रूप एन्कोडिंग का उपयोग कर रहा है (यानी enctype=”multipart/form-data”

यदि आपका पोस्ट डेटा किसी अन्य प्रारूप में है (जैसे JSON या XML, तो आप ऐसा कुछ कर सकते हैं:

$post = file_get_contents('php://input');

और $postइसमें कच्चा डेटा होगा।

मान लें कि आप मानक $_POSTचर का उपयोग कर रहे हैं , तो आप जांच कर सकते हैं कि क्या कोई चेकबॉक्स इस तरह चेक किया गया है:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

यदि आपके पास चेकबॉक्स की एक सरणी है (उदाहरण के लिए)

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

[ ]चेकबॉक्स नाम का उपयोग इंगित करता है कि चयनित मानों को एक स्क्रिप्ट के रूप में PHP स्क्रिप्ट द्वारा एक्सेस किया जाएगा। इस मामले $_POST['myCheckbox']में एक भी स्ट्रिंग नहीं लौटेगी, लेकिन चेकबॉक्स के सभी मूल्यों से मिलकर एक सरणी लौटेगी, जिसे चेक किया गया था।

उदाहरण के लिए, यदि मैंने सभी बॉक्सों की जाँच की, तो $_POST['myCheckbox']इसमें एक सरणी होगी {A, B, C, D, E}:। मूल्यों का सरणी कैसे प्राप्त करें और उन्हें कैसे प्रदर्शित करें, इसका एक उदाहरण यहां दिया गया है:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

2
क्या आप अंत में एक उदाहरण / लिंक जोड़ना चाहते थे?

1
धन्यवाद, मैंने वास्तव में सिर्फ print_r ($ _ POST) की कोशिश की थी और यह सभी समय GET का उपयोग करने के कारण काम नहीं कर रहा था। मेरा बुरा
lisovaccaro

@ लिसो 22 कोई चिंता नहीं! हम सभी को याद है :)
कोड जादूगर

5
$ पोस्ट = file_get_contents ('php: // input'); मेरा समय बचाया। धन्यवाद। हे भगवान, च ** एनजी php ...
नेदुदी

1
100 के लिए Gratz!
एक और

77

आपको उन्हें $_POSTचर से एक्सेस करने में सक्षम होना चाहिए :

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

क्या आप अंत में एक उदाहरण / लिंक जोड़ना चाहते थे?

1
उत्तर के अंत में बृहदान्त्र को देखा।

यह वही है जो पूछा गया था।
लिसेंड्रो

11

इसे हटा दिया जाता है और सीधे सुपरग्लोबल्स तक पहुंचने की इच्छा नहीं की जाती है (क्योंकि php 5.5 मुझे लगता है?)

हर आधुनिक आईडीई आपको बताएगा:

सुपरग्लोब को सीधे एक्सेस न करें। कुछ फ़िल्टर फ़ंक्शंस का उपयोग करें (उदाहरण के लिए filter_input)

हमारे समाधान के लिए, सभी अनुरोध पैरामीटर प्राप्त करने के लिए, हमें विधि का उपयोग करना होगा filter_input_array

इनपुट पद्धति से सभी पैरामेट्स प्राप्त करने के लिए इसका उपयोग करें:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

अब आप इसे var_dumpअपने या foreach-Lops में उपयोग कर सकते हैं

क्या काम नहीं करता है इस विधि के साथ $ _REQUEST सुपरग्लोबल का उपयोग करना है। यह ऑलवेज लौटता है NULLऔर यह सही है।

यदि आपको अलग-अलग तरीकों से शुरू होने वाले सभी इनपुट परम प्राप्त करने की आवश्यकता है, तो उन्हें निम्न विधि की तरह मर्ज करें:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

संपादित करें: इस विधि का विस्तारित संस्करण (अनुरोध के तरीकों के सेट नहीं होने पर भी काम करता है):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

जब आपके सुझाव "$ postArray = ($ tmp = filter_input_array (INPUT_POST)) का उपयोग करने की कोशिश करते समय मुझे घातक त्रुटि मिलती है? $ tmp: Array ()?"। FATAL ERROR लगातार अभिव्यक्ति में लाइन नंबर 5 पर अवैध संचालन शामिल हैं
luckyguy73

@AshtonMorgan i ने इसका परीक्षण किया (कॉपी पेस्ट) और यह ठीक काम करता है। क्या PHP संस्करण यू का उपयोग करें?
मटिज़ियानी

8

तो, $_POSTसरणी की तरह कुछ ?

आप http_build_query($_POST)उन्हें var=xxx&var2=yyyफिर से एक स्ट्रिंग में प्राप्त करने के लिए उपयोग कर सकते हैं । या सिर्फ print_r($_POST)यह देखने के लिए कि वहां क्या है।


6

ऐसा क्यों नहीं है, यह आसान है:

extract($_POST);

4
भयानक विचार जैसा है; विशाल सुरक्षा छेद।
कोई भी

2
यह कोड उनके प्रश्न का पूरी तरह से उत्तर देता है "मुझे POST के साथ भेजे गए सभी चर कैसे प्राप्त होंगे?", जबकि अन्य उत्तर नहीं हैं। और सबसे अच्छा जवाब नीचे चला जाता है, जाओ आंकड़ा। हो सकता है कि सुरक्षा उसके प्रोजेक्ट के लिए कोई मुद्दा न हो। क्या आप यह कह रहे हैं कि php बनाने वालों ने इस फ़ंक्शन का आविष्कार करके एक गलती की है, कि इसका उपयोग कभी नहीं किया जाना चाहिए?
बुदबाहुत

2
@bubbahut बिल्कुल। कोई भी प्रोडक्शन कोड के लिए सभी पोस्ट वेरिएबल नहीं चाहता है।
काउबॉयज

5

इस यू का उपयोग करके सभी पोस्ट वेरिएबल प्राप्त कर सकते हैं

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