Php 从一组复选框中提取值

Php 从一组复选框中提取值,php,forms,Php,Forms,我花了很长时间想弄明白这一点。我有一个脚本,它从我的网站上获取一个表单帖子,并将数据以一封格式良好的电子邮件发送到我的电子邮件地址。我遇到的问题是,表单必须在用户填写时计算一个运行总数,其中一部分来自作为一个变量的选择框的值和作为另一个变量的复选框的值,加在一起形成总计。为了实现这一点,我必须在表单中设置一个隐藏的复选框,该复选框的值为“0”,并标记为已选中。因此,我发送给phpmailer的数组的索引计数始终至少为1。如果未选中其他选项,并且只选中了隐藏复选框,则会在电子邮件中完美地返回“未选

我花了很长时间想弄明白这一点。我有一个脚本,它从我的网站上获取一个表单帖子,并将数据以一封格式良好的电子邮件发送到我的电子邮件地址。我遇到的问题是,表单必须在用户填写时计算一个运行总数,其中一部分来自作为一个变量的选择框的值和作为另一个变量的复选框的值,加在一起形成总计。为了实现这一点,我必须在表单中设置一个隐藏的复选框,该复选框的值为“0”,并标记为已选中。因此,我发送给phpmailer的数组的索引计数始终至少为1。如果未选中其他选项,并且只选中了隐藏复选框,则会在电子邮件中完美地返回“未选择选项”。当我选中一个其他选项或多个选项时,它会将它们正确地发送到带有
标记的表单,以便它们按行顺序显示。问题是,无论我做什么,最后一个$optiontype都会在我的电子邮件表单中重复显示两次

我认为这是我代码中的最后一个条件语句,这就是问题所在

如果(isset($_POST['optiontype'])){ $arraycount=计数($_POST['optiontype'])

for($index=0;$index”;
}否则{
$optiontype.=$value\u文本;
}
}

根据上面的注释,我在一个小示例中使用了一个名为
$options
的变量,该变量是
$\u POST['optiontype']中的数组选项中的字符串。


好的,所以展望未来,这段代码将很难维护,尤其是当你改变价格时。我会将你的所有产品放入一个数组(或者DB更好),然后做类似的事情。
$products=['50'=>'$50冷冻柜独立,'75'=>'$75地下白蚁治疗'];$value\u text=$products[$value]
您甚至可以检查产品是否首先存在于数组中,基本上if/else代码将很难维护这里有一个很好的教程,展示了如何在PHP中使用多个选择框@hppycoder说了什么!这个问题实际上与PHPMailer没有任何关系,所以我删掉了对它的引用。您可以通过使用for the loop简化您的脚本,并进行比较,但是所有这些价格和名称都应该在数据库中。我感谢所有的评论并同意…但是我们大约每4年更改一次价格,我们的整个产品目录只有大约50项。这应该只是一个简单的convenience为我的客户,也为我,确保我获得输入订单所需的信息。此时,我真的只想知道为什么最后一个选项不断重复……这伤害了我的大脑,我已经尝试了我能想到的每一个条件。这是惊人的和非常简洁的代码!非常感谢,我现在就尝试一下。已经说过很多了在我的代码中,可能是第一个被称为“惊人”或“整洁”的代码。它应该对你有用,只要确保你去掉我设置的
$\u POST
。我想让你看看如果你的表单正确,它应该做什么。哦,你也可以在显示复选框时使用
$products
数组。这样,你只需在应用程序中更新一次,它就会无处不在。
    for ($index = 0; $index < count($_POST['optiontype']); $index++) {
        $value = $_POST['optiontype'][$index];
        
        if ($value == '0' && $arraycount == 1) {
            $value_text = 'No Options Selected';
        }  
        if ($value == '70') {
            $value_text = '$70 Green Plus';
        }
        if ($value == '75') {
            $value_text = '$75 Subterranean Termite Treatment';
        }
        if ($value == '50') {
            $value_text = '$50 Freezer-Standalone';
        }
        if ($value == '25') {
            $value_text = '$25 Wet Bar Refrigerator/2nd Refrigerator';
        }
        if ($value == '150') {
            $value_text = '$150 Pool/Spa Combo';
        }
        if ($value == '150+0') {
            $value_text = '$150 Additional Pool or Spa';
        }
        if ($value == '300') {
            $value_text = '$300 Salt Water Pool (Includes Pool/Spa Combo)';
        }
        if ($value == '100') {
            $value_text = '$100 Well Pump';
        }
        if ($value == '75+0') {
            $value_text = '$75 Septic System/Sewage Ejector Pump & Septic Tank Pumping';}
        if ($value == '90') {
            $value_text = '$90 External Water Line Repair';
        }
        if ($value == '195') {
            $value_text = '$195 External Water Line + Sewer & Septic Line Repair';
        }  
        
        if ($index < $arraycount) {
            $optiontype .= $value_text . "<br>";
        } else {
            $optiontype .= $value_text;
        }
        
    }
string(127) "$70 Green Plus<br>$300 Salt Water Pool (Includes Pool/Spa Combo)<br>$75 Septic System/Sewage Ejector Pump & Septic Tank Pumping"