Php 计算所选复选框的值

Php 计算所选复选框的值,php,mysql,sum,Php,Mysql,Sum,我有一个显示MySQL查询结果的PHP页面。它向每行添加复选框。然后在提交时将选定的行插入到另一个表中 我的应用程序是一个交通规划平台。我正在寻找一种实时显示所选行的总权重的方法,页面顶部的一个框显示所选行的当前总和 有谁能指导我如何将此功能添加到现有页面中 我的代码当前显示如下: <?php mysql_connect("localhost", "username", "password")or die("cannot connect"); mysql_selec

我有一个显示MySQL查询结果的PHP页面。它向每行添加复选框。然后在提交时将选定的行插入到另一个表中

我的应用程序是一个交通规划平台。我正在寻找一种实时显示所选行的总权重的方法,页面顶部的一个框显示所选行的当前总和

有谁能指导我如何将此功能添加到现有页面中

我的代码当前显示如下:

<?php
    mysql_connect("localhost", "username", "password")or die("cannot connect");    
    mysql_select_db("databasename")or die("cannot select DB");
    $sql="SELECT `crtd dept`,`customer`,`case no`,`gross mass` from despgoods_alldetails where transporttypename= 'localpmb'";
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);
?>
<table border=1>
    <tr>
        <td>
            <form name="form1" method="post">
                <table>
                    <tr>
                        <td>#</td>
                        <td>Dispatch Area</td>                      
                        <td>Customer</td>  
                        <td>Case Number</td>
                        <td>Weight</td> 
                    </tr>
<?php
    while($rows=mysql_fetch_array($result)){
?>
                    <tr>
                        <td><input type="checkbox" name=check[]  value="<?php echo $rows['case no']; ?>"></td>
                        <td><?php echo $rows['crtd dept']; ?></td>
                        <td><?php echo $rows['customer']; ?></td>
                        <td><?php echo $rows['case no']; ?></td>
                        <td><?php echo $rows['gross mass']; ?></td>
                    </tr>                                   

<?php
    }
?>
                    <tr>
                        <td colspan=3><input name="Next" type="submit" id="Next" value="Next"></td>
                    </tr>
                    <?php



                            $check=$_POST['check'];

                        if($_REQUEST['Next']=='Next'){
 {
                            $sql="INSERT INTO loaddetails (dispatcharea,Customer, casenumber, weight,LOCStatus) 
                            SELECT `crtd dept`,Customer,`case no`,`gross mass`,'in Load Creation'
                            FROM despgoods_alldetails WHERE `Case No` = '$val'";

                            foreach($check as $key=>$value)
                            {
                            $sql="INSERT INTO loaddetails (dispatcharea,Customer, casenumber, weight,LOCStatus)
                            SELECT `crtd dept`,Customer,`case no`,`gross mass`,'in Load Creation'
                            FROM despgoods_alldetails WHERE `Case No` = '$value'";
                            $final=mysql_query($sql);
                            if($final)
                            {
                            echo "<meta http-equiv=\"refresh\" content=\"0;URL=planlocalpmbstep2.php\">";
                            }                                            } 
                                }
                                }
                    // Check if delete button active, start this



// if successful redirect to php.php

mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>


假设您不想在用户每次更改选择时都刷新页面,那么您需要在浏览器中使用Javascript而不是PHP进行刷新。

我认为您可以使用Javascript函数。 向每个复选框添加onClick属性(如果您不想要提交按钮):


然后myfunction应该用如下公式计算值:

<script language="javascript">
var total; 
myfunction(checkboxId){
total = total + checkboxId.value;
}
</script>

总风险价值;
myfunction(checkboxId){
总计=总计+复选框ID.value;
}

请注意,这是一个未经检查的示例,只是为了让您了解解决方案

为了避免在更改时提交和重新加载页面,我将使用javascript/jQuery

我要做的是:

  • 使用html5数据属性将所有单独的
    权重
    值附加到表行(或复选框…):第一行的
  • 在复选框值更改时,循环所有具有选中复选框的行以获取和生成总和。这大概是:

    $(“输入”).change(函数(){ var total_sum=0; $('input')。是(':checked')。每个(函数(){ 总金额+=$(本)。父母(“tr”)。数据(“重量”); }); });

    (无法正确设置格式…)

  • 在所需框中显示总和


  • 正如其他人所说,您必须使用Javascript来完成这项工作,因为它将位于客户端。我假设您在本页上没有使用jQuery或Prototype之类的库,如果这就是您所做的全部,那么使用其中一个库就太过分了

    首先,添加一个HTML元素,该元素将包含您的总数:

    <div>Total: <span id="total">0</span></div>
    
    然后,添加一些javascript:

    <script>
        (function () {
            var totalEl = document.getElementById('total'),
                total = 0,
                checkboxes = document.form1['check[]'],
                handleClick = function () {
                    total += parseInt(this['data-weight'], 10) * (this.checked ? 1 : -1);
                    totalEl.innerHTML = total;
                },
                i, l
            ;
            for (i = 0, l = checkboxes.length; i < l; ++i) {
                checkboxes[i].onclick = handleClick;
            }
        }());
    </script>
    
    
    (功能(){
    var totalEl=document.getElementById('total'),
    总计=0,
    复选框=document.form1['check[]'],
    handleClick=函数(){
    总计+=parseInt(此['data-weight',],10)*(此项已勾选?1:-1);
    totalEl.innerHTML=总计;
    },
    i、 l
    ;
    对于(i=0,l=checkbox.length;i

    aaannd这里有一个工作演示给你

    你的具体问题是什么?作为指导,如果您需要它的实时性,我会说这是通过JavaScript完成的。为什么您要将
    数据权重
    添加到
    而不是复选框本身?此外,如果您跟踪总数,您不需要重新计算所有复选框,只需添加或减去刚刚更改的值即可。@nickf当然这可以优化,只是为了说明它的工作原理。我可以想象我也会将该值用于其他事情,因此我可能会将其附加到行中以供将来使用,但在这种情况下没有真正的原因。嗨,如果数据来自MySQL数据库而不是静态输入字段,我如何实现这一点。谢谢。@Ryan Smith只需在任何需要的地方重复php中的值
    Hi@Nickf,感谢您的反馈,在输入字段中声明数据权重=“1234”。我的信息来自MySQL数组,所以我不能每行这么做。如何根据MySQL查询的结果使其动态化?Thanks@RyanSmith你当然可以<代码>“>
    谢谢Ivan,你知道如何对MySQL数据库查询中的动态内容执行此操作吗?我认为它对动态加载的内容也很有效,事实上,你将对象本身传递给函数,当页面填充查询中的值时,值字段应该包含一些值。只需将javascript代码添加到页面中。
    <input type="checkbox" name="check[]" value="12" data-weight="1234" />
    
    <script>
        (function () {
            var totalEl = document.getElementById('total'),
                total = 0,
                checkboxes = document.form1['check[]'],
                handleClick = function () {
                    total += parseInt(this['data-weight'], 10) * (this.checked ? 1 : -1);
                    totalEl.innerHTML = total;
                },
                i, l
            ;
            for (i = 0, l = checkboxes.length; i < l; ++i) {
                checkboxes[i].onclick = handleClick;
            }
        }());
    </script>