如何在for循环中获得总和PHP

oyjwcjzk  于 11个月前  发布在  PHP
关注(0)|答案(2)|浏览(104)

我正在寻找正确的语法如何总结一个特定的变量,我循环。基本上,我做了一个循环。这是源代码。

<?php
            $n = $_POST['n'];
            for ($i=1;$i<=$n;$i++) {
          ?>
            <h3 style="text-align:center"><b>ITEM <?php echo $i?>:</b></h3>
            <p>DESCRIPTION:</p>
            <input type="text" class="form-control" name="<?php echo $i.'description'; ?>" value="" autofocus>
            <p>PROGRAM UNIT:</p>
            <input type="text" class="form-control" name="<?php echo $i.'prog_unit'; ?>" value="" autofocus>
            <p>PROGRAM QUANTITY:</p>
            <input type="number" class="form-control" name="<?php echo $i.'prog_quantity'; ?>" min="0" value="0" step= ".001" autofocus>
            <p>PROGRAM UNIT COST:</p>
            <input type="number" class="form-control" name="<?php echo $i.'prog_unitcost'; ?>" min="0" value="0" step= ".00001" autofocus>
            <p>QUANTITY ACCOMPLISHED PREVIOUS:</p>
            <input type="number" class="form-control" name="<?php echo $i.'q_prev'; ?>" min="0" value="0" step= ".01" autofocus>
            <p>QUANTITY ACCOMPLISHED THIS REPORT:</p>
            <input type="number" class="form-control" name="<?php echo $i.'q_report'; ?>" min="0" value="0" step= ".01" autofocus>
            <p>QUANTITY ACCOMPLISHED TOTAL TO DATE:</p>
            <input type="number" class="form-control" name="<?php echo $i.'q_total_date'; ?>" min="0" value="0" step= ".01" autofocus>
            <p>PERCENT ACCOMPLISHED PREVIOUS:</p>
            <input type="number" class="form-control" name="<?php echo $i.'p_prev'; ?>" min="0" value="0.00" step= ".01" autofocus>
            <p>COST INCURRED:</p>
            <input type="number" class="form-control" name="<?php echo $i.'cost'; ?>" min="0" value="0" step= ".01" autofocus>
            <input type="hidden" name="n" value="<?php echo $n; ?>"><br>
                <?php }?>

字符串
这是上面代码的输出。enter image description here
然后,这是我将循环值插入数据库的语法。

if(isset($_POST['submit']))
{

  $n = $_POST['n'];
  for($i=1;$i<=$n;$i++)
  {
    $project = $_POST["project"];
    $description = $_POST[$i."description"];
    $prog_unit = $_POST[$i."prog_unit"];
    $prog_quantity = $_POST[$i."prog_quantity"];
    $prog_unitcost = $_POST[$i."prog_unitcost"];
    $prog_total = ($prog_quantity * $prog_unitcost);
    $q_prev = $_POST[$i."q_prev"];
    $q_report = $_POST[$i."q_report"];
    $q_total_date = $_POST[$i."q_total_date"];
    $p_prev = $_POST[$i."p_prev"];
    $p_report = ($q_total_date/$prog_quantity)*100;
    $cost = $_POST[$i."cost"];

    mysqli_query($bd,"insert into detailed_rpapi (project,description,prog_unit,prog_quantity,prog_unitcost,prog_total,q_prev,q_report,q_total_date,p_prev,p_report,cost)
     values ('$project','$description','$prog_unit','$prog_quantity','$prog_unitcost','$prog_total','$q_prev','$q_report','$q_total_date','$p_prev','$p_report','$cost')");

  }
  $sum = $prog_total + $prog_total;
  echo $sum;
  echo "Data Added Successfully ...";
}


我想把$prog_total中的所有值相加。请帮助我huhuhu

rjee0c15

rjee0c151#

看起来你已经很接近了。而不是$sum = $prog_total + $prog_total;尝试$sum = $sum + $prog_total;
阅读https://www.php.net/manual/en/language.operators.assignment.php,并使用下面的代码。

<?php

$ImEqualtoI = 0;
$ImAlsoEqualtoI = 0;
$runningTotal = 0;
$runningTotal2 = 0;

for ($i=0; $i<10;$i++) {
    $runningTotal = $runningTotal + $i;
    $runningTotal2 += $i;
    
    ++$ImEqualtoI;
    $ImAlsoEqualtoI = $ImAlsoEqualtoI + 1;
}

var_dump($runningTotal, $runningTotal2, $ImEqualtoI, $ImAlsoEqualtoI, $i);

/*
int(45)
int(45)
int(10)
int(10)
int(10)
*/

字符串

更新:好的,我看到了一个错误,只是假设你得到了你期望的$_POST[$i."prog_quantity"];$_POST[$i."prog_unitcost"];。这些是期望值吗?

6qfn3psc

6qfn3psc2#

备注:

  • 文档或对话框中不能有多个元素具有autofocus属性。如果应用于多个元素,则第一个元素将获得焦点。
  • 使用方括号name属性声明可以更优雅地生成可重复形式。
  • 使用<label>标记(而不是<p>标记)并使用forid将它们与输入元素关联起来将更有意义并改善用户体验--这些标记不使用方括号命名语法。
  • 为了获得最佳的安全性和稳定性,声明一个准备好的语句,通过引用将参数绑定到循环中/将要声明的预期变量,然后只从循环内部execute()准备好的语句。
  • 绑定参数时,可能不太直观,但it is safe to bind variables before or after they are declared

并非所有开发人员都支持使用PHP显示HTML的技术,但在您的情况下,您的from脚本可能类似于:

<?php $n = $_POST['n'] ?? 1; ?>
<form name="yourForm" method="post" action="">
    <?php for ($i = 1; $i <= $n; ++$i) { ?>
        <h3 style="text-align: center"><b>ITEM <?php echo $i?>:</b></h3>
        <label for="description<?php echo $i; ?>">DESCRIPTION:</label>
        <input id="description<?php echo $i; ?>" type="text" class="form-control" name="description[]" value="" autofocus>
        <label for="prog_unit<?php echo $i; ?>">PROGRAM UNIT:</label>
        <input id="prog_unit<?php echo $i; ?>" type="text" class="form-control" name="prog_unit[]" value="">
        <label for="prog_quantity<?php echo $i; ?>">PROGRAM QUANTITY:</label>
        <input id="prog_quantity<?php echo $i; ?>" type="number" class="form-control" name="prog_quantity[]" min="0" value="0" step= ".001">
        <label for="prog_unitcost<?php echo $i; ?>">PROGRAM UNIT COST:</label>
        <input id="prog_unitcost<?php echo $i; ?>" type="number" class="form-control" name="prog_unitcost[]" min="0" value="0" step= ".00001">
        <label for="q_prev<?php echo $i; ?>">QUANTITY ACCOMPLISHED PREVIOUS:</label>
        <input id="q_prev<?php echo $i; ?>" type="number" class="form-control" name="q_prev[]" min="0" value="0" step= ".01">
        <label for="q_report<?php echo $i; ?>">QUANTITY ACCOMPLISHED THIS REPORT:</label>
        <input id="q_report<?php echo $i; ?>" type="number" class="form-control" name="q_report[]" min="0" value="0" step= ".01">
        <label for="q_total_date<?php echo $i; ?>">QUANTITY ACCOMPLISHED TOTAL TO DATE:</label>
        <input id="q_total_date<?php echo $i; ?>" type="number" class="form-control" name="q_total_date[]" min="0" value="0" step= ".01">
        <label for="p_prev<?php echo $i; ?>">PERCENT ACCOMPLISHED PREVIOUS:</label>
        <input id="p_prev<?php echo $i; ?>" type="number" class="form-control" name="p_prev[]" min="0" value="0.00" step= ".01">
        <label for="cost<?php echo $i; ?>">COST INCURRED:</label>
        <input id="cost<?php echo $i; ?>" type="number" class="form-control" name="cost[]" min="0" value="0" step= ".01">
    <?php } ?>
    <input type="hidden" name="project" value="<?php echo $project; ?>">
    <input type="hidden" name="n" value="<?php echo $n; ?>">
    <br>
</form>

字符串
然后,接收表单提交的PHP脚本可能类似于:

<?php
if (isset($_POST['submit'])) {
    $whiteList = ['project', 'description', 'prog_unit', 'prog_quantity', 'prog_unitcost', 'prog_total', 'q_prev', 'q_report', 'q_total_date', 'p_prev', 'p_report', 'cost'];
    $stmt = $db->prepare(
        'INSERT INTO detailed_rpapi (' . implode(',', $whiteList) . ') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'
    );
    $stmt->bind_param('ssssssssssss', $project, $description, $prog_unit, $prog_quantity, $prog_unitcost, $prog_total, $q_prev, $q_report, $q_total_date, $p_prev, $p_report, $cost);
    $project = $_POST['project'];
    $sum = 0;
    $inserts = 0;
    foreach (array_slice($_POST['description'], 0, $_POST['n'] ?? 0) as $i => $description) {
        $prog_unit = $_POST['prog_unit'][$i] ?? null;
        $prog_quantity = $_POST['prog_quantity'][$i] ?? 0;
        $prog_unitcost = $_POST['prog_unitcost'][$i] ?? 0;
        $prog_total = ($prog_quantity * $prog_unitcost);
        $q_prev = $_POST['q_prev'][$i] ?? 0;
        $q_report = $_POST['q_report'][$i] ?? 0;
        $q_total_date = $_POST['q_total_date'][$i] ?? 0;
        $p_prev = $_POST['p_prev'][$i] ?? 0;
        $p_report = !$prog_quantity ? 0 : (($q_total_date / $prog_quantity) * 100);
        $cost = $_POST['cost'][$i];

        // if performing any validation or sanitisation, do it here; use "continue" statement to prevent inserting invalid data.

        $stmt->execute();
        $sum += $prog_total;
        ++$inserts;
    }
    echo "Inserted $inserts rows. Total value: $sum";
}


免责声明:在发布此答案之前,这些片段都没有经过测试;如果其中任何一个片段有缺陷,请留下信息性评论。

相关问题