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は常にゼロになります。作成した列を正しく合計する方法。別のデータを追加すると自動的に合計されます。

4

3 に答える 3

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}'";

そして、youruビューで、SUMの数値をエコーし​​ます...

echo $row_PK['revenue'];
于 2013-01-04T07:06:37.997 に答える
0

これを正しく読んだ場合、whileループの外側の値を合計していることになります。それはうまくいきません。

通常のwhileループと「dowhile」ループを混同していると思います。

このコードを参照してください:

      <?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));
?>

あなたが私に尋ねれば、これははるかに明確です。

于 2013-01-04T10:40:43.907 に答える
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の場合は、「name」ではなく「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'";

そしてそれが何かを返すかどうかを確認します。
もしそうなら-フェッチするデータをさらに追加し始めます。
いいえの場合-データと全体的なデータ構造を確認して、問題がないかどうかを確認します。

于 2013-01-04T07:49:25.443 に答える