计算所选复选框的值

时间:2011-10-05 12:51:27

标签: php mysql sum

我有一个显示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>

以上代码的输出如下所示: enter image description here

4 个答案:

答案 0 :(得分:0)

假设您不希望每次用户更改选择时都必须刷​​新页面,您需要在浏览器中使用Javascript而不是PHP来执行此操作。

答案 1 :(得分:0)

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

<INPUT TYPE="checkbox" NAME="switchBox" onclick="myfunction(this)">

然后myfunction应该用这样的东西来计算值:

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

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

答案 2 :(得分:0)

为了避免在更改时提交和自动加载页面,我会使用javascript / jQuery。

我要做的是:

  1. 使用html5数据属性将所有单独的weight值附加到表格行(或复选框...):第一行为<tr data-weight="1604">;
  2. 在复选框值更改时,循环显示所有具有所选复选框的行以获取并生成总和。那将是这样的:

    $( “输入”)。变化(函数(){   var total_sum = 0;   $( '输入')为( ':检查')每个(函数(){。       total_sum + = $(this).parents(“tr”)。data(“weight”);   }); });

    (无法正确格式化...)

  3. 在您想要的框中显示总和。

答案 3 :(得分:0)

正如其他人所说,你必须在Javascript中这样做,因为它将在客户端。我假设你没有在这个页面上使用像jQuery或Prototype这样的库,如果这就是你所做的一切,那么使用其中一个就太大了。

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

<div>Total: <span id="total">0</span></div>

然而,您真正需要知道的信息是与每个复选框对应的权重。最简单的方法是将它存储在checkbox元素本身上。添加名为data-weight的属性。例如:

<input type="checkbox" name="check[]" value="12" data-weight="1234" />

然后,添加一些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>

Aaaannd这是一个适合你的演示版! http://jsbin.com/ipeduf