【问题标题】:Checkbox increasing value in database复选框增加数据库中的值
【发布时间】:2013-06-18 07:53:44
【问题描述】:

是的,这是复选框表单问题之一。 我试图让我的问题简短易懂。 我有一个包含大约 25 个复选框的表单,分为 3 组。每组对每个复选框给出不同的分数。 Group1 = 5 点/检查 | Group2 = 8 点/检查 | Group3 = 12 点/检查。我想要做的是计算提交检查的数量,然后将所有内容添加到总分中。简单的?新的复选框可以随时选中,这意味着总分可以增加,为了更容易,复选框不能取消选中,所以总分不能减少。然后总分将保存在数据库表中。这就是我现在所拥有的,并不多,但我需要新的眼光来看待我的问题。这个等式在我的脑海中似乎很容易,但我无法在纸上得到它。

            ....5points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">n point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />
................8points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="eight[]" value="1" <?php if(isset($_POST['eight'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="eight[]" value="1" <?php if(isset($_POST['eight'])) echo 'checked="checked"'; ?> />
....12points and so on

我还使用 Isset = checked 代码将这些框保存为选中状态。 这是我丑陋的总分加法:

$a =0;
$b =0;
$total;
if(isset($_POST['submitted']))
{
if (isset($_POST['five'])) {
    foreach ($_POST['five'] as $five) {
       $a + 5;
    }
 if (isset($_POST['eight'])) {
    foreach ($_POST['eight'] as $eight) {
       $b + 8;
    }
    $total=$total+$a+$b;
}

但它当然不能解决问题,它只是给我一个回声结果,分别为 5555555 和 888888。另外,我不希望我的总分像现在看起来那样添加两次相同的分数。有人可以帮我弄清楚这个脑筋急转弯吗?

【问题讨论】:

    标签: php html forms checkbox isset


    【解决方案1】:

    将 $a + 5 和 $a + 8 更改为:

    $a += 5;
    $a += 8;
    

    或者您可以让整个计数更加智能,如下所示:

    if(isset($_POST['submitted'])) {
      $fives = isset($_POST['five']) ? $_POST['five'] : array();
      $eights = isset($_POST['eight']) ? $_POST['eight'] : array();
      $twelves = isset($_POST['twelve']) ? $_POST['twelve'] : array();
    
      $total = 5 * count($fives) + 8 * count($eights) + 12 * count(twelves);
    }
    

    此外,如果提交,您的 html 可能会检查所有复选框。如果您不想减去点数,请更改 if 语句、名称并添加 disabled 属性:

                ....5points
                        <label for="first_name">first point</label>
                        <input type="checkbox" name="five[0]" value="1" <?php if(isset($_POST['five'][0])) echo 'checked="checked" disabled="true"'; ?> />
    
                        <label for="first_name">sec point</label>
                        <input type="checkbox" name="five[1]" value="1" <?php if(isset($_POST['five'][1])) echo 'checked="checked" disabled="true"'; ?> />
    
                        <label for="first_name">n point</label>
                        <input type="checkbox" name="five[2]" value="1" <?php if(isset($_POST['five'][2])) echo 'checked="checked" disabled="true"'; ?> />
    ................8points
                        <label for="first_name">first point</label>
                        <input type="checkbox" name="eight[0]" value="1" <?php if(isset($_POST['eight'][0])) echo 'checked="checked" disabled="true"'; ?> />
    
                        <label for="first_name">sec point</label>
                        <input type="checkbox" name="eight[1]" value="1" <?php if(isset($_POST['eight'][1])) echo 'checked="checked" disabled="true"'; ?> />
    ....12points and so on
    

    【讨论】:

    • 呵呵,我根本没想过用count。很好的解决方案。
    • 这太棒了!但是如果我不选择任何十二点复选框,我会得到未定义的值?还有一个问题,即使在重新加载页面后,复选框也可以选中和禁用吗? @齐亚诺
    • 是的,现在重新加载后应该检查和禁用它们。例如,如果您未选择任何“五个”复选框,则此数组将为空且 5 * count($_POST['five']) = 0
    • 我很抱歉,但是当我在没有输入每个复选框的情况下点击页面时,我得到一个错误,要么完全未定义,要么其他一些曾经未定义。当我到达索引页面然后返回复选框时不想保持选中状态:/
    • 嗯,如果您不检查任何内容,则 $_POST['five'] 未设置并抛出错误。让我稍微编辑一下
    【解决方案2】:

    您需要更改您的 PHP 代码,这是一个示例:

    $total = 0;
    if(isset($_POST['submitted'])) {
        if (isset($_POST['five'])) {
            foreach ($_POST['five'] as $five) {
                $total += 5;
            }
        }
        if (isset($_POST['eight'])) {
            foreach ($_POST['eight'] as $eight) {
                $total += 8;
            }
        }
    }
    

    += 运算符接受一个变量,在本例中为 $total,并将右侧出现的任何内容添加到该变量中。所以$total += 8;$total = $total + 8;是一回事

    【讨论】:

      【解决方案3】:

      在你的 foreach 循环中,你只是在做 $a + 5 和 $b + 8,你可能想写 $a +=5, $b += 8

      【讨论】:

        【解决方案4】:

        $a + 5;$b + 8; 替换为下面的

        $a += 5;
        $b += 8;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 2014-08-14
          • 1970-01-01
          • 2012-08-31
          相关资源
          最近更新 更多