2013-01-04 35 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

我將重新編輯代碼,使其更簡單 –