Javascript jQuery&;PHP:计算总和并将其发送回客户端

Javascript jQuery&;PHP:计算总和并将其发送回客户端,javascript,php,jquery,ajax,post,Javascript,Php,Jquery,Ajax,Post,我有以下带有输入元素的HTML表单: <form id="forma" name="forma" method="post"> <div id="oblock"> <div class="dtable"> <div class="drow" id="drow1"> <div class="dcell"> <label for="aster"&

我有以下带有输入元素的HTML表单:

<form id="forma" name="forma" method="post">
   <div id="oblock">
      <div class="dtable">
        <div class="drow" id="drow1">
            <div class="dcell">
                <label for="aster">Aster:</label>
                <input type="text" id="aster" name="aster" value="0" stock="10" price="2.99" required>
            </div>
            <div class="dcell">
                <label for="daffodil">Daffodil:</label>
                <input type="text" id="daffodil" name="daffodil" value="0" stock="12" price="1.99" required >
            </div>
            <div class="dcell">
                <label for="rose">Rose:</label>
                <input type="text" id="rose" name="rose" value="0" stock="2" price="4.99" required>
            </div>
        </div>
    </div>
  </div>
  <div id="buttonDiv">
     <button type="submit">Place Order</button>
  </div>
</form>
1.如何在PHP中访问这些值

2.如果有大量的输入元素,每个元素都有自己的唯一名称,我们如何迭代(并避免对每个元素单独使用$\u POST['input\u name'],$\u POST['rose']等等…)并在PHP中计算和

3.如何将计算出的总和发送回客户端(f从PHP到jQuery/客户端

EDIT2:

根据我在这里得到的一些答案,我尝试了以下方法:

<?php
    $sum = 0;
    foreach ($_POST as $name=>$value) {
        $sum += (int)$value;
    }
    $_POST['total'] = $sum;
    echo json_encode($_POST['total']);

1,带$u POST['variable-name']

$asterPostVariable = $_POST['aster'];
2迭代$\u POST数组

foreach ( $_POST as $key => $val )
{
  // Do calculation, your value from input element is in $val
  $sum += $val;
  // You could also check your $key if you don't want to sum all post variables
}
foreach ( $_POST as $key => $val )
{
  // You could also check your $key if you don't want to sum all post variables. This solution is based on that your form elements that you want to calculate are named with the initial fl_
  if ( substr($key, 0, 3) == 'fl_' )
    $sum += $val;

}
3将其作为json数据回显

echo json_encode( ['sum' => $calculatedSum] );
编辑

2迭代$\u POST数组

foreach ( $_POST as $key => $val )
{
  // Do calculation, your value from input element is in $val
  $sum += $val;
  // You could also check your $key if you don't want to sum all post variables
}
foreach ( $_POST as $key => $val )
{
  // You could also check your $key if you don't want to sum all post variables. This solution is based on that your form elements that you want to calculate are named with the initial fl_
  if ( substr($key, 0, 3) == 'fl_' )
    $sum += $val;

}

要回答所有三个问题,请执行以下操作:

1。要访问这些值,可以使用超全局变量。例如:

$_POST['element_name'];
$sum = 0;
foreach($_POST as $name => $value){
    $sum += strtoint($value);
}
$final = array(
    sum => $sum
);
2.要遍历所有元素,请使用
foreach
语句。例如:

$_POST['element_name'];
$sum = 0;
foreach($_POST as $name => $value){
    $sum += strtoint($value);
}
$final = array(
    sum => $sum
);
3.要将值返回JavaScript,请使用
json\u encode
echo
。还要确保不要回显任何您不想返回的数据。例如:

echo json_encode($final);
  • 您不必从jquery序列化方法中取消序列化PHP中的任何内容。如果序列化数据,如果使用GET方法ajax请求,则应将其作为查询参数发送到PHP;如果使用post ajax请求,则应将其作为post vars发送到PHP。因此,在PHP中,您可以根据请求类型访问诸如$\u POST[“varname”]或$\u GET[“varname”]之类的值
  • serialize方法只接受表单元素并将其置于字符串形式。“varname=val&var2=val2”

  • 迭代请求参数$\u request或$\u POST
  • 将其转换为json并回显,例如回显json_encode($data)
    可以将每个flower变量作为数组的索引:

    <form id="forma" name="forma" method="post">
       <div id="oblock">
          <div class="dtable">
            <div class="drow" id="drow1">
                <div class="dcell">
                    <label for="flowers[aster]">Aster:</label>
                    <input type="text" id="flowers[aster]" name="flowers[aster]" value="0" stock="10" price="2.99" required>
                </div>
                <div class="dcell">
                    <label for="flowers[daffodil]">Daffodil:</label>
                    <input type="text" id="flowers[daffodil]" name="flowers[daffodil]" value="0" stock="12" price="1.99" required >
                </div>
                <div class="dcell">
                    <label for="flowers[rose]">Rose:</label>
                    <input type="text" id="flowers[rose]" name="flowers[rose]" value="0" stock="2" price="4.99" required>
                </div>
            </div>
        </div>
      </div>
      <div id="buttonDiv">
         <button type="submit">Place Order</button>
      </div>
    </form>
    
    我会尽量避免在整个
    $\u POST
    数组中进行迭代,因为您可能希望稍后向该表单添加更多变量(与flowers无关)

    您可以使用echo json_encode($result)将其发送回客户端时

    编辑

       $(function() {
            $("button").click(function(e) {
                var formData = $("form").serialize();
                $.post("test.php", formData, processServerResponse);
                e.preventDefault();
            });
        });
        function processServerResponse(data) {
             $("div.dcell").hide();
             $("#buttonDiv").append('<div>'+data.total+'</div>');
             $("#buttonDiv button").remove();
        }
    

    如果您的帖子得到了
    未定义的
    响应,您应该检查PHP错误日志,因为在回显任何内容之前,您的脚本可能会失败或退出。

    1。您可以使用超全局变量访问它们,使用元素名称作为键,如
    $\u POST['aster']
    中关于您添加/更新的问题:将value.total更改为data.totalChanged,我将显示
    未定义的
    ,而不是sum?您能显示php脚本返回的内容吗?请记住,当您使用serialize()时,请求只发送输入元素值。不是您添加的属性stock或priceOk,我在html代码中看不到任何名为uneteVrednosti的元素,但您可以使用isset($\u POST['uneteVrednosti'])在php代码中检查它。尝试在表单中添加一个同名的隐藏元素,如果该元素消失了怎么办?在你的答案中贴一个例子。你只是从解决方案中学习,你希望答案永远存在吗?是的,所以希望保留答案。这是你的问题:)很高兴我帮了你我的朋友:)如果这个表单有更多的变量(与flowers无关)发送到服务器端怎么办,但是我们不想用它们来计算和?也许你可以用一个起始fl_uu来命名所有的输入元素,你想把它们加起来。然后在php代码中检查$key变量中的元素名称。如果(substr($key,0,3)='fl_u2;'),如果这个表单有更多的变量(与flowers无关)被发送到服务器端,但是我们不想用它们来计算和呢?从PHP5.4开始,您还可以使用短数组语法,它用[]替换数组()。