在从数据库获取信息的循环中将变量通过php传递到javascript

时间:2016-04-08 16:36:06

标签: javascript php mysql

在这部分代码中,我使用PHP从mysql数据库中提取信息。它在循环中,以便数据库中的所有行都将显示在页面上。每行都有一个价格,我将它们(在循环中)总计并显示为总计。我想添加一些功能,允许需要检查一个复选框,以便将价格添加到总数中,但我无法弄清楚我应该使用哪种技术来实现这一目标。

以下是代码片段:

$sql = "SELECT CourseNum, CourseName, CreditNum, InstructorName, BookName, NewPrice, UsedPrice, Section_Name, BookLink FROM BookInfo";    //       echo"<a href='$row["BookLink"].'>$row["BookName"].</a>";
$test = "test";
$result = $conn->query($sql);

echo"<h2>CIT Course requirements <hr></h2>";
echo"<h2><small>Math & Science</small></h2>";
if ($result->num_rows > 0) {
     echo "$tableHeaderInfo";
     // output data of each row
     while($row = $result->fetch_assoc()) {
         if($row["Section_Name"] == mth_sci){    

                echo "<tr><td class='col-xs-.3'><input type='checkbox' ID='checbox123' name='checkbox123' value='1' onClick='apply(this);'  /> </td><td class='col-xs-1'>" . $row["CourseNum"]. "</td><td class='col-xs-3'>" . $row["CourseName"]. " </td><td class='col-xs-2'>" . $row["InstructorName"]." </td><td><a href='" . $row["BookLink"] . "'>" . $row["BookName"] . "</a></td><td class='col-xs-1'>$" . money_format('%(#10n', $row["NewPrice"]). " </td><td class='col-xs-1'>$" . money_format('%(#10n', $row["UsedPrice"]). " </td></tr>";

                $test = "test";

                 echo "

                        <script>

                        apply = function (obj)
                        {
                            if(obj.checked){  
                                obj.parentNode.parentNode.style.backgroundColor='lightgreen'


                            }
                            else
                            obj.parentNode.parentNode.style.backgroundColor=''
                        }
                        </script>                    

                 ";

                $sum_total1 += $row["NewPrice"];  //This totals the prices right now
                $sum_total2 += $row["UsedPrice"];



         }
     }
     echo "</table>";
} else {
     echo "0 results";
}

所以代替$ sum_total2 + = $ row [&#34; UsedPrice&#34;];用于计算价格的总和,在echo&#39; javascript函数中会有一个类似的行,名为&#39; apply&#39;。

这似乎是一个总数的好方法吗?如何从循环中获得添加,以便我可以提取价格变量?

感谢您的帮助:)如果需要,我可以发布整页代码。

编辑:

我的主要目标是在循环内使用总价格,但前提是选中复选框。

例如

                            if(obj.checked){  
                            obj.parentNode.parentNode.style.backgroundColor='lightgreen'

                            //does the total here ie total += $NewPrice
                        }

但是不能像这样工作,因为循环已经在checkbutton事件发生时完成了..

编辑3:

代码片段基本上显示下面的图像(减去一些引导程序)

Example image

http://pastie.org/10790551(链接到上图中的代码)

按下该复选框后,将更新总计。看起来我的技术不适用于此,因为我需要在循环内部捕获bookprice变量?

1 个答案:

答案 0 :(得分:0)

我不完全确定我理解你的目标,但为什么不让javascript做总结,如果你处理复选框点击javascript呢?您可以在checkbox元素中包含行的价格。无论是作为标签还是传递给应用的变量......

然后你从总和中加/减它(我猜测这总是在某个元素中)。 或者你可以让javascript循环遍历所有复选框元素,如果选中则从标签中获取价格并显示总和。

更新答案:

好的,所以你的复选框看起来像这样:

<input type='checkbox' ID='checbox123' name='checkbox123' value='1' onClick='apply(this);'  /> 

首先,你不应该为多个元素使用相同的id。如果你需要给它一个ID,它应该是&#39;复选框&#39; + [一些独特的ID]。如果是CSS,请使用class。 另一方面,如果名称对所有人都相同(并假设您不使用HTML5),则可以利用该名称,因为这样可以实现此目的:

var checkboxes = document.getElementsByName("checkbox123");

复选框现在是名为checkbox123的所有复选框的集合,您可以遍历它们:)

回答新的更新:

解决此问题的一种方法是确保将总数放入带有ID标记的html元素中。 然后确保给你的复选框提供这样的价格信息:(顺便说一下,我删除了ID标签,因为你真的,真的不应该为几个元素重用相同的ID。你用什么价值? )

<input type='checkbox' style='width:40px; height:40px;' name='checkbox123' value='1' price1='" . [insert new price here] . "' price2=' . [insert used price here] . ' onClick='apply(this);'  /> 

然后你的apply-function看起来像这样:(另外,不要忘记javascript中的分号!)

apply = function (obj)
{
    if(obj.checked){  
        obj.parentNode.parentNode.style.backgroundColor='#99ff99';
    }
    else {
        obj.parentNode.parentNode.style.backgroundColor=''; //what is this for??
    }

    var checkboxes = document.getElementsByName("checkbox123");
    var price1sum = 0;
    var price2sum = 0;
    for (var i=0; i<checkboxes.length; i++) {
        if (checkboxes[i].checked) {
            price1sum += checkboxes[i].getAttribute("price1");
            price2sum += checkboxes[i].getAttribute("price2");
        }
    }
    /*
    display price1sum and price2sum in html elements using something like this:
    document.getElementById("ID for total of new price").innerText = price1sum;
    */
}

显然,为每一个复选框点击做一个循环并不是最有效的解决方案,但考虑到你目前的结构,我认为它是最简单的,如果你没有很多行,我不认为你会发现任何事情。