php - it wont sum up, what is wrong with my code?

926

I want to be able to sum up all the revenue that is being displayed in the page and it auto sums every time I added another data to the revenue column:

Following is my code :

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

When I load the page echo $sum always is zero how to correctly sum up the column I made that it will sum automatically if I add another data to it :

238

Answer

Solution:

Instead of adding the revenue values up in PHP, why not have MySQL do it for you in the query?

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

And then in youru view, just echo the SUM figure...

echo $row_PK['revenue'];
478

Answer

Solution:

If I read this correctly, you're summing up the values outside of your while loop. That won't work.

I think you're mixing up a normal while loop, and a 'do while' loop.

See this code:

      <?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 } ?>

It should be more along these lines:

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

this wouldn't happen if you would write the code a bit more clearly; try to avoid interleaving html and php so much:

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

This is a lot clearer, if you ask me.

534

Answer

Solution:

Well, I don't have a PHP interpreter in my head to run your code on sight. So, just a few things which I can spot

First, there is an SQL injection in your first query. Either cast your variable to integer

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

or treat it as a string in your query

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

or - better yet - use some database wrapper that allows you to use placeholders to represent actual data in the query.

Next, your query is incredible hard to read.
If your field names do not interfere, there is no reason to usetable.field notation then.
Also use shortland aliases and consider using * if you want most of the fields from the table:

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

By the way, while editing your query, I've noticed inconsistent naming:id_customer = '$customer_name'. Don't confuse yourself with wrong variable names. If it's id, then call it "id", not "name"

And also I see no point in the first query at all, ifid_customer is equal totbl_customer_id_customer. I think you need to simplify your code - it's compexity is the main reason why you're not getting your results, I believe.

Start from very simple query like

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

and see if it returns anything.
If so - start adding some more data to fetch.
If no - check your data and overall data structure if it's all right.

People are also looking for solutions to the problem: string - How to print array value into non array value using php

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.