【问题标题】:How to add values of checkboxes that have been checked?如何添加已选中的复选框的值?
【发布时间】:2019-08-10 19:31:04
【问题描述】:

我几天前问过这个问题,但我是初学者,没有人想了解我在说什么,所以我会尽可能清楚地再次问。我有以下复选框,它们有值。这些值是菜单上项目的成本。我知道您可以通过执行 $_POST 函数来获得一个值,但我不是在尝试回显值,我不是在尝试使用流行的初学者 PHP 表单技术来回显您在输入字段中输入的名称。我想要实现的是添加已检查的复选框的值。因此,如果一个值为 10 的复选框被选中,另一个值为 11 的复选框被选中,另一个值为 5 的复选框也被选中,我想回应一下价格为 26。

我完全理解使用 isset 查看是否选中了复选框,然后回显您想要的任何内容。我是 PHP 新手,我得到的一个流行的答案是使用 value 属性,就像我在我的代码中所做的那样,它被引用为 " will get you 123 in $_POST['foo'] 在表单之后如果用户选中此复选框,则已提交。”。这没有帮助,没有提到 isset,并不是说现在很重要,但也只告诉我,如果它已被检查,它将获得 123 值。这并没有达到我想要的效果。

我知道我可以为每个复选框分配变量值,这将是一个非常好的主意,但是我将如何只添加已选中的复选框?就像只添加选中复选框的值一样,以便将数字相加,因为数字是它们的值。

请不要聪明的回答,我已经有人在 JS 中给我解决方案,甚至在 jQuery 中,人们只是告诉我如何回显一个值。

再次澄清,我是 PHP 的初学者,我现在检查了 100 多个不同的问题,但我找不到我要找的东西。请不要给我不在 PHP 中的答案,我不想知道如何回显元素的值,尽管这可能是我出错的地方,也许我不知道如何获取值,但是仅仅获取一个值并不能做任何事情,并且它不会将已选中的复选框的数值相加以获得您订购的所有食物的总价格。

这是我的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
<title>Order</title>
<link rel="stylesheet" type="text/css" href="menu.css">
</head>
<body>
<form method="post" action="menu.php">
<ul>
    <li>
<ul class="menus">
<li><input type="checkbox" name="edible1" value="12">Sausage Rolls</li>
<li><input type="checkbox" name="edible2" value="8">Fries</li>
<li><input type="checkbox" name="edible3" value="10">Wings</li>
<li><input type="checkbox" name="edible4" value="11">Spinach Pinwheels</li>
<li><input type="checkbox" name="edible5" value="6">Garlci Bread</li>
</ul>
    </li>
    <li>
<ul class="menus">
    <li><input type="checkbox" name="edible6" value="18">Instant Pot Chicken</li>
    <li><input type="checkbox" name="edible7" value="20">Salmon Pattles</li>
    <li><input type="checkbox" name="edible8" value="23">Callco Cabbage</li>
    <li><input type="checkbox" name="edible9" values="22">Bacon Wrappend Jalapeno</li>
    <li><input type="checkbox" name="edible10" value="19">Potato Mash</li>
</ul>
    </li>
    <li>
<ul class="menus">
    <li><input type="checkbox" name="edible11" value="5">Edible Cookie Dough</li>
    <li><input type="checkbox" name="edible12" value="4">Ice Cream Sandwich</li>
    <li><input type="checkbox" name="edible13" value="7">Cheesecake</li>
    <li><input type="checkbox" name="edible14" value="3">Chocolate Cake</li>
    <li><input type="checkbox" name="edible15" value="2">Brownies</li>
</ul>
    </li>
    <li>
<ul class="menus">
    <li><input type="checkbox" name="edible16" value="5">Wine</li>
    <li><input type="checkbox" name="edible17" value="5">Beer</li>
    <li><input type="checkbox" name="edible18" value="5">Water</li>
    <li><input type="checkbox" name="edible19" value="5">Juice</li>
    <li><input type="checkbox" name="edible20" value="5">Coffee</li>
</ul>
    </li>
</ul>
<input type="submit" name="order" value="Order">
</form>
</body>
</html>

这是我的 CSS,如果您出于某种原因关心它,也许您想知道表单在我眼中的样子 idk:

ul,li {
    list-style:none;
    padding : 10px;
}
  form > ul {
     display:flex;
}

我不知道用 PHP 做什么。我在将两个输入值相加之前制作了表格,但是写入的值是什么而不是某些给定的值,并且它没有复杂的最后通牒。我知道使用 isset 来回显某些内容是否已被检查,我可以从输入字段中获取一个值,我可以将两个值加在一起(但不是数字)。我已经坚持了两天,而且已经过去了这么多小时,我觉得在这一点上我一定做错了我没有注意到的事情,我真的真的不知道该怎么做。

【问题讨论】:

  • @Fico 你想在 HTML 或 php 文件中回显你的总数吗?
  • 我很可能会在我的 php 文件中执行此操作。我不介意结果在哪里,我只是想学习如何做这件事哈哈。

标签: php html css mysql sql


【解决方案1】:

由于您的复选框以edible 前缀命名,因此您可以循环$_POST 数组并查找以该前缀开头的元素。如果找到匹配项,请将其添加到 $sum 变量中。只会发送选中的复选框,因此您不必考虑未选中的复选框。

if (isset($_POST['order'])) {
    $sum = 0;
    foreach ($_POST as $key => $value) {
        if (strpos($key, "edible") === true) {
            $sum += $value;
        }
    }
    echo $sum;
} else {
    echo "POST not sent.";
}

然后根据需要打印$sum

或者,您可以重命名所有复选框,将它们全部命名为name="edible[]",使其成为“HTML 数组”。

<ul class="menus">
    <li><input type="checkbox" name="edible[]" value="12">Sausage Rolls</li>
    <li><input type="checkbox" name="edible[]" value="8">Fries</li>
    <li><input type="checkbox" name="edible[]" value="10">Wings</li>
    <li><input type="checkbox" name="edible[]" value="11">Spinach Pinwheels</li>
    <li><input type="checkbox" name="edible[]" value="6">Garlci Bread</li>
</ul>

并对所有复选框执行此操作。

那你就干吧

if (isset($_POST['order'])) {
     $sum = array_sum($_POST['edible']);
     echo $sum;
} else {
    echo "POST not sent.";
}

【讨论】:

  • 谢谢老兄,现在说得通了。我不敢相信我没有想到使用循环,我现在觉得太愚蠢了,天哪。
  • 奇怪的是,当我回显总和的值时,它并没有回显结果,嗯....
  • 嗯。 PHP 部分中的var_dump($_POST);var_dump($sum); 是什么?
  • 你上面的 HTML 块,叫menu.php
  • 不,它被称为 menu.html
【解决方案2】:

将名称更改为name="edible[1]",以此类推。提交后,这些值将位于$_POST 的数组中。然后可以使用array_sum() 进行总结。

【讨论】:

  • 非常感谢,现在这很有意义!
  • 只需要让我的回声来回显由于某种原因在 atm 中没有执行的总和,但我确信这是一个快速修复。
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多