कई चेकबॉक्स से $ _POST प्राप्त करें


159

मेरे पास इसमें कई चेकबॉक्स के साथ 1 फॉर्म है (प्रत्येक कोड के साथ):

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

जहां $row['Report ID']एक डेटाबेस में एक प्राथमिक कुंजी है, प्रत्येक मूल्य अलग है।

मैं कैसे बता पाऊंगा कि कौन से चेकबॉक्स चेक किए गए हैं? (शायद)

यह एक इनबॉक्स प्रणाली के लिए है और मेरे पास नीचे एक बटन है जो मैं चाहता हूं (जब क्लिक किया गया) सभी संदेशों को हटाने के लिए (आईडी:) $row['Report ID']जिसमें चेकबॉक्स की जांच हो।

जवाबों:


334

प्रपत्र में नाम सेट करें check_list[]और आप सभी चेकबॉक्सों को एक सरणी ( $_POST['check_list'][]) के रूप में एक्सेस करने में सक्षम होंगे ।

यहाँ अनुरोध के अनुसार एक छोटा सा नमूना है:

<form action="test.php" method="post">
    <input type="checkbox" name="check_list[]" value="value 1">
    <input type="checkbox" name="check_list[]" value="value 2">
    <input type="checkbox" name="check_list[]" value="value 3">
    <input type="checkbox" name="check_list[]" value="value 4">
    <input type="checkbox" name="check_list[]" value="value 5">
    <input type="submit" />
</form>
<?php
if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
            echo $check; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}
?>

4
क्या आप मुझे इको (आईएनजी) एक चेक_लिस्ट [] चेकबॉक्स का उदाहरण दे सकते हैं? (और यह दो चयनित के लिए समान होगा?) धन्यवाद।
जेम्स एंड्रयू

2
मुझे यह भी निर्दिष्ट करना चाहिए कि यदि HTML में कोई मान सेट नहीं है, $checkतो बराबर होगा on
सीन वॉल्श

9
if($_POST)- बेकार, $_POSTहमेशा सच होगा। आपको !empty($_POST['check_list'])इसके बजाय जाँच करनी चाहिए ।
मालती ब्रीडिस

3
@ Mārti MšBriedis अगर यह मौजूद नहीं था तो सीमा से बाहर एक सरणी सूचकांक का कारण होगा। एक बेहतर जाँच होगीarray_key_exists('check_list', $_POST) && !empty($_POST['check_list'])
Tyzoid

2
@ टायज़ॉइड empty()इस त्रुटि का कारण नहीं बनता है। मैनुअल से:empty() does not generate a warning if the variable does not exist.
मालती ब्रीडिस

22

संपादित करने के लिए नीचे टिप्पणी में @Marc ने क्या कहा।

आप सभी पोस्ट किए गए मानों के माध्यम से एक लूप कर सकते हैं।

HTML:

<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />

पीएचपी:

foreach($_POST['check_list'] as $item){
  // query to delete where item = $item
}

1
अजीब त्रुटि: चेतावनी: foreach () /home1/mountgam/public_html/zombiewrath/reports.php पर लाइन 30 = /
जेम्स एंड्रयू

2
यदि आप []फ़ील्ड परिभाषा में वाक्य रचना का उपयोग करते हैं, तो यह केवल तभी काम करेगा , जो PHP को एक सरणी के रूप में $ _POST मान बनाता है। अन्यथा यह एक एकल गैर-सरणी मान होगा, जिससे फ़ॉरच () लूप उड़ जाएगा।
मार्क बी

1
मैंने दोनों की कोशिश की, लेकिन ठीक है, मैं फिर से कोशिश करूँगा (बिना [[रूप में / नाम के))
जेम्स एंड्रयू

16

आपको तदनुसार अपने चेकबॉक्स का नाम देना होगा:

<input type="checkbox" name="check_list[]" value="…" />

इसके बाद आप सभी चेक किए गए चेकबॉक्स तक पहुंच सकते हैं

// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

ps। अपने आउटपुट को ठीक से बचाना सुनिश्चित करें ( htmlspecialchars())


12
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

और पोस्ट के बाद, आप उनके माध्यम से लूप कर सकते हैं:

   if(!empty($_POST['check_list'])){
     foreach($_POST['check_list'] as $report_id){
        echo "$report_id was checked! ";
     }
   }

या पिछले पृष्ठ से पोस्ट किया गया एक निश्चित मान प्राप्त करें:

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}

12

क्षमा करें, पुराना विषय लेकिन इसके लिए उल्लेख करने के लिए यह एक महत्वपूर्ण टुकड़ा है, जिसमें @JamesRattray और अन्य के साथ समस्याएँ थीं।

जब आप PHP स्क्रिप्ट में कई मान पोस्ट करने का प्रयास कर रहे हों, तो inputटैग (उपयोग />) को स्वयं बंद न करें । जब आप टैग को बंद करते हैं, तो यह एरे परिभाषा को समाप्त कर देता है और आपके पास सबमिट करने पर आपकी स्क्रिप्ट पर केवल एक ही मूल्य होगा। प्रभाव में @Scone का उत्तर तब तक काम नहीं कर सकता है जब तक कि />उसे बदल न दिया जाए।

यह वही है जो Warning: Invalid argument supplied for foreach() in /home1/...इस मामले में PHP त्रुटि का कारण बनता है ।

EDIT: जैसा कि नीचे टिप्पणी में कहा गया है, आगे के शोध बताते हैं कि यह DOCTYPE पर निर्भर है। यदि आपके पास XHTML के लिए DOCTYPE सेट है, तो उसे इनपुट टैग बंद करने की आवश्यकता होगी। यदि आपके पास HTML5 का DOCTYPE सेट है, तो यह आवश्यक होगा कि इनपुट टैग बंद न हो। एक मौका यह भी है कि यह उपयोगकर्ता द्वारा पेज को देखने वाले ब्राउज़र द्वारा और कोड में निर्दिष्ट DOCTYPE का अनुसरण करता है कि कितनी अच्छी तरह से तय किया जा सकता है।


गलत। सेल्फ-क्लोजिंग इनपुट टैग उन मूल्यों को प्रभावित नहीं करेगा जो PHP में जाते हैं।
रैप्टर

@ शोधकर्ता आगे के शोध पर, हाँ यह प्रभावित कर सकता है और जैसा कि आप कहते हैं, नहीं यह नहीं है। लेकिन आगे के शोध पर, यह केवल तभी प्रभावित होता है जब DOCTYPE सेट किया गया हो। HTML5 टैग को बंद होने के रूप में नहीं पहचानता (और यदि यह बंद है तो अमान्य होगा), जबकि XHTML को टैग को बंद करने की आवश्यकता होती है। इस पर W3Schools जानकारी पृष्ठ देखें: लिंक
जॉन गैलप

@ रैप्टर जबकि W3Schools त्रुटियों से भरा हो सकता है, यह ध्यान रखना महत्वपूर्ण है कि यह (और अन्य वेबसाइटों) प्रदान करने वाली जानकारी प्रश्न के प्रति अस्पष्ट है। मैं केवल यह कह रहा हूं कि किसी समस्या को हल करने और किसी समस्या को ठीक करने की प्रक्रिया किसी भी जानकारी से बेहतर नहीं है। इस मामले में, यदि आप एक अन्य संदर्भ चाहते हैं, तो W3 निर्दिष्ट करता है कि इनपुट टैग को किसी भी तरह से बंद नहीं किया जाना चाहिए क्योंकि यह गैर-अनुपालन होगा। मैं DOCTYPE को दर्शाने के लिए अपना मूल उत्तर संपादित करूंगा।
जॉन गैलप

5

यह बहुत आसान है। ध्यान दें और आप इसे तुरंत प्राप्त करेंगे! :)

आप एक HTML एरे बनायेंगे, जिसे तब php ऐरे में भेजा जाएगा। आपका html कोड इस तरह दिखेगा:

<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">

कहाँ [1] [2] [3]हैं IDआपके संदेशों के रों, जिसका अर्थ है कि आप करेंगे echoअपनी $row['Report ID']अपनी जगह में।

फिर, जब आप फ़ॉर्म जमा करते हैं, तो आपका PHP सरणी इस तरह दिखेगा:

print_r($check_list)

[1] => checked [3] => checked

जिसके आधार पर जांच की गई और जो नहीं थे।

मुझे यकीन है कि आप आगे इस बिंदु से जारी रख सकते हैं।


6
याद रखें कि check_list[]इसके check_list[0]बजाय के साथ शुरू होगा check_list[1]
आर्बिटर

1
मूल्य = "चेक किया गया" काउंटर-उत्पादक है। यदि कोई मूल्य निर्दिष्ट नहीं है तो आपको 'चालू' मिलेगा। मूल्य विशेषताओं में आपके द्वारा सबमिट किए जाने वाले मानों को निर्दिष्ट करने का लाभ यह है कि आप लगभग मनमाना डेटा भेज सकते हैं, जिसे पीएचपी इंडेक्स नहीं बनना है। फॉर्च्यूनर के साथ ऐरे वैल्यू पर इरेटिंग करना, कीज़ के ऊपर चलने से भी आसान है।
रुडिगर डब्ल्यू।

0

एन mi कैसो नूलिटिटो क्यू वेंगा एन अन सोरो वेलोर, पोर लो टैंटो नो मी वेले उना मैट्रीज़।

    // Primero paso las matrices del post a valores separados por coma.
    foreach($_POST as $n => $v) if (is_array($v)) $_POST[$n] = implode(",", $v);

Con esto me aseguro que los valores sean 1 y से पृथक्करण पोर कोमा। एसे एन मायक्यूएस प्यूडो हैसर ला कंसल्टा, वेंगा एन मैट्रीज ओ नो:

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