Source of: example.shipping.1.php

<?
/*
Source code example for Web Database Applications

Unless otherwise stated, the source code distributed with this book can be
redistributed in source or binary form so long as an acknowledgment appears
in derived source files.
The citation should list that the code comes from Hugh E.
Williams and David Lane, "Web Database Application with PHP and MySQL"
published by O'Reilly & Associates.
This code is under copyright and cannot be included in any other book,
publication, or educational product without permission from O'Reilly &
Associates.
No warranty is attached; we cannot take responsibility for errors or fitness
for use.
*/
?>
<?php
  
// This script sends the user a confirmation email for their order
  // and then redirects to an HTML receipt version

  
include 'include.inc';

  
set_error_handler("errorHandler");

  
// Send the user an email that summarises their purchase
  
function send_confirmation_email($custID$orderID$connection)
  {
    
// Find customer information
    
$query "SELECT *
              FROM customer
              WHERE cust_id = 
$custID";
  
    if (!(
$result = @ mysql_query ($query,
                                   
$connection))) 
       
showerror();
    
    
// There is only one matching row
    
$row = @ mysql_fetch_array($result);
  
    
// Start by setting up the "to" address
    
$to $row["firstname"] . " " 
          
$row["surname"] . " <" 
          
$row["email"] . ">";
  
    
// Now, setup the "subject" line
    
$subject "Hugh and Dave's Online Wines: Order Confirmation";
  
    
// And, last (before we build the email), set up some mail headers
    
$headers  "From: Hugh and Dave's Online Wines <help@webdatabasebook.com>\r\n";
    
$headers .= "X-Sender: <help@webdatabasebook.com>\r\n"
    
$headers .= "X-Mailer: PHP\r\n"
    
$headers .= "X-Priority: 1\r\n"
    
$headers .= "Return-Path: <help@webdatabasebook.com>\r\n";
  
    
// Now, put together the body of the email
    
$out "Dear " $row["title"] . 
           
" " $row["surname"] . ",\n" .
            
"\nThank you for placing an order at " .
            
"Hugh and Dave's Online Wines.\n";
  
    
$out .= "\nYour order (reference #" $custID 
            
"-" $orderID ") has been fictionally dispatched,\n" .
           
"and should be arriving in your imagination soon now.\n" 
           
"Please quote the reference number in any correspondence.\n";
  
    
$out .=  "\nIf it existed, the order would be shipped to: \n" .
             
"\n" $row["title"] . " " $row["firstname"] . " " 
             
$row["initial"] . " " $row["surname"] . "\n" .
             
$row["addressline1"];
  
    if (
$row["addressline2"] != "")
       
$out .= "\n" $row["addressline2"];
  
    if (
$row["addressline3"] != "")
       
$out .= "\n" $row["addressline3"]; 
  
    
$out .=  "\n" $row["city"] . " " $row["state"] . " " 
             
$row["zipcode"] . "\n" $row["country"] . "\n\n";
  
    
$out .=   "We have billed your fictional credit card \n\n";
  
    
$out .=   "The order consists of:\n\n";
  
    
// This is a heading for the order summary
    
$out .=   str_pad("Quantity"10) . str_pad("Wine"55) .  
              
str_pad("Unit Price"12) . str_pad("Total"12) . "\n";
  
    
$orderTotalPrice 0;
  
    
// list the particulars of each item in the order
    
$query "SELECT  i.qty, w.wine_name, i.price, 
                      w.wine_id, w.year, wi.winery_name
              FROM    items i, wine w, winery wi
              WHERE   i.cust_id = 
$custID
              AND     i.order_id = 
$orderID
              AND     i.wine_id = w.wine_id
              AND     w.winery_id = wi.winery_id
              ORDER BY item_id"
;
  
    if (!(
$result = @ mysql_query ($query$connection))) 
       
showerror();

    
// Add each item to the email
    
while ($row = @ mysql_fetch_array($result)) 
    { 
      
// Work out the cost of this line item
      
$itemsPrice $row["qty"] * $row["price"];

      
$orderTotalPrice += $itemsPrice;
   
      
$wineDetail showWine($row["wine_id"], $connection);
  
      
$out .= str_pad($row["qty"],10) . 
              
str_pad(substr($wineDetail053), 55);
  
      
$out .= str_pad(sprintf("$%-.2f" $row["price"]), 10) . "  ";
      
$out .= str_pad(sprintf("$%-.2f"$itemsPrice), 12);
      
$out .= "\n";
    }
  
    
$out .= "\n\nTotal: ";
  
    
$out .= sprintf("$%-.2f\n"$orderTotalPrice);
  
    
$out .= "\n\nThank you for shopping at Hugh and Dave's Online Wines!";
  
    
// Send the email!
    
mail($to$subject$out$headers);      
  }
  
  
// Main ----------
  
   // Re-establish the existing session
   
session_start();    
  
   
// Check if the user is logged in - this should never fail if
   // unless the script is run correctly
   
if (!session_is_registered("loginUsername"))
   {
      
session_register("message");
      
$message "You must login to finalise your purchase.";
      
header("Location: example.cart.2.php");
      exit;
   }      

   
// Check the correct parameters have been passed
   // unless the script is run correctly
   
if (!isset($custID) || !isset($orderID))
   {
      
session_register("message");
      
$message "Incorrect parameters to example.shipping.1.php";
      
header("Location: example.cart.2.php");
      exit;
   }      

   
// Check this customer matches the custID
   
if ($custID != getCustomerID($loginUsernameNULL))
   {
      
session_register("message");

      
$message "You can only view your own receipts!";
      
header("Location: example.order.1.php");
      exit;
   }


   
// Open a connection to the DBMS
   
if (!($connection = @ mysql_pconnect($hostName
                                       
$username
                                       
$password)))
      
showerror();

   if (!
mysql_select_db($databaseName$connection))
      
showerror();
    
   
// Send the user a confirmation email
   
send_confirmation_email($custID$orderID$connection);

   
// Redirect to a receipt page (this can't be the receipt page,
   // since the reload problem would cause extra emails).
   
header("Location: example.shipping.2.php?custID=$custID&orderID=$orderID");
?>


© 2000--2001 Hugh E. Williams and David Lane.
Valid HTML 4.01!