PHP में POST के माध्यम से एक ही नाम के साथ कई इनपुट


119

क्या पोस्ट से एक ही नाम के कई इनपुट प्राप्त करना और फिर उन्हें PHP से एक्सेस करना संभव है? यह विचार यह है: मेरे पास एक फॉर्म है जो अन्य सूचनाओं के साथ अनिश्चित संख्या में भौतिक पतों के प्रवेश की अनुमति देता है। अगर मैंने बस उन क्षेत्रों में से प्रत्येक को कई प्रविष्टियों में एक ही नाम दिया है और उस डेटा को पोस्ट के माध्यम से प्रस्तुत किया है, तो क्या PHP इसे एक्सेस कर पाएगा?

उदाहरण के लिए, मेरे पास "xyz" नामक एक पृष्ठ पर पाँच इनपुट हैं और मैं PHP का उपयोग करके उन्हें एक्सेस करना चाहता हूं। क्या मैं कुछ ऐसा कर सकता हूं:

    $_POST['xyz'][0]

यदि ऐसा है, तो यह मेरे जीवन को दस गुना आसान बना देगा, क्योंकि मैं एक फार्म के माध्यम से अनिश्चित मात्रा में जानकारी भेज सकता हूं और इसे सर्वर द्वारा "xyz" नाम के साथ आइटम के सरणी के माध्यम से लूप करके संसाधित किया जा सकता है।

जवाबों:


216

अपने इनपुट के नाम बदलें:

<input name="xyz[]" value="Lorem" />
<input name="xyz[]" value="ipsum"  />
<input name="xyz[]" value="dolor" />
<input name="xyz[]" value="sit" />
<input name="xyz[]" value="amet" />

फिर:

$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'

यदि ऐसा है, तो यह मेरे जीवन को दस गुना आसान बना देगा, क्योंकि मैं एक फार्म के माध्यम से अनिश्चित मात्रा में जानकारी भेज सकता हूं और इसे सर्वर द्वारा "xyz" नाम के साथ आइटम के सरणी के माध्यम से लूप करके संसाधित किया जा सकता है।

ध्यान दें कि यह संभवतः गलत समाधान है। जाहिर है, यह आपके द्वारा भेजे जा रहे डेटा पर निर्भर करता है।


सहायता के लिए धन्यवाद। चूंकि यह मेरे प्रश्न का सबसे पूर्ण उत्तर है, इसलिए मैं इसे उत्तर के रूप में चुनता हूं। हालाँकि, Interstellar_coder से इसका उत्तर भी अच्छा है, लेकिन आपने समझाया है कि यदि गलत तरीके से उपयोग किया जाता है तो यह संभावित रूप से नुकसानदेह हो सकता है। मैं अधिकतम मदों को सीमित करूंगा और मैं इस फॉर्म पर बहुत अधिक सत्यापन करूंगा, इसलिए मुझे किसी भी सुरक्षा मुद्दों पर नहीं चलना चाहिए जब तक कि इस दृष्टिकोण में निहित मुद्दे नहीं हैं जिन्हें यहां समझाया नहीं गया है।
एडम

10
@ एडडम: अपने प्रश्न को फिर से पढ़ना, यह एक पूरी तरह से प्रशंसनीय दृष्टिकोण है। आप एक स्तर आगे जाने के लिए, और है चाहते हो सकता है address[0][street] address[0][city] address[0][zip], address[1][street] address[1][city] address[1][zip]... आप के साथ इन पढ़ सकते हैं $_POST['address'][0]['city'], उदाहरण के लिए
एरिक

फिर इसे HTML के अंदर कैसे नाम दिया जाएगा? यह संभावित रूप से काफी हद तक कठिनाई को कम करेगा। जिस दृष्टिकोण को मैं लेने जा रहा हूं, उसमें कई क्षेत्र हैं, जैसे: l1 [], l2 [], शहर [], राज्य [], ज़िप [], zip4 []। फिर, पहले पते के लिए, मैं बस प्रत्येक क्षेत्र में $ i == 0 का उपयोग करता हूं। इसलिए अगर मैं आपके दृष्टिकोण को सही ढंग से समझूं, तो मैं शायद अपने तत्वों को इस तरह नाम दूंगा: नाम = "पता [] [शहर]" शहर के मैदान के लिए। क्या वो सही है?
एडम

@ अदम: संभवतः। मुझे लगता है कि आपको सूचकांक को पहले के अंदर रखने की आवश्यकता हो सकती है [], जैसे कि [0]। यह HTML को उत्पन्न करने के लिए कठिन बनाता है, लेकिन
Eric

यहाँ मेरे दिमाग में आ रहा सवाल यह है कि क्या क्षेत्र सरणी के अंदर यादृच्छिक क्रम में जाएगा? या क्या वे उस क्रम में होंगे जिसमें उन्हें फॉर्म में रखा गया है (भले ही कुछ फ़ील्ड खाली छोड़ दिए गए हों)?
राजीव

38

अपने html में आप नाम के लिए एक सरणी में पास कर सकते हैं

<input type="text" name="address[]" /> 

इस तरह से php को पतों की एक सरणी प्राप्त होगी।


3
अच्छा और सही जवाब, यही वजह है कि मैंने इसे वोट किया। आपने हालांकि इसके बारे में ज्यादा नहीं बताया, यही वजह है कि मैंने इसे अपने प्रश्न के उत्तर के रूप में नहीं चुना। यह मुझे एक टन में मदद करता है, जैसा कि मैं इसे एक बार पता लगाने की कोशिश कर रहा हूं (जैसा कि आप मेरे पिछले प्रश्नों में से एक में देख सकते हैं)। मेरा पिछला तरीका केवल अलग-अलग मूल्यों के साथ छिपे हुए क्षेत्रों में सभी इनपुट को जोड़ना था। अलग-अलग मूल्यों और इनपुट फ़ील्ड को रीसेट करना, लेकिन यह दृष्टिकोण दस गुना बेहतर है क्योंकि मैं पहले जोड़े गए पतों को हटाने की अनुमति दूंगा यदि यह पता चला कि वे गलत।
एडम

बस यह याद रखने के लिए सावधान रहें कि एक खाली सरणी में 1 की गिनती होगी जिसमें '0' इंडेक्स पर कुछ भी नहीं है। आपको 'खाली' कीवर्ड का उपयोग करके जांच करनी होगी कि क्या ((? खाली नाम)) {// कुछ करें}
Fi Horan

10

एरिक जवाब सही है, लेकिन समस्या यह है कि खेतों को समूहीकृत नहीं किया गया है। कल्पना कीजिए कि आपके पास कई गलियाँ और शहर हैं जो एक साथ हैं:

<h1>First Address</h1>
<input name="street[]" value="Hauptstr" />
<input name="city[]" value="Berlin"  />

<h2>Second Address</h2>
<input name="street[]" value="Wallstreet" />
<input name="city[]" value="New York" />

परिणाम होगा

$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'], 
          'city' => [ 'Berlin' , 'New York'] ];

उन्हें पते के आधार पर समूहित करने के लिए, मैं एरिक द्वारा टिप्पणी अनुभाग में बताई गई बातों का उपयोग करने की सलाह दूंगा:

<h1>First Address</h1>
<input name="address[1][street]" value="Hauptstr" />
<input name="address[1][city]" value="Berlin"  />

<h2>Second Address</h2>
<input name="address[2][street]" value="Wallstreet" />
<input name="address[2][city]" value="New York" />

परिणाम होगा

$POST = [ 'address' => [ 
                 1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
                 2 => ['street' => 'Wallstreet', 'city' => 'New York'],
              ]
        ]

0

किसी और को इसे खोजने के लिए - इसका ध्यान देने योग्य है कि आप इनपुट नाम में मुख्य मूल्य निर्धारित कर सकते हैं। एक ही नाम के गुण के साथ पोस्टिंग फॉर्म फील्ड में जवाब के लिए धन्यवाद आप बिना उद्धरण के भी स्ट्रिंग या पूर्णांक को इंटरप्ले कर सकते हैं।

उत्तर यह मान लेते हैं कि आप PHP के लिए वापस आने वाले महत्वपूर्ण मान को बुरा नहीं मानते हैं, लेकिन आप इसे name=[yourval](स्ट्रिंग या इंट) सेट कर सकते हैं जो आपको मौजूदा रिकॉर्ड को संदर्भित करने की अनुमति देता है।


यह खुद को पार्स करने के लिए बकवास है। ऐसा कोई परिदृश्य नहीं है कि इसकी आवश्यकता होगी।
जावेद

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