2012-08-05 15 views
11

मैं एक चेकबॉक्स प्रपत्र के साथ कई सरणियों प्रस्तुत करने के लिए कोशिश कर रहा हूँ के साथ कई सरणी चेकबॉक्स प्रस्तुत करने के लिए, लेकिन मैं केवल इस समय एक सरणी प्रस्तुत करने में सक्षम हूँ, यहाँ क्या मैं अब तककैसे HTML रूपों

इस उदाहरण में है मैं delete[] सरणी के साथ संख्याओं की एक सरणी सबमिट कर रहा हूं, यह सरणी ठीक से संसाधित हो जाती है, मैं भी सरणी condition[] सबमिट करना चाहता हूं, यह ठीक से संसाधित नहीं होता है, इस समस्या को हल करने का सबसे अच्छा तरीका क्या है?

php कोड

$catalog = $database->getInventory(); 

if($catalog){ 
    $numRows = sizeof($catalog);//count 
    echo "<b>Book Count:</b> ".$numRows."<br>"; 

    echo "<form method='post' action='inventory.php'>"; 
    echo "<table id='example' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>"; 
    echo " 
     <thead> 
     <tr> 
      <th>ISBN</th>   
      <th>Title&nbsp;&nbsp;&nbsp;</th> 
      <th>Rank&nbsp;&nbsp;</th> 
      <th>Condition&nbsp;&nbsp;</th> 
      <th><input type='checkbox' name='delete' value='all' /></th> 
     </tr> 
     </thead>\n"; 


    foreach($catalog as $elem){ 
     echo " 
     <tr> 
      <td>".$elem["isbn"]."</td> 
      <td>".$elem["title"]."</td> 
      <td>".$elem["rank"]."</td> 
      <td>".$elem["condition"]."</td> 
      <td> 
       <input type='checkbox' name='add[]' 
        value='".$elem['isbn']."_".$elem['condition']."_"."' /> 
      </td> 
     </tr>";  
    } 

    echo "</table>"; 
    echo "</form>"; 
} 

उदाहरण html मार्कअप

<form method='post' action='inventory.php'> 
    <table> 
     <tr> 
     <td> 
      <input type='hidden' name='addInventoryBook' value='1'> 
      <input type='submit' value='Add' /> 
     </td> 
     </tr> 

     <tr> 
     <td> 
      <input type='checkbox' name='add[]' value='100001_used' /> 
     </td> 
     </tr> 

     <tr> 
     <td> 
      <input type='checkbox' name='add[]' value='100001_new' /> 
     </td> 
     </tr> 

     <tr> 
     <td> 
      <input type='checkbox' name='add[]' value='100003_new' /> 
     </td> 
     </tr> 

    </table> 
</form> 

php समारोह

function Inventory(){ 
    if(isset($_POST['addInventoryBook'])){ 
     if(isset($_POST['add']) && is_array($_POST['add'])){ 
    $arr = array(); 
     foreach($_POST['add'] as $checkbox){ 
      $temp = explode("_", $checkbox); 

      $arr[] = array(
       "isbn"  => $temp[0], 
       "condition"  => $temp[1], 
       "sub_condition" => $temp[2] 
      ); 
     }    
    $this->addInventoryBook($arr); 
     } 

     else{ 
     echo "No values have been set"; 
     } 
} 


function addInventoryBook($arr){ 
    foreach($arr as $elem){ 
     //if used get sub-category 
     if($elem['condition']=='used'){ 
     echo $elem['isbn']."-".ucfirst($elem['condition']) 
      .ucfirst($elem['sub_condition'])."<br>"; 
     } 

     else if($elem['condition']=='new'){ 
     echo $elem['isbn']."-".ucfirst($elem['condition'])."<br>"; 
     } 

    } 
} 

सभी मैं चाहता हूँ मैं रों मूल रूप से मेरी PHP स्क्रिप्ट

वर्तमान आउटपुट

100001 
100002 
100003 

वांछित आउटपुट

100001 good 
100002 new 
100003 new 
+0

मैं उलझन में हूं कि आप क्या पूछ रहे हैं। मुझे आपके कोड में कहीं भी '$ _POST ['condition'] नहीं दिखाई देता है, इसलिए मुझे यकीन नहीं है कि आप किस बारे में पूछ रहे हैं। – David

+1

मुझे यकीन नहीं है [] चाल छिपे हुए फ़ील्ड पर लागू होती है .. – favoretti

+0

@ डेविड मैं काम करने के लिए ['condition'] प्राप्त करने की कोशिश कर रहा हूं उदा। 'foreach ($ _ POST [' condition '] $ चेकबॉक्स के रूप में) $ $ चेकबॉक्स गूंजें। "
"; लेकिन यह –

उत्तर

22

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

इसका समाधान वास्तव में अपेक्षाकृत सरल है - आपको केवल condition सरणी के लिए कुंजी निर्दिष्ट करने की आवश्यकता है ताकि आप फिर से मानों से मेल खा सकें। कुछ इस तरह:

HTML:

<tr> 
    <td> 
     <input type='hidden' name='condition[100001]' value='good' /> 
     <input type='checkbox' name='delete[]' value='100001' /> 
    </td> 
    </tr> 

    <tr> 
    <td> 
     <input type='hidden' name='condition[100002]' value='new' /> 
     <input type='checkbox' name='delete[]' value='100002' /> 
    </td> 
    </tr> 

पीएचपी:

foreach ($_POST['delete'] as $delete) { 
    $condition = $_POST['condition'][$delete]; 
    // Do stuff 
} 

यह $_POST['condition'] सरणी में मानों बांध वापस $_POST['delete'] सरणी तो सब कुछ फिर से मेल खाएगा के साथ।

संपादित

रास्ता कुंजी ऊपर बनाए जा रहे हैं महान नहीं है और पीछे मुड़कर देखें तो यह यह करने के लिए गलत तरीका है।

सही तरह से यह करने के लिए प्रदर्शन करने के लिए, चलो कल्पना हमारे पास निम्न सरणी, अच्छा और सरल:

$books = array(
    10001 => 'good', 
    10002 => 'new', 
    10003 => 'new', 
    10004 => 'good' 
); 

क्या हम दो आदानों कि प्रत्येक के साथ जुड़े रहे बाँध करने की जरूरत है पुस्तक, जिसका अर्थ है कि हमें कुंजी/मूल्य जोड़े के एक सेट की आवश्यकता है जिसे मिलान किया जा सकता है। यह मेरे लिए एक सरणी की तरह लगता है। लेकिन उपरोक्त उदाहरण के विपरीत, चाबियाँ डेटा के लिए अप्रासंगिक होनी चाहिए - उन्हें कुछ भी मतलब नहीं है, क्योंकि हम चाहते हैं कि डेटा है।

हमें जो करना है वह स्पष्ट रूप से प्रत्येक कुंजी को निर्दिष्ट नहीं करता है (कोई स्टैक-स्टाइल सरणी धक्का नहीं देता है) और उन डेटा के अज्ञात कुंजी को बना देता है जो वे संबंधित हैं।

हम ऐसा कर सकते हैं:

$i = 0; 
foreach ($books as $isbn => $condition) { 
    echo " 
    <tr> 
     <td> 
     <input type='hidden' name='condition[$i]' value='$condition' /> 
     <input type='checkbox' name='delete[$i]' value='$isbn' /> 
     </td> 
    </tr> 
    "; 
    $i++; 
} 

... और फिर, जब फ़ॉर्म सबमिट किया जाता है, हम यह कर सकते हैं:

// We still base our code on $_POST['delete'] - because this is the array that 
// depends on the user input. This time, though, we'll look at the keys as well 
foreach ($_POST['delete'] as $key => $isbn) { 
    $condition = $_POST['condition'][$key]; 
    // Do stuff 
} 
+0

यह दिलचस्प लग रहा है, मैं इसे एक शॉट दूंगा –

+0

यह बहुत अच्छा काम करता है और बहुत अच्छा । धन्यवाद –

+0

मैंने आपके समाधान के साथ एक समस्या में भाग लिया है, अगर मैं एक ही आईएसबीएन के साथ 2 किताबें हैं लेकिन अलग-अलग स्थितियों के साथ मैं क्या करूँ, तो मुझे कुछ असंगत परिणाम मिल रहे हैं। –

1

आप एक रचनात्मक रास्ता खोजने के लिए करने जा रहे हैं करने के लिए दो सरणियों पारित करने के लिए सक्षम होने के लिए PHP हैंडलर के लिए एक सरणी के रूप में एकाधिक छिपे हुए फ़ील्ड को पास करने के लिए, या उस डेटा को एकत्रित करने के तरीके को बदलने के लिए। एक "धारावाहिक" सरणी सबसे अच्छी शर्त लगती है।

This StackOverflow answer वास्तव में बताता है कि आप क्या कर सकते हैं, और अभी भी आपकी स्क्रिप्ट के व्यवहार से मेल खाना चाहिए। सौभाग्य!

+0

काम करता है मैं एक नज़र डालेंगे –

1

मैं एक छोटे से तुम क्या कर रहे हैं के बारे में उलझन में हूँ पूछना, लेकिन मुझे लगता है कि मैं इसे आपके लिए सरल बना सकता हूं। मुझे नहीं पता कि आप छिपे हुए क्षेत्रों के लिए मूल्य कैसे उत्पन्न कर रहे हैं, क्या वे कड़ी मेहनत कर रहे हैं? भले ही, यह सरलीकृत होने पर यह प्रणाली बेहतर काम करेगी।

इस बाहर की कोशिश करो ....

यह संख्या और हालत के लिए जानकारी जोड़ेगा, तो यह उनके निपटने के लिए बैकएंड पर विभाजित कर देगा। इस तरह से जानकारी एक ही समय में पारित की जाती है।

<tr> 
     <td> 
      <input type='checkbox' name='delete[]' value='100001-good' /> 
     </td> 
     </tr> 

     <tr> 
     <td> 
      <input type='checkbox' name='delete[]' value='100002-new' /> 
     </td> 
     </tr> 

     <tr> 
     <td> 
      <input type='checkbox' name='delete[]' value='100003-new' /> 
     </td> 
     </tr> 

    <?php 


     if(isset($_POST['deleteInventoryBook'])){ 
      if(isset($_POST['delete']) && is_array($_POST['delete'])){ 
      foreach($_POST['delete'] as $checkbox){ 
       $checkbox = explode('-', $checkbox); 
       echo $checkbox[1]; 
       echo '<br />'; 
       echo $checkbox[0]; 
       echo '<br />'; 
      } 
      }else{ 
      echo "No values have been set"; 
      } 
     } 


    ?> 

फिर से, मैं अगर यह उपयोगी है क्योंकि मैं तुम्हें वास्तव में क्या हासिल करने की कोशिश कर रहे थे के बारे में थोड़ा गलत समझा था पता नहीं है या नहीं, लेकिन मुझे आशा है कि यह उपयोगी था।

+1

इसके बारे में चिंता न करें ब्रो इसका उत्तर पहले ही दिया गया है, लेकिन आपके इनपुट के लिए धन्यवाद –

संबंधित मुद्दे