1

我是 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 (数量)。

我被困住了。帮助。

4

3 回答 3

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”数组中,并将与键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>";
    }
}
于 2013-08-21T18:56:37.967 回答
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 来禁用输入框。

于 2013-08-21T18:56:54.907 回答
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/

于 2013-08-22T21:11:57.677 回答