Freelancers Network
 
skill list top cap
Homepage
Join the Freelancer's Network
Update your details
Find a freelancer
Post a project
Find a project
Projects Archive
Post a job
Find a job
Jobs Archive
See Dan's Pages
See Andy's Pages
Link to this site
Resources
Join/Leave Forum
Forum Messages
+Additions+ Adverts
Advertising
Contact Us
Subscribe to our newsletter - enter your email address and hit return
Freelancers.net is owned and operated by Andy Stowell and Dan Winchester
skill list end cap
guru web hostcom

Find me again on Freelancers.net

Re: FN-FORUM The Freelancers challenge...

date posted 19th January 2001 11:38

I think your difficulties may be due to the way you are visualising the
problem.

Don't think of the shopping cart as being on the server side. Think of it
as being on the client side, then all relevant data can be transferred
using a standard HTML form structure. When the user clicks on the buy
button, all the details are sent automatically to the server as a string of
variables attached to a URL. These would normally be directed to a server
side script (cgi) for processing.

peter
http://www.petersmall.net


>Hi all, just a quickie (to someone who knows about shopping carts).
>
>I have the following script as my "confirm order" page for my shopping
>cart. The question is, how do I mail it. I'm not a fluent coder as you
>can probably tell. I have tried using cdo mail and putting script no. as
>the body, to collect the string values of the cart but i ain't doing.
>I've been banging my head against a wall for 3 days now...there must be a
>way to email the cart values and the purchasers details. The cart resides
>at www.nydeli.co.uk/bookstoreexample/productlist.asp
>Please help!!!many many many thanks to whoever can crack this one!!!
>
>here's the scripts....
>1.
[EMAIL REMOVED] if (cStr(Request("Submit")) "") Then
>Dim objCDO
>Set objCDO = Server.CreateObject("CDONTS.NewMail")
>objCDO.From = [EMAIL REMOVED]
>objCDO.To = [EMAIL REMOVED]
>objCDO.CC = ""
>objCDO.Subject = "test"
>objCDO.Body = ""
>objCDO.Send()
>Set objCDO = Nothing
>Response.Redirect("thankyou.asp")
>End If
>%>' *** Update Record: construct a sql update statement and execute it
>MM_editAction = CStr(Request("URL"))
>If (Request.QueryString "") Then
> MM_editAction = MM_editAction & "?" & Request.QueryString
>End If
>If (CStr(Request("MM_update")) "" And CStr(Request("MM_recordId"))
>"") Then
>
> MM_tableName = "Orders"
> MM_tableCol = "OrderID"
> MM_recordId = "" + Request.Form("MM_recordId") + ""
> MM_fields =
>"shipping,Shipping,none,none,NULL,GrandTotal,GrandTotal,none,none,NULL"
> MM_redirectPage = "thankyou.asp"
>
> ' create the sql update statement
> MM_updateStr = "update " & MM_tableName & " set "
> MM_fieldsArray = Split(MM_fields, ",")
> For i = LBound(MM_fieldsArray) To UBound(MM_fieldsArray) Step 5
> FormVal = CStr(Request.Form(MM_fieldsArray(i)))
> Delim = MM_fieldsArray(i+2)
> If (Delim = "none") Then Delim = ""
> AltVal = MM_fieldsArray(i+3)
> If (AltVal = "none") Then AltVal = ""
> EmptyVal = MM_fieldsArray(i+4)
> If (EmptyVal = "none") Then EmptyVal = ""
> If (FormVal = "") Then
> FormVal = EmptyVal
> Else
> If (AltVal "") Then
> FormVal = AltVal
> ElseIf (Delim = "'") Then ' escape quotes
> FormVal = "'" & Replace(FormVal,"'","''") & "'"
> Else
> FormVal = Delim + FormVal + Delim
> End If
> End If
> If (i LBound(MM_fieldsArray)) Then
> MM_updateStr = MM_updateStr & ","
> End If
> MM_updateStr = MM_updateStr & MM_fieldsArray(i+1) & " = " & FormVal
> Next
> MM_updateStr = MM_updateStr & " where " & MM_tableCol & " = " & MM_recordId
>
> ' finish the sql and execute it
> Set MM_updateCmd = Server.CreateObject("ADODB.Command")
> MM_updateCmd.ActiveConnection = "dsn=bookshop2001;"
> MM_updateCmd.CommandText = MM_updateStr
> MM_updateCmd.Execute
>
> ' redirect with URL parameters
> If (MM_redirectPage = "") Then
> MM_redirectPage = CStr(Request("URL"))
> End If
> If (InStr(1, MM_redirectPage, "?", vbTextCompare) = 0 And
>Request.QueryString "") Then
> MM_redirectPage = MM_redirectPage & "?" & Request.QueryString
> End If
> Call Response.Redirect(MM_redirectPage)
>End If
>%>
>set rsOrders = Server.CreateObject("ADODB.Recordset")
>rsOrders.ActiveConnection = "dsn=bookshop2001;"
>rsOrders.Source = "SELECT * FROM Orders"
>rsOrders.CursorType = 0
>rsOrders.CursorLocation = 2
>rsOrders.LockType = 3
>rsOrders.Open
>rsOrders_numRows = 0
>%>
>
>//
>// UltraDev UCart include file Version 1.0
>//
>function UC_ShoppingCart(Name, cookieLifetime, colNames, colComputed) //
>Cart constructor
>{
> // Name is the name of this cart. This is not really used in this
>implementation.
> // cookieLifeTime is in days. A value of 0 means do not use cookies.
> // colNames is a list of column names (must contain: ProductID,
>Quantity, Price, Total)
> // colComputed is a list of computed columns (zero length string means
>don't compute col.)
>
> // Public methods or UC_Cart API
> this.AddItem = UCaddItem; // Add an item to the cart
> this.GetColumnValue = GetColumnValue; // Get a value from the cart
> this.Destroy = UCDestroy; // remove all items, delete
>session, delete client cookie (if any)
> this.SaveToDatabase = SaveToDatabase; // persist cart to database.
> this.GetItemCount = GetItemCount; // the number of items in
>the cart.
> this.Update = Update; // Update the cart quantities.
> this.GetColumnTotal = GetColumnTotal; // Get the sum of a cart
>column for all items (e.g. price or shipping wt.).
> this.GetContentsSerial = UCGetContentsSerial// Get the contents of the
>cart as a single delimited string
> this.SetContentsSerial = UCSetContentsSerial// Set the contents of the
>cart from a serial string (obtained from GetContentsSerial)
> this.GetColNamesSerial = UCGetColNamesSerial// Get the list of column
>names as a delimited string.
>
> // PROPERTIES
> this.SC = null; // Cart data array
> this.numCols = colNames.length;
> this.colComputed = colComputed;
> this.colNames = colNames;
> this.Name = Name;
> this.cookieLifetime = cookieLifetime;
> this.bStoreCookie = (cookieLifetime != 0);
>
> // *CONVENIENCE* PROPERTIES
> // (not used internally, but added to provide a place to store this data)
> this.CustomerID = null;
> this.OrderID = null;
> this.Tax = null;
> this.ShippingCost = null;
>
> // CONSTANTS
> this.PRODUCTID = "ProductID"; // Required SKU cart column
> this.QUANTITY = "Quantity"; // Required Quantity cart column
> this.PRICE = "Price"; // Required Price cart column
> this.TOTAL = "Total"; // Required Total column
> this.cookieColDel = "#UC_C#"
> this.cookieRowDel = "#UC_R#"
>
> // METHODS
> this.AssertCartValid = AssertCartValid
>
> // Private methods - don't call these unless you understand the internals.
> this.GetIndexOfColName = UCgetIndexOfColName;
> this.GetDataFromBindings = UCgetDataFromBindings;
> this.FindItem = UCfindItem;
> this.ComputeItemTotals = ComputeItemTotals;
> this.persist = UCpersist;
>
> this.BuildInsertColumnList = BuildInsertColumnList;
> this.BuildInsertValueList = BuildInsertValueList;
> this.UpdateQuantities = UpdateQuantities;
> this.UpdateTotals = UpdateTotals;
> this.DeleteItemsWithNoQuantity = DeleteItemsWithNoQuantity;
> this.CheckAddItemConfig = CheckAddItemConfig;
> this.ColumnExistsInRS = ColumnExistsInRS;
> this.DeleteLineItem = DeleteLineItem;
> this.GetCookieName = GetCookieName;
> this.SetCookie = SetCookie;
> this.PopulateFromCookie = PopulateFromCookie;
> this.DestroyCookie = UCDestroyCookie;
>
>// Cart "internals" documentation:
>// The this.SC datastructure is a single variable of type array.
>// Each array element corresponds to a cart column. For example:
>// Array element 1: ProductID
>// Array element 2: Quantity
>// Array element 3: Price
>// Array elemetn 4: Total
>//
>// Each of these is an array. Each array index corresponds to a line item.
>// As such, each array should always be exactly the same length.
> this.AssertCartValid(colNames, "Cart Initialization: ");
> if (Session(this.Name) != null) {
> this.SC = Session(this.Name).SC;
> } else {
> this.SC = new Array(this.numCols);
> for (var i = 0; i < this.numCols; i++) this.SC[i] = new Array();
>
> // Since the cart doesn't exist in session, check for cookie from
>previous session
> if (this.bStoreCookie){
> cookieName = this.GetCookieName();
> cookieStr = Request.Cookies(cookieName);
> if (cookieStr != null && String(cookieStr) != "undefined" &&
>cookieStr != "")
> this.PopulateFromCookie(cookieStr);
> }
> // Create a reference in the Session, pass the whole object
>(methods are not copied)
> this.persist();
> }
>}
>
>// convert vb style arrays to js style arrays.
>function UC_VbToJsArray(a) {
> if (a!=null && a.length==null) {
> a = new VBArray(a);
> a = a.toArray();
> }
> return a;
>}
>
>function UCpersist() {
> Session(this.Name) = this;
> if (this.bStoreCookie) this.SetCookie();
>}
>
>function UCDestroy(){
> this.SC = new Array(this.numCols); // empty the "in-memory" cart.
> for (var i = 0; i < this.numCols; i++) this.SC[i] = new Array();
> this.persist();
> if (this.bStoreCookie) this.DestroyCookie() // remove the cookie
>}
>
>function UCgetDataFromBindings(adoRS, bindingTypes, bindingValues) {
> var values = new Array(bindingTypes.length)
> for (i=0; i var bindVal = bindingValues[i];
> if (bindingTypes[i] == "RS"){
> values[i] = String(adoRS(bindVal).Value)
> if (values[i] == "undefined") values[i] = "";
> }
> else if (bindingTypes[i] == "FORM"){
> values[i] = String(Request(bindVal))
> if (values[i] == "undefined") values[i] = "";
> }
> else if (bindingTypes[i] == "LITERAL") values[i] = bindVal;
> else if (bindingTypes[i] == "NONE") values[i] = "";
>// no binding
> else assert(false,"Unrecognized binding type: " +
>bindingTypes[i]); // Unrecognized binding type
> }
> return values;
>}
>
>function UCfindItem(bindingTypes, values){
> // A product is a duplicate if it has the same unique ID
> // AND all values from form bindings (except quantity) are the same
> var indexProductID = this.GetIndexOfColName(this.PRODUCTID);
> var indexQuantity = this.GetIndexOfColName(this.QUANTITY);
> assert(indexProductID >=0, "UC_Cart.js: Internal error 143");
> assert(indexQuantity >=0, "UC_Cart.js: Internal error 144");
> var newRow = -1
> for (var iRow=0; iRow found = true; // assume found
> for (var iCol=0; iCol if (iCol != indexQuantity) {
> if ((iCol==indexProductID) || (bindingTypes[iCol]=="FORM")) {
> if (this.SC[iCol][iRow] != values[iCol]) {
> found = false;
> break;
> } }
> } }
> if (found) {
> newRow = iRow;
> break;
> }
> }
> return newRow
>}
>
>function UCaddItem(adoRS, bindingTypes, bindingValues, alreadyInCart){
> // alreadyInCart can be "increment" or "replace" to handle duplicate
>items in cart.
> bindingTypes = UC_VbToJsArray(bindingTypes);
> bindingValues = UC_VbToJsArray(bindingValues);
>
> // Check that length of binding types/values arrays is consistent with
>cart configuration
> assert(bindingTypes.length == this.numCols, "UCaddItem: Array length
>mismatch (internal error 403)");
> assert(bindingValues.length == this.numCols, "UCaddItem: Array length
>mismatch (internal error 404)");
>
> // debug call
> //this.CheckAddItemConfig(adoRS, bindingTypes, bindingValues);
>
> var values = this.GetDataFromBindings(adoRS, bindingTypes,
>bindingValues) // get the actual values based on bindings
> var newRow = this.FindItem(bindingTypes, values);
>// Check if this item is already in cart
> if (newRow == -1) { //
>append a new item
> newRow = this.GetItemCount();
> for (var iCol=0; iCol this.SC[iCol][newRow] = values[iCol];
> }
> this.ComputeItemTotals(newRow); // add
>computed columns (defined in colsComputed)
> this.persist();
> } else if (alreadyInCart == "increment") {
> var indexQuantity = this.GetIndexOfColName(this.QUANTITY);
> this.SC[indexQuantity][newRow] =
>parseInt(this.SC[indexQuantity][newRow]) + parseInt(values[indexQuantity])
> if (isNaN(this.SC[indexQuantity][newRow]))
>this.SC[indexQuantity][newRow] = 1;
> this.ComputeItemTotals(newRow);
> this.persist();
> }
>}
>
>function UCgetIndexOfColName(colName) {
> var retIndex = -1;
> for (var i=0; i if (this.colNames[i] == colName) {
> retIndex = i;
> break;
> }
> }
> return retIndex;
>}
>
>function ComputeItemTotals(row){
> var indexQuantity = this.GetIndexOfColName(this.QUANTITY);
> var qty = parseInt(this.SC[indexQuantity][row])
> for (var iCol=0; iCol var colToCompute = this.colComputed[iCol];
> if (colToCompute != "") {
> indexColToCompute = this.GetIndexOfColName(colToCompute);
> this.SC[iCol][row] = parseFloat(this.SC[indexColToCompute][row])
>* qty;
> }
> }
>}
>
>function CheckAddItemConfig(adoRS, bindingTypes, bindingValues) {
> var ERR_SOURCE = "CheckAddItemConfig: "
> var ERR_RS_BINDING_VALUE = "Column for Recordset binding does not
>exist in recordset";
> // Check that all rs column names exist for rs binding types
> for (var i = 0; i < bindingTypes.length; i++) {
> if (bindingTypes[i] == "RS"){
> assert(this.ColumnExistsInRS(adoRS, bindingValues[i]),
>ERR_SOURCE + bindingValues[i] + ": " + ERR_RS_BINDING_VALUE);
> }
> }
>}
>
>function ColumnExistsInRS(adoRS, colName) {
> var bColExists = false;
> var items = new Enumerator(adoRS.Fields);
> while (!items.atEnd()) {
> if (items.item().Name == colName){
> bColExists = true;
> break;
> }
> items.moveNext();
> }
> return bColExists;
>}
>
>function GetColumnValue(colName, row){
> var retValue = " ";
> var indexCol = this.GetIndexOfColName(colName);
> assert(!isNaN(row), "cart.GetColumnValue: row is not a number - row =
>" + row);
> assert(indexCol >=0, "cart.GetColumnValue: Could not find column "" +
>colName + "" in the cart");
> assert(row>=0, "cart.GetColumnValue: Bad row number input to cart - row
>= " + row);
> assert(this.GetItemCount()>0, "cart.GetColumnValue: The cart is empty -
>the requested data is unavailable");
> assert(rownumber is greater than the number of items in the cart - row = " + row +
>"; GetItemCount = " + this.GetItemCount());
> if (this.GetItemCount()>0) {
> retValue = this.SC[indexCol][row];
> }
> return retValue;
>}
>
>function UpdateQuantities(formElementName) {
> var items = new Enumerator(Request.Form(formElementName))
> var j = 0;
> indexQuantity = this.GetIndexOfColName(this.QUANTITY);
> while(!items.atEnd()){
> var qty = parseInt(items.item());
> if (isNaN(qty) || qty < 0) {
> this.SC[indexQuantity][j++] = 0
> } else {
> this.SC[indexQuantity][j++] = qty;
> }
> items.moveNext();
> }
>}
>
>function UpdateTotals() {
> // this would be a little more efficient by making the outer loop over
>cols rather than rows.
> for (var iRow=0; iRow this.ComputeItemTotals(iRow);
> }
>}
>
>function DeleteItemsWithNoQuantity() {
> var tmpSC= new Array(this.numCols);
> for (var iCol=0; iCol
> var indexQuantity = this.GetIndexOfColName(this.QUANTITY);
> var iDest = 0;
> for (var iRow=0; iRow if (this.SC[indexQuantity][iRow] != 0) {
> for (iCol=0; iCol tmpSC[iCol][iDest] = this.SC[iCol][iRow];
> }
> iDest++;
> }
> }
> this.SC = tmpSC;
>}
>
>function Update(formElementName){
> // Get new quantity values from Request object.
> // Assume they are all named the same, so you will get
> // an array. The array length should be the same as the number
> // of line items and in the same order.
> this.UpdateQuantities(formElementName);
> this.DeleteItemsWithNoQuantity();
> this.UpdateTotals();
> this.persist();
>}
>
>function BuildInsertColumnList(orderIDCol, mappings){
> var colList = orderIDCol;
> for (var i = 0; i < mappings.length; i++) {
> if (mappings[i] != ""){
> colList += ", " + mappings[i];
> }
> }
> colList = "(" + colList + ")";
> return colList;
>}
>
>function BuildInsertValueList(orderIDColType, orderIDVal, destCols,
>destColTypes, row){
> var values = "";
> if (orderIDColType == "num") {
> values += orderIDVal;
> } else {
> values += "'" + orderIDVal.toString().replace(/'/g, "''") + "'";
> }
>
> for (var iCol=0; iCol if (destCols[iCol] != "") {
> if (destColTypes[iCol] == "num") {
> assert(this.SC[iCol][row] != "", "SaveToDatabase: A numeric value
>is missing in the SQL statement in column " + this.colNames[iCol]);
> values += ", " + this.SC[iCol][row];
> } else {
> values += ", '" +
>(this.SC[iCol][row]).toString().replace(/'/g, "''") + "'";
> }
> }
> }
> values = "(" + values + ")";
> return values;
>}
>
>function SaveToDatabase(adoConn, dbTable, orderIDCol, orderIDColType,
>orderIDVal, destCols, destColTypes){
> // we are going to build SQL INSERT statements and
> // throw it at the connection / table
> // Similar to existing UD insert to database behavior
> var ERR_MAPPINGS_LENGTH = "Array length must match the number of cart
>columns";
> var ERR_TRANS = "An error occured when inserting cart items in the
>database. The transaction was rolled back";
> var destCols = UC_VbToJsArray(destCols);
> var destColTypes = UC_VbToJsArray(destColTypes);
> assert (destCols.length == this.numCols, "SaveToDatabase: " +
>"destCols - " + ERR_MAPPINGS_LENGTH);
> assert (destColTypes.length == this.numCols, "SaveToDatabase: " +
>"destColTypes - " + ERR_MAPPINGS_LENGTH);
>
> var insertColList = this.BuildInsertColumnList(orderIDCol, destCols);
>
> if (insertColList != "") { //proceed only if we have a column list
> var insertClause = "INSERT INTO " + dbTable + " " + insertColList
>+ " VALUES ";
> var recs;
> adoConn.BeginTrans();
> for (var iRow=0; iRow var valList = this.BuildInsertValueList(orderIDColType,
>orderIDVal, destCols, destColTypes, iRow);
> var sql = insertClause + valList;
> adoConn.Execute(sql, recs, 1 /*adCmdText*/);
> }
> if (adoConn.Errors.Count == 0){
> adoConn.CommitTrans();
> this.Destroy(); // All items saved to database, we can trash
>the cart
> } else {
> adoConn.RollbackTrans();
> //assert(false, "SaveToDatabase: " + ERR_TRANS); Don't assert
>here - let ASP display the database error.
> }
> }
>}
>
>function GetItemCount(){
> return this.SC[0].length
>}
>
>function GetColumnTotal(colName){
> // Generic column Total function
> var colTotal = 0.0;
> index = this.GetIndexOfColName(colName);
> for (var i=0; i colTotal += parseFloat(this.SC[index][i]);
>
> return colTotal
>}
>
>
>function DeleteLineItem(row){
> assert(!isNaN(row), "Failure in call to DeleteLineItem - row is not a
>number");
> assert(row>=0 && row DeleteLineItem (internal error 121)");
>
> var tmpSC= new Array(this.numCols);
> var iDest = 0;
> for (var iCol=0; iCol for (var iRow=0; iRow if (iRow != row) {
> for (iCol=0; iCol tmpSC[iCol][iDest] = this.SC[iCol][iRow];
> }
> iDest++;
> }
> }
> this.SC = tmpSC;
> this.persist();
>}
>
>function UCGetColNamesSerial(colDelim) {
> var serialCols = "";
> for (var iCol=0; iCol if (iCol != 0) serialCols += colDelim;
> serialCols += this.colNames[iCol];
> }
> return serialCols;
>}
>
>function UCGetContentsSerial(colDelim, rowDelim) {
> var serialCart = "";
> for (var iRow=0; iRow if (iRow != 0) serialCart += rowDelim
> for (var iCol=0; iCol if (iCol != 0) serialCart += colDelim;
> serialCart += this.SC[iCol][iRow];
> }
> }
> return serialCart;
>}
>
>function UCSetContentsSerial(serialCart, colDelim, rowDelim) {
> var Rows = String(serialCart).split(rowDelim)
> for (iRow = 0; iRow < Rows.length; iRow++) {
> if (Rows[iRow] != "undefined" && Rows[iRow] != "") {
> Cols = Rows[iRow].split(colDelim)
> iCol = 0
> for (iCol = 0; iCol this.SC[iCol][iRow] = Cols[iCol]
> }
> }
> }
> this.persist();
>}
>
>function SetCookie(){
> var cookieName = this.GetCookieName()
> var cookieStr = this.GetContentsSerial(this.cookieColDel,
>this.cookieRowDel)
> var cookieExp = GetCookieExp(this.cookieLifetime)
> Response.Cookies(cookieName) = cookieStr
> Response.Cookies(cookieName).expires = cookieExp
>}
>
>function GetCookieName(){
> var server = Request.ServerVariables("SERVER_NAME");
> return server + this.Name;
>}
>
>function UCDestroyCookie(){
> cookieName = this.GetCookieName();
> Response.Cookies(cookieName) = ""
> Response.Cookies(cookieName).expires = "1/1/90"
>}
>
>function PopulateFromCookie(cookieStr){
> this.SetContentsSerial(cookieStr, this.cookieColDel, this.cookieRowDel)
>}
>
>// ***************** debug code ********************
>function assert(bool, msg) {
> if (!bool) {
> Response.Write("An error occured in the UltraDev shopping
>cart:" + msg + "");
> //Response.End();
> }
>}
>
>function AssertCartValid(colNames, msg) {
> // go through all cart data structures and insure consistency.
> // For example all column arrays should be the same length.
> // this function should be called often, especially just after
> // makeing changes to the data structures (adding, deleting, etc.)
> // also verify we always have the required columns:
> // ProductID, Quantity, Price, Total
>
> // the input arg is some I add as I code this package like
> // "Prior to return from AddToCart"
> //
> var ERR_COOKIE_SETTINGS = "Cookie settings on this page are
>inconsistent with those stored in the session cart";
> var ERR_BAD_NAME = "Cart name defined on this page is inconsistent
>with the cart name stored in the session";
> var ERR_COLUMN_COUNT = "The number of cart columns defined on this
>page is inconsistent with the cart stored in the session";
> var ERR_REQUIRED_COLUMNS = "Too few columns; minimum number of columns
>is 4";
> var ERR_REQUIRED_COLUMN_NAME = "Required Column is missing or at the
>wrong offset: ";
> var ERR_COLUMN_NAMES = "Cart column names defined on this page are
>inconsistent with the cart stored in the session";
> var ERR_INCONSISTENT_ARRAY_LENGTH = "Length of the arrays passed to
>cart constructor are inconsistent"
> var errMsg = "";
> var sessCart = Session(this.Name);
>
> if (sessCart != null) { // Validate inputs against session cart if it
>exists
> if (sessCart.Name != this.Name) errMsg += ERR_BAD_NAME;
> if (this.numCols < 4) errMsg += ERR_REQUIRED_COLUMNS;
> if (sessCart.numCols != this.numCols) errMsg += "Column Name
>Array: " + ERR_COLUMN_COUNT;
> if (sessCart.numCols != this.colComputed.length) errMsg +=
>"Computed Column Array: " + ERR_COLUMN_COUNT;
> if (sessCart.bStoreCookie != this.bStoreCookie) errMsg += "Using
>Cookies: " + ERR_COOKIE_SETTINGS;
> if (sessCart.cookieLifetime != this.cookieLifetime) errMsg +=
>"Cookie Lifetime: " + ERR_COOKIE_SETTINGS;
>
> // check that required columns are in the same place
> var productIndex = this.GetIndexOfColName(this.PRODUCTID);
> var quantityIndex = this.GetIndexOfColName(this.QUANTITY);
> var priceIndex = this.GetIndexOfColName(this.PRICE);
> var totalIndex = this.GetIndexOfColName(this.TOTAL);
>
> if (colNames[productIndex] != "ProductID") errMsg +=
>ERR_REQUIRED_COLUMN_NAME + "ProductID";
> if (colNames[quantityIndex] != "Quantity") errMsg +=
>ERR_REQUIRED_COLUMN_NAME + "Quantity";
> if (colNames[priceIndex] != "Price") errMsg +=
>ERR_REQUIRED_COLUMN_NAME + "Price";
> if (colNames[totalIndex] != "Total") errMsg +=
>ERR_REQUIRED_COLUMN_NAME + "Total";
> }
> else { // if cart doesn't exist in session, validate input array
>lengths and presence of reqiured columns
> if (this.numCols != this.colComputed.length) errMsg +=
>ERR_INCONSISTENT_ARRAY_LENGTH;
>
> var bProductID = false, bQuantity = false, bPrice = false, bTotal
>= false;
>
> for (var j = 0; j < colNames.length; j++) {
> if (colNames[j] == "ProductID") bProductID = true;
> if (colNames[j] == "Quantity") bQuantity= true;
> if (colNames[j] == "Price") bPrice = true;
> if (colNames[j] == "Total") bTotal = true;
> }
> if (!bProductID) errMsg += ERR_REQUIRED_COLUMN_NAME + "ProductID";
> if (!bQuantity) errMsg += ERR_REQUIRED_COLUMN_NAME + "Quantity";
> if (!bPrice) errMsg += ERR_REQUIRED_COLUMN_NAME + "Price";
> if (!bTotal) errMsg += ERR_REQUIRED_COLUMN_NAME + "Total";
> }
>
> if (errMsg != "") {
> Response.Write(msg + "");
> Response.Write(errMsg + "");
> Response.End();
> }
>}
>
>function VBConstuctCart(Name, cookieLifetime, vbArrColNames,
>vbArrColComputed){
> var myObj;
> var a = new VBArray(vbArrColNames);
> var b = new VBArray(vbArrColComputed);
> eval("myObj = new UC_ShoppingCart(Name, cookieLifetime, a.toArray(),
>b.toArray())");
> return myObj;
>}
>
>
>Function GetCookieExp(expDays)
> vDate = DateAdd("d", CInt(expDays), Now())
> GetCookieExp = CStr(vDate)
>End Function
>
>
>function DoNumber(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
> DoNumber = FormatNumber(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
>End Function
>
>function DoCurrency(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
> DoCurrency = FormatCurrency(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
>End Function
>
>function DoDateTime(str, nNamedFormat, nLCID)
> dim strRet
> dim nOldLCID
>
> strRet = str
> If (nLCID > -1) Then
> oldLCID = Session.LCID
> End If
>
> On Error Resume Next
>
> If (nLCID > -1) Then
> Session.LCID = nLCID
> End If
>
> If ((nLCID < 0) Or (Session.LCID = nLCID)) Then
> strRet = FormatDateTime(str, nNamedFormat)
> End If
>
> If (nLCID > -1) Then
> Session.LCID = oldLCID
> End If
>
> DoDateTime = strRet
>End Function
>
>function DoPercent(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
> DoPercent = FormatPercent(str, nDigitsAfterDecimal, nLeadingDigit,
>nUseParensForNeg, nGroupDigits)
>End Function
>
>function DoTrim(str, side)
> dim strRet
> strRet = str
>
> If (side = "left") Then
> strRet = LTrim(str)
> ElseIf (side = "right") Then
> strRet = RTrim(str)
> Else
> strRet = Trim(str)
> End If
> DoTrim = strRet
>End Function
>
>UC_CartColNames=Array("ProductID","Quantity","Title","UnitWeight","TotalWeight"
>,"GiftWrap","Price","Total")
>UC_ComputedCols=Array("","","","","UnitWeight","","","Price")
>set UCCart1=VBConstuctCart("UCCart1",2,UC_CartColNames,UC_ComputedCols)
>UCCart1__i=0
>%> If InStr(1, MM_editAction, "?", vbTextCompare) = 0 Then
> MM_editAction = MM_editAction + "?UC_SaveCartToTable=1"
>Else
> MM_editAction = MM_editAction + "&UC_SaveCartToTable=1"
>End If
>If (CStr(Request("UC_SaveCartToTable")) = "1") Then
> set UC_connCart = Server.CreateObject("ADODB.Connection")
> UC_connCart.Open "dsn=bookshop2001;"
> UC_redirectPage = "ThankYou.asp"
> UC_destColName =
>Array("","Quantity","","UnitWeight","","GiftWrapping","UnitPrice","")
> UC_destColType = Array("str","num","str","num","str","str","num","str")
> UC_orderId = Session("OrderID")
> UCCart1.SaveToDatabase
>UC_connCart,"OrderDetails","OrderID","num",UC_orderId,UC_destColName,UC_destColT
>ype
> ' redirect with URL parameters (remove the "UC_SaveCartToTable" query
>param).
> if (UC_redirectPage = "") Then UC_redirectPage =
>CStr(Request.ServerVariables("URL"))
> If (InStr(1, UC_redirectPage, "?", vbTextCompare) = 0 And
>Request.QueryString "") Then
> newQS = "?"
> For Each Item In Request.QueryString
> If (Item "UC_SaveCartToTable") Then
> If (Len(newQS) > 1) Then newQS = newQS & "&"
> newQS = newQS & Item & "=" &
>Server.URLencode(Request.QueryString(Item))
> End If
> Next
> if (Len(newQS) > 1) Then UC_redirectPage = UC_redirectPage & newQS
> End If
> Response.Redirect(UC_redirectPage)
>End If
>%> ' Business rules are coded here.
>shipping = 0.2 * CSng(UCCart1.GetColumnTotal("TotalWeight"))
>grandTotal = CCur(UCCart1.GetColumnTotal("Total")) + shipping
>UC_rowDelim = Chr(13) & Chr(10) & Chr(13) & Chr(10)
>UC_colDelim = Chr(13) & Chr(10)
>CartData = "UCCart1"
>for jRow=0 to UCCart1.GetItemCount() -1
> if (iRow 0) Then CartData = CartData & UC_rowDelim
> CartData = CartData & "Title: " & _
> UCCart1.GetColumnValue("Title",jRow) & UC_colDelim
> CartData = CartData & "Quantity: " & _
> UCCart1.GetColumnValue("Quantity",jRow) & UC_colDelim
> CartData = CartData & "Price: $" & _
> UCCart1.GetColumnValue("Price",jRow) & UC_colDelim
> CartData = CartData & "Total: $" & _
> UCCart1.GetColumnValue("Total",jRow) & UC_colDelim
> CartData = CartData & UC_rowDelim
>Next
>
>%>
>
>
>Untitled Document
>
>
>
>Finalize Order Page
>
>
>
>
> ,
>
>
>
>
>
> ISBN
> Title
> Gift wrap
> Weight
> Quantity
> Price
> Total
>
>
>
>
>
>
> FormatNumber((UCCart1.GetColumnValue("UnitWeight",UCCart1__i)), 2, -2, -2,
>-2) %>
> action="">
>
> FormatCurrency((UCCart1.GetColumnValue("Price",UCCart1__i)), -1, -2, -2,
>-2) %>
> FormatCurrency((UCCart1.GetColumnValue("Total",UCCart1__i)), -1, -2, -2,
>-2) %>
>
>
>
>
> SubTotal
>
> -1, -2, -2, -2) %>
>
>
>
> Total Shipping Weight: FormatNumber((UCCart1.GetColumnTotal("TotalWeight")), 2, -2, -2, -2)
>%>lbs. ($.20 / lb.)
>
>
>
>
>
>
> Grand Total
>
>
>
>
>
>
>
>
>
>
> ">
>
>
>
>
>
>
>
>
>
>2.
>UC_rowDelim = Chr(13) & Chr(10) & Chr(13) & Chr(10)
>UC_colDelim = Chr(13) & Chr(10)
>CartData = ""
>for jRow=0 to UCCart1.GetItemCount() -1
> if (iRow 0) Then CartData = CartData & UC_rowDelim
> CartData = CartData & "Title: " & _
> UCCart1.GetColumnValue("Title",jRow) & UC_colDelim
> CartData = CartData & "Quantity: " & _
> UCCart1.GetColumnValue("Quantity",jRow) & UC_colDelim
> CartData = CartData & "Price: $" & _
> UCCart1.GetColumnValue("Price",jRow) & UC_colDelim
> CartData = CartData & "Total: $" & _
> UCCart1.GetColumnValue("Total",jRow) & UC_colDelim
> CartData = CartData & UC_rowDelim
>Next
>
>
>
>
>============================================================
>
> * Free listing for freelancers
> * Free to advertise jobs
> * Free jobs distribution service
> * Free database of 1000 freelancers
>
>Freelancers and Freelance Jobs
>http://www.freelancers.net
>
>To post to the Forum:
[EMAIL REMOVED]
>
>To unsubscribe please email:
[EMAIL REMOVED]
>
>If you have difficulties unsubscribing please email:
[EMAIL REMOVED]
>
>To subscribe to the digest for this list or for further information please
>visit:
>http://www.freelancers.net/forum.html





Messages by Day
January 31st 2001
January 30th 2001
January 29th 2001
January 28th 2001
January 27th 2001
January 26th 2001
January 25th 2001
January 24th 2001
January 23rd 2001
January 22nd 2001
January 21st 2001
January 20th 2001
January 19th 2001
January 18th 2001
January 17th 2001
January 16th 2001
January 15th 2001
January 14th 2001
January 13th 2001
January 12th 2001
January 11th 2001
January 10th 2001
January 9th 2001
January 8th 2001
January 7th 2001
January 6th 2001
January 5th 2001
January 4th 2001
January 3rd 2001
January 2nd 2001
January 1st 2001


Messages by Month
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
January 2001


Messages by Year
2008
2007
2006
2005
2004
2003
2002
2001
2000