2011-03-29 17 views
14

से POST से Foreach मान मैं किसी फॉर्म से किसी अन्य पृष्ठ पर कुछ डेटा पोस्ट करता हूं। यह एक शॉपिंग कार्ट है, और प्रस्तुत किए जाने वाले फॉर्म को कार्ट में कितनी वस्तुएं हैं, इस पर निर्भर करते हुए पृष्ठ पर उत्पन्न किया जा रहा है। उदाहरण के लिए, यदि केवल 1 आइटम हैं तो हमारे पास केवल 'name_name_1' फ़ील्ड नाम है, जिसे "स्टिकर" और 'item_price_1' जैसे मान को स्टोर करना चाहिए जो उस आइटम की कीमत को संग्रहीत करता है। लेकिन अगर किसी के पास 5 आइटम हैं, तो हमें प्रत्येक आइटम के पांचवें तक के मान प्राप्त करने के लिए 'item_name_2', 'item_name_3' इत्यादि की आवश्यकता होगी।फॉर्म

मूल्य प्राप्त करने के लिए उन वस्तुओं के माध्यम से लूप करने का सबसे अच्छा तरीका क्या होगा?

यहां मेरे पास है, जो स्पष्ट रूप से काम नहीं कर रहा है।

extract($_POST); 

$x = 1; // Assuming there's always one item we're on this page, we set the variable to get into the loop 

while(${'item_name_' .$x} != '') { 

echo ${'item_name' .$x}; 

$x++; 

} 

मैं अभी भी अपेक्षाकृत उपयोग के इस तरह के नए कर रहा हूँ, तो मैं पूरी तरह से है कि यह कैसे से निपटने के लिए सबसे अच्छा तरीका नहीं है।

धन्यवाद।

+3

यह प्रश्न से संबंधित नहीं है, लेकिन आपको PHP मैनुअल में हाइलाइट किए गए $ _POST पर कभी भी निकालना नहीं चाहिए: http://php.net/manual/en/function.extract.php – Flipper

उत्तर

19

उपयोग सरणी-जैसे क्षेत्रों:

<input name="name_for_the_items[]"/> 

आप क्षेत्रों के माध्यम से लूप कर सकते हैं:

foreach($_POST['name_for_the_items'] as $item) 
{ 
    //do something with $item 
} 
+0

यह काम कर रहा है मुझे। धन्यवाद। उस $ आइटम वैरिएबल के साथ, मैं उसी लूप के अंदर आइटम_प्रिस के मूल्य को कैसे प्राप्त करूं? मैं प्रत्येक आइटम के लिए item_name, item_price और item_quantity मुद्रित करने में सक्षम होना चाहता हूं। – Andelas

+3

@scatterbomb: 'आइटम [1] [नाम]', 'आइटम [1] [मूल्य]', 'आइटम [2] [नाम]', 'आइटम [2] [मूल्य]' जैसे नामों का उपयोग करें। परिणाम देखने के लिए 'var_dump ($ _ POST);' – Wrikken

+0

@ डॉ। मोल्ले: यदि मेरे पास एकाधिक रूप हैं लेकिन विभिन्न रूपों से मूल्य जमा करना चाहते हैं, तो पोस्ट केवल अंतिम फॉर्म मान लौटा रहा है – logan

0

मैं इसे इस तरह से

मैं में नाम सरणियों का उपयोग करेंगे ऐसा नहीं करेंगे फॉर्म तत्व

इसलिए मुझे लेआउट

मिलेगा
$_POST['field'][0]['name'] = 'value'; 
$_POST['field'][0]['price'] = 'value'; 
$_POST['field'][1]['name'] = 'value'; 
$_POST['field'][1]['price'] = 'value'; 

तो आप राशि है जो आप की जरूरत है

39

पहले, निकालने() का उपयोग नहीं करें, यह एक सुरक्षा समस्या हो सकती है, क्योंकि यह पोस्ट में हेरफेर करने के लिए आसान है पैरामीटर

प्राप्त करने के लिए एक सरणी टुकड़ा कर सकता है इसके अलावा, आप, चर चर नाम का उपयोग करने के (है कि अजीब लगता है) के बजाय की जरूरत नहीं है:

foreach($_POST as $key => $value) { 
    echo "POST parameter '$key' has '$value'"; 
} 

सुनिश्चित करने के लिए आप केवल के साथ शुरुआत मापदण्डों की तरह 'ITEM_NAME' आप यह इतना की तरह देख सकते हैं:

$param_name = 'item_name'; 
if(substr($key, 0, strlen($param_name)) == $param_name) { 
    // do something 
} 
+0

धन्यवाद। मैं डॉ। मोल्ले के उदाहरण की तरफ झुका रहा हूं, लेकिन मैं निकालने के बारे में सिर की सराहना करता हूं()। मैंने इसे अपने कोड से हटा दिया है। – Andelas

+0

मुझे POST सरणी भी पसंद है। – Alp

+0

@ एएलपी: यदि मेरे पास कई रूप हैं और विभिन्न रूपों से मूल्य जमा करना चाहते हैं, तो पोस्ट केवल अंतिम फॉर्म मान लौटा रहा है – logan