2013-08-21 33 views
1

我是PHP新手,我製作了一個基本上由兩個選項組成的html表單:首先,客戶端選擇一系列複選框(來自設備的部分),然後寫入每個選定複選框的數量。 。如何將複選框的值與php中的文本值結合起來?

<td><input id="11.11.015.0002" name="pecas[]" type="checkbox" value="11.11.015.0002 - BATERIA CHUMBO ACIDO 6V/4AH" /></td> 
<td><input name="qntd[]" size="7" type="text" /></td> 

,並在PHP中:

if(isset($pecas)) 
    { 
    $mensagem .= "Peças Selecionadas:<br /><br />"; 
    } 
else { 
    echo "<script>alert('Selecione as Peças Desejadas!'); location.href='http://www.lyuz.com.br/pecas/erro';</script>"; 
    exit; 
} 
    foreach ($pecas as $pecas_s) { 
    } $mensagem .= " - ".$pecas_s."<br />"; 

這給了我所有選中的複選框(件),現在我試圖讓只有這些選擇複選框與input_text(金額)關聯..

我被卡住了。幫幫我。

回答

0

在每個元素的名稱中指定一個鍵。使用一個數字,並確保pecas[1]對應於qntd[1]。然後,當您循環訪問其中一個數組時,這些鍵在另一個數組中是相同的。例如:

<?php 
$count = 0; 

foreach($itemList as $item){ 
    echo "<tr>\n"; 
    echo " <td><input type='checkbox' id='{$item['id']}' name='pecas[{$count}]'></td>\n"; 
    echo " <td><input type='test' id='{$item['id']}' name='qntd[{$count}]'></td>\n"; 
    echo "</tr>\n"; 
    $count++; 
} 

如果有3個複選框和數量框,可以說第一個和第三個框被選中,但不是第二個。您的帖子陣列看起來像:

array(
    'pecas'=> array(
     0 => 'some value', //notice, no 1 key because the second checkbox was not checked. 
     2 => 'some other value' 
     ), 
    'qntd' => array(
     0 => 'some qntd', 
     1 => '' //1 was not checked, so nothing should have been entered in the second textbox. 
     2 => 'some other qntd' 
     ) 
    ); 

的關鍵0(第一個複選框)和2(三)將「PECAS」數組中存在,並且將與鍵「qntd」陣列02對應。然後,您可以遍歷像數據:

//check that at least one checkbox was checked 
if(!empty($_POST['pecas'])){ 
    //loop over the checkboxes getting key ($k) and value ($v). 
    foreach($_POST['pecas'] as $k=>$v){ 
     //display a message 
     echo "Pecas {$v} ({$k}) was checked with a qntd of {$_POST['qntd'][$k]}<br>"; 
    } 
} 
+0

嗯,我想我得到你的建議的想法。不幸的是,我不知道我可以在哪裏更改我的代碼。當你說「在每個元素的名稱中指定一個鍵」時,我可以在我的html表單上使用「id ='{$ item ['id']}'name ='pecas [{$ count}]」?請注意,我的表單只能使用html。 – user2701371

+0

你是如何構建表單的?使用PHP?或者完全在HTML文件中有表格?通常這樣的表單是通過循環數組或數據庫結果並在HTML中回顯表單來構建的。 –

+0

我的表單是一個html文件,我不能用另一種方式來構建它。 – user2701371

0

變化

foreach ($pecas as $pecas_s) { 
    $mensagem .= " - ".$pecas_s."<br />"; 
} 

for($x = 0; $x < count($pecas); ++$x) { 
    $mensagem .= " - ".$pecas[$x]. ": " . $qntd[$x] . "<br />"; //Example 

} 

由於看來,每$ PECAS有一個$ qntd,所以你只需要得到$ pecas的索引位置,並且在$ qntd中獲取相同的索引位置

-

但是,讓我補充說,如果複選框只有在檢查時纔會通過,那麼輸入框總是會被傳遞。所以你可能有一個差距,索引不對齊!如果未選中複選框,您可能需要使用一些javascript來禁用輸入框。

+0

感謝您的快速回答。我改變我的代碼建議,但PHP只返回選中的複選框,創建'$ mensagem',但沒有得到文本的輸入值。例如: - 11.11.015.0002 - BATERIA CHUMBO ACIDO 6V/4AH- Quantidade: – user2701371

0

嗯,我設法解決這個@Jonathan庫恩幫助一點點不同的方法。

在HTML表單,我給指數中的每個元素,

<td><input id="11.11.015.0002" name="pecas[1]" type="checkbox" value="11.11.015.0002 - BATERIA CHUMBO ACIDO 6V/4AH" /></td> 
<td><input name="qntd[1]" size="7" type="text" /></td> 

而在PHP文件,我更換

foreach ($pecas as $pecas_s) { 
    $mensagem .= " - ".$pecas_s."<br />"; 
} 

array('pecas'=> array(), 'qntd' => array()); 
    if(!empty($_POST['pecas'])) 
     { 
     foreach($_POST['pecas'] as $k=>$v) 
      { 
        $mensagem .= "- {$v} - QUANT.: {$_POST['qntd'][$k]}<br>"; 
      } 
} 

最後,我的郵箱當複選框被選中時,返回每個文本框的值! \ o/