如何将复选框的值与php中的文本值组合?

时间:2013-08-21 18:52:48

标签: php foreach

我是PHP新手,我正在制作一个html表单,它基本上包含两个选项:首先,客户端选择一系列复选框(来自设备的部分),然后写入每个所选复选框的数量。 ..

<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(金额)..

我被困住了。救命。

3 个答案:

答案 0 :(得分: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个复选框和数量框,可以说第1和第3个框被选中,但不是第2个。你的帖子数组看起来像:

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'数组中,并与'{}中的密钥02对应qntd'数组。然后,您可以遍历数据,如:

//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>";
    }
}

答案 1 :(得分: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来禁用输入框。

答案 2 :(得分:0)

好吧,我设法在@Jonathan Kuhn的帮助下用一点点不同的方法来解决这个问题。

在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 /