【问题标题】:How can I combine values of checkboxes with values of text in php?如何将复选框的值与 php 中的文本值结合起来?
【发布时间】:2013-08-21 18:52:48
【问题描述】:

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

我被困住了。帮助。

【问题讨论】:

    标签: php foreach


    【解决方案1】:

    在每个元素的名称中指定一个键。使用数字并确保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>";
        }
    }
    

    【讨论】:

    • 嗯,我想我明白你的建议了。不幸的是,我不知道在哪里可以更改我的代码。当您说“在每个元素的名称中指定一个键”时,我可以在我的 html 表单上使用“id='{$item['id']}' name='pecas[{$count}]”吗?请注意,我的表单只能是 html 格式。
    • 您是如何构建表单的?使用 php?还是将表单完全放在 html 文件中?通常这样的表单是通过遍历数组或数据库结果并在 html 中回显表单来构建的。
    • 我的表单是一个html文件,我无法使用其他方式来构建它。
    • 那么您需要进入 html 文件并手动更新复选框/输入框的名称。这是确保输入框和复选框保持关联的最简单方法。唯一的其他选择是仅重命名所有字段,或者在未选中复选框时使用 javascript 禁用/删除输入框。
    【解决方案2】:

    改变

    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 来禁用输入框。

    【讨论】:

    • 感谢您这么快的回答。我按照建议更改了我的代码,但 php 只返回选定的复选框,创建 '$mensagem' 但没有获取文本的输入值。例如:- 11.11.015.0002 - BATTERIA CHUMBO ACIDO 6V/4AH- Quantidade:
    【解决方案3】:

    好吧,我设法在@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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多