2013-01-04 36 views
0

我希望能够总结出所有正在每一次我又增加了数据的收入列的时间显示在页面上,并自动求和的收入:它不会总结,我的代码有什么问题?

以下是我的代码:

<?php 
    require_once('Connections/connect.php'); 
    $id_customer = mysql_real_escape_string($_GET['id_customer']);         
    $sql_PK = "SELECT * FROM tbl_delivery_details WHERE tbl_customer_id_customer = {$id_customer}"; 
    $PK = mysql_query($sql_PK, $connect); 
    if (mysql_error()) { 
     die (mysql_error()); 
    } 
    $row_PK = mysql_fetch_assoc($PK);    
    $customer_name = $row_PK['tbl_customer_id_customer']; 
    $customer_name = mysql_real_escape_string($customer_name);      

    $sql = "SELECT tbl_customer.customer_name, 
     tbl_delivery_details.delivery_details_route, 
     tbl_delivery_details.delivery_details_destination, 
     tbl_delivery_details.delivery_details_van_no, 
     tbl_delivery_details.delivery_details_waybill_no, 
     tbl_delivery_details.delivery_details_charge_invoice, 
     tbl_delivery_details.delivery_details_revenue, 
     tbl_delivery_details.delivery_details_strip_stuff, 
     tbl_delivery_details.delivery_details_date   
     FROM tbl_customer, tbl_delivery_details   
     WHERE tbl_customer.id_customer = tbl_delivery_details.tbl_customer_id_customer 
     AND tbl_customer.id_customer = '{$customer_name}'"; 

     $res = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_array($res); 
     $sum = 0; 

?> 


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/x html"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Customer Revenue</title> 
    <link rel="stylesheet" type="text/css" href="qcc.css"/> 
    </head>    
    <body>    
    <table border="1"> 
     <tr> 
     <th>Reveneu</th>             
     </tr> 
     <?php do { ?> 
      <tr>       
       <td><?php echo $row_PK['delivery_details_revenue'];?></td>              
     </tr> 
     <?php } while ($row_PK = mysql_fetch_assoc($PK));?> 
     <?php { ?> 
     <?php $sum+=$row_PK['delivery_details_revenue'] ?> 
     <?php } ?> 

     </table> 

     <?php echo $sum; ?> 
    </body> 
    </html> 

当我加载页面echo $ sum总是为零如何正确地总结列我做了它会自动加总,如果我添加另一个数据:

+0

请将您的应用程序升级到mysqli_ *。现在强烈推荐。 –

+1

为什么会打开n个闭括号[{}] –

+0

这个应用程序的工作原理是什么?我认为,它必须显示某种错误。 –

回答

0

如果我正确地阅读了这篇文章,您正在总结的数值以外的值。这是行不通的。

我认为你正在混合一个正常的while循环和'do while'循环。

看到这个代码:

 <?php do { ?> 
      <tr>       
       <td><?php echo $row_PK['delivery_details_revenue'];?></td>              
     </tr> 
     <?php } while ($row_PK = mysql_fetch_assoc($PK));?> 
     <?php { ?> 
     <?php $sum+=$row_PK['delivery_details_revenue'] ?> 
     <?php } ?> 

应该沿着这些线路更多:

 <?php do { ?> 
      <tr>       
       <td><?php 
     echo $row_PK['delivery_details_revenue']; 
     $sum+=$row_PK['delivery_details_revenue'] 
     ?> 
     </td></tr> 
     <?php } while ($row_PK = mysql_fetch_assoc($PK));?> 

,如果你会清楚地写代码多一点,这将不会发生;尽量避免交错的HTML和PHP这么多:

<?php 
    do { 
    $revenue = $row_PK['delivery_details_revenue']; 
    $sum += revenue; 
    println("<tr><td>$revenue</td></tr>"); 
    } while ($row_PK = mysql_fetch_assoc($PK)); 
?> 

这是更清晰,如果你问我。

2

而不是在PHP中增加收入值,为什么不有MySQL在查询中为你做?

$sql = "SELECT SUM(tbl_delivery_details.delivery_details_revenue) as revenue, 
    tbl_customer.customer_name, 
    tbl_delivery_details.delivery_details_route, 
    tbl_delivery_details.delivery_details_destination, 
    tbl_delivery_details.delivery_details_van_no, 
    tbl_delivery_details.delivery_details_waybill_no, 
    tbl_delivery_details.delivery_details_charge_invoice, 
    tbl_delivery_details.delivery_details_revenue, 
    tbl_delivery_details.delivery_details_strip_stuff, 
    tbl_delivery_details.delivery_details_date 

FROM tbl_customer, tbl_delivery_details 

WHERE tbl_customer.id_customer = tbl_delivery_details.tbl_customer_id_customer 
AND tbl_customer.id_customer = '{$customer_name}'"; 

然后在有如观点,只是呼应了SUM身影......

echo $row_PK['revenue']; 
+0

我试过了,没有任何错误,但在页面上它没有任何回应 –

+0

使用var_dump或其他来打印$行的内容来查看发生了什么。如果它没有出错并显示为零,那么MySQL认为总和等于。你也可以尝试直接通过PHPMyAdmin或者命令行或者其他东西运行你的SQL来查看结果。 – Happy

+0

像使用PHP添加它们的任何其他方式? –

0

好了,我没有在我的脑海一个PHP解释的视线运行代码。所以,我只能看到几件事

首先,在第一个查询中有一个SQL注入。无论是投你的变量为整数

$id_customer = intval($_GET['id_customer']);    

或在查询中把它作为一个字符串

$sql_PK = "SELECT * FROM tbl_delivery_details WHERE tbl_customer_id_customer = '$id_customer'"; 

或 - 更好的 - 使用一些数据库的包装,使您可以使用占位符来表示实际数据查询。

接下来,您的查询是难以置信的难以阅读。
如果您的字段名称不干涉,那么没有理由使用table.field表示法。
还可以使用别名肖特兰,如果你想最从表中的字段可以考虑使用*:

$sql = "SELECT SUM(delivery_details_revenue) as revenue, 
       customer_name, tbl_delivery_details.* 
     FROM tbl_customer, tbl_delivery_details 
     WHERE id_customer = tbl_customer_id_customer 
       AND id_customer = '$customer_name'"; 

顺便说一句,您在编辑查询,我发现不一致的命名:id_customer = '$customer_name'。不要混淆错误的变量名称。如果它是ID,那么称它为“ID”,而不是“名称”

而且我在第一个查询中根本看不到任何点,如果id_customer等于tbl_customer_id_customer。我认为,你需要简化你的代码 - 我相信,这是一个主要原因,你不能得到你的结果。从非常简单的查询像

$sql = "SELECT SUM(delivery_details_revenue) as revenue, 
     FROM tbl_delivery_details 
     WHERE tbl_customer_id_customer = '$id_customer'"; 

开始,看看它是否返回任何东西。
如果是这样 - 开始添加更多的数据来获取。
如果否 - 请检查您的数据和整体数据结构是否正常。

+0

我将重新编辑代码,使其更简单 –