Listing 1

<cfscript>
  // Create form variables
  FORM.BillingFirstName = "Selene";
  FORM.BillingLastName = "Bainum";
  FORM.ShippingFirstName = "Dave";
  FORM.ShippingLastName = "Bainum";
  FORM.ItemCount = 2;
  FORM.ItemID_1 = 2;
  FORM.ItemPrice_1 = 12.00;
  FORM.ItemQuantity_1 = 1;
  FORM.ItemID_2 = 12;
  FORM.ItemPrice_2 = 9.99;
  FORM.ItemQuantity_2 = 3;
  FORM.CCNum = "xxxx";
  FORM.ExpDate = "12/06";

  // Convert form to structure
  Cart = StructNew();
  Cart.BillingStruct = StructNew();
  Cart.BillingStruct.FirstName = FORM.BillingFirstName;
  Cart.BillingStruct.LastName = FORM.BillingLastName;
  Cart.ShippingStruct = StructNew();
  Cart.ShippingStruct.FirstName = FORM.ShippingFirstName;
  Cart.ShippingStruct.LastName = FORM.ShippingLastName;
  // Create an array to hold the items
  Cart.Items = ArrayNew(1);
  // Loop over the number of items in the cart
  for (i = 1; i LTE FORM.ItemCount; i = i + 1) {
    // Create a structure for each item
    Cart.Items[i] = StructNew();
    Cart.Items[i].ItemID = FORM["ItemID_" & i];
    Cart.Items[i].Price = FORM["ItemPrice_" & i];
    Cart.Items[i].Quantity = FORM["ItemQuantity_" & i];
  }
  Cart.CCNum = FORM.CCNum;
  Cart.ExpDate = FORM.ExpDate;
</cfscript>


Listing 2

<cfscript>
  // Call the function and pass in the Cart structure
  ProcessCart(CartStruct = Cart);
</cfscript>

<!--- Define the function. --->
<cffunction name="ProcessCart" access="remote" returntype="string">

  <!--- Define the argument. --->
  <cfargument name="CartStruct" type="struct" required="yes" />

  <cftransaction>

  <!--- Insert Cart info. --->
  <cfquery ...>
  INSERT INTO Cart(PurchaseDate, CCNum, ExpDate)
  VALUES (#Now()#, '#Arguments.CartStruct.CCNum#', '#Arguments.CartStruct.ExpDate#')
  </cfquery>

  <!--- GetID. --->
  <cfquery name="GetID" ...>
  SELECT MAX(CartID) AS ThisID FROM Cart
  </cfquery>
  <cfset CartID = GetID.ThisID />

  <!--- Insert billing info. --->
  <cfquery ...>
  INSERT INTO CartBilling (CartID, FirstName, LastName)
  VALUES (#CartID#, '#CartStruct.BillingStruct.FirstName#', '#CartStruct.BillingStruct.LastName#')
  </cfquery>

  <!--- Insert the shipping info. --->
  <cfquery ...>
  INSERT INTO CartShipping (CartID, FirstName, LastName)
  VALUES (#CartID#, '#CartStruct.ShippingStruct.FirstName#', '#CartStruct.ShippingStruct.LastName#')
  </cfquery>

  <!--- Loop over the items and insert. --->
  <cfloop from="1" to="#ArrayLen(Arguments.CartStruct.Items)#" index="i">
    <cfquery ...>
    INSERT INTO CartItem (CartID, ItemID, Price, Quantity)
    VALUES (#CartID#, #Arguments.CartStruct.Items[i].ItemID#, #Arguments.CartStruct.Items[i].Price#,
	 #Arguments.CartStruct.Items[i].Quantity#)
    </cfquery>
  </cfloop>

  </cftransaction>

</cffunction>