2009-07-15 13 views
12

मेरे पास एक HTML फॉर्म में निम्न बहु-चयन बॉक्स है, जहां उपयोगकर्ता एक या अधिक विकल्प चुन सकता है।खाली कैसे पोस्ट करें <select .. एकाधिक> HTML तत्व खाली होने पर?

<select id="eng_0" name="eng_0[]" multiple size="3"> 
    <option value="Privilégier">Privilégier</option> 
    <option value="Accepté">Accepté</option> 
    <option value="Temporaire">Temporaire</option> 
</select> 

उपयोगकर्ता कोई विकल्प चयन करता है, प्रपत्र एक PHP बैकएंड में पोस्ट किया जाता है, लेकिन यह $ _POST [ 'eng_0'] के रूप में यदि क्षेत्र भी फार्म पर नहीं था के लिए कोई खाली सरणी मूल्य पैदा करता है।

यह अनचेक चेकबॉक्स की तरह है जो समस्या सबमिट नहीं की गई है।

क्या कोई चयनित विकल्प नहीं है, भले ही इसे चुनिंदा ऑब्जेक्ट पोस्ट करने का कोई तरीका है? यह jQuery में हो सकता है अगर यह मदद करता है।

+4

हाँ, HTML तत्वों है कि "सफल नहीं" हैं नहीं भेजता है (जो कोई चयन के साथ चयन बक्से, चयनित एक के बिना रेडियो बटन, और अनियंत्रित चेक बॉक्स शामिल हैं)। – Powerlord

+0

प्रश्न वास्तव में अस्पष्ट है, क्योंकि आप 'isset ($ _ POST ['eng_0'] के साथ मान को नियंत्रित कर सकते हैं) .. .. क्या आपका मतलब है * चयन करने के लिए पोस्ट करें, भले ही कोई विकल्प नहीं चुना गया हो *? – jolt

+0

एक साइड नोट के रूप में, ऐसा प्रतीत होता है कि यह भी चुनता है कि "एकाधिक" नहीं हैं, यह व्यवहार हो सकता है और सबमिट नहीं किया जा सकता है, अगर उनके पास "कोई मूल्य नहीं" चुना गया है। उदाहरण के लिए यदि आपने यह जावास्क्रिप्ट 'document.getElementById ('select_id') चलाया है। Value = 'a non option';' (आमतौर पर सामान्य उपयोगकर्ता इनपुट के साथ कोई समस्या नहीं है क्योंकि वे ड्रॉपडाउन से कुछ भी नहीं चुन सकते हैं)। बस सोचा कि मैं इसका जिक्र करूँगा :) – rogerdpack

उत्तर

19

आपके प्रपत्र गतिशील रूप से उत्पन्न किया जाता है तो , आप एक छिपे हुए फॉर्म तत्व को उसी नाम से शामिल कर सकते हैं जिसमें डमी मान होता है। फिर, डमी मान को अनदेखा करें, यदि उस चर के लिए आपको जो मान मिलता है वह ['dummy_value'] है तो आप इसे अपने कोड में "कुछ भी नहीं चुना" के रूप में समझ सकते हैं।

12

क्या कोई कारण है कि आप उस परिस्थिति का इलाज नहीं कर सकते जहां सरणी सेट नहीं है जैसे कि इसे कोई सामग्री नहीं भेजा गया हो?

if (!isset($_POST['eng_0'])) 
    $_POST['eng_0'] = array(); 

संपादित करें:

एक छिपी हुई फ़ील्ड जोड़ें जब भी एकाधिक चयन अपने रूप में मौजूद है:

<input type="hidden" name="eng_0_exists" value="1"/> 

तो जाँच:

if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists'])) 
    $_POST['eng_0'] = array(); 
+0

मुझे नहीं पता कि सरणी सबमिट नहीं की गई थी क्योंकि: 1) उपयोगकर्ता ने कोई विकल्प नहीं चुना 2) नियंत्रण फॉर्म पर भी नहीं था (फॉर्म जेनरेट किया गया है गतिशील रूप से, एक जटिल जटिल एल्गोरिदम का उपयोग कर)। ये मेरे लिए दो अलग-अलग परिदृश्य हैं और मैं यह बताना चाहता हूं कि क्या हो रहा है। – Vincent

3

आप एक जोड़ सकते हैं - कृपया चुनें - प्रविष्टि और इसे पूर्व निर्धारित करें।

<select id="eng_0" name="eng_0[]" multiple size="3"> 
    <option value="nothing" selected="selected">- please select -</option> 
    <option value="Privilégier">Privilégier</option> 
    <option value="Accepté">Accepté</option> 
    <option value="Temporaire">Temporaire</option> 
</select> 
+1

नहीं, यह बहुत बुरा विचार है! क्योंकि उपयोगकर्ता CTRL कुंजी के साथ अचयनित विकल्प चुन सकते हैं! –

+0

क्या होगा यदि आप सब कुछ अचयनित करना चाहते हैं? क्या आप _empty विकल्प को संशोधित करने के लिए कुछ जावास्क्रिप्ट का भी उपयोग करते हैं? मुझे यह भी लगता है कि चयन 2 या चुना गया जैसे beautifiers का उपयोग खाली विकल्प प्रदर्शित करेगा –

1

क्या होगा यदि उपयोगकर्ता इसे चुनता है, तो चयन के बारे में कुछ भी $ _POST में आता है?

  <form action="cart.php" method="POST"> 
       <input type="hidden" id="acao" name="acao" value="add" /> 
       <input type="hidden" id="id" name="id" value="<?=$cnt->cnt_codigo?>" /> 
       <?php 
        $resOpc = mysql_query("SELECT * FROM loja_opcionais ORDER BY descricao")or die(mysql_error()); 
        if(mysql_num_rows($resOpc) > 0){ 
       ?> 
       <select id="opcional" nome="opcional"> 
        <?php 
         while($opc = mysql_fetch_object($resOpc)){ 
        ?> 
        <option value="<?=$opc->descricao?>"><?=$opc->descricao?></option> 
        <?php 
         } 
        ?> 
       </select> 
       <?php 
        } 
       ?> 
       <button class="botao" type="submit">Adicionar ao Carrinho</button> 
      </form> 

जब मैं print_r ($ _ POST) करता हूं; दूसरी ओर आउटपुट बस है: ऐरे ([acao] => जोड़ें [id] => 3) और चयन टैग का कोई संकेत नहीं, भले ही मैं दूसरी तरफ मान बदलूं;

0

यदि कोई $ _POST नहीं है, तो खाली स्ट्रिंग पोस्ट करें (कुछ भी नहीं) बिल्कुल सरल समाधान है।

यहाँ एक <select name="related[]" multiple>

के साथ एक फार्म के लिए मेरे समाधान सिर्फ php अनुभाग है कि अपने फार्म के भंडारण संभालती में निम्नलिखित पंक्ति जोड़ें:

if (!isset($_POST['related'])) $_POST['related']=""; 
+2

हमेशा उपयोग करने योग्य नहीं! –

1
कुछ

जोड़े

तरह

$("#field").change(function() { 
 
     if (($("#field").val() || []) == "") $("form").append("<input type='hidden' name='field' value=''>"); 
 
    });

0

अपने फॉर्म में <input type="hidden" name="yourfield" value="" /> शामिल करें जहां नाम आपके multiple="multiple" के लिए समान है।


यह दुर्भाग्यपूर्ण है कि ब्राउज़रों multiple="multiple" चयन के लिए खाली प्रपत्र पैरामीटर नहीं भेजते हैं जैसे वे गैर एकाधिक चयन या एक सामान्य जानकारी के लिए करते हैं।

स्वीकृत उत्तर में प्रस्तावित डमी मूल्य का उपयोग करना एक बहुत ही साफ समाधान नहीं है।

0

आप एक से अधिक का चयन करें तत्व से पहले एक छिपा इनपुट जोड़ते हैं (यह सवाल jQuery के साथ कोई संबंध नहीं है), यह छिपा इनपुट मूल्य भेज यदि एक से अधिक आइटम का चयन में से कोई भी चयनित किया गया है जाएगा। जैसे ही आप एक विकल्प का चयन करते हैं, वैसे ही उस चयनित मूल्य का उपयोग किया जाता है।

इस तरह से मैं Laravel/php में 2 अलग-अलग परिदृश्य भेद करने के लिए जा रहा है, कर रहा था:

  • (, छिपे हुए इनपुट की आवश्यकता होती है तो पीएचपी myitems के लिए एक खाली स्ट्रिंग प्राप्त करता है) सब myitems खाली करने के लिए सेट करें
  • myitems बिना छुए मॉडल के अन्य गुण अद्यतन (ताकि छोड़कर किसी भी myitems इनपुट फार्म के रूप में। पीएचपी myitems कुंजी प्राप्त नहीं होगा)

नमूना कोड:

<input type="hidden" name="myitems" value="" /> 
<select name="myitems[]" multiple> 
    <option value="1">Foo</option> 
    <option value="2">Bar</option> 
</select> 
संबंधित मुद्दे