Howard, See Pascal's reply. I was incorrect. As Pascal said, ArrayAppend() returns Yes/No, depending on whether the append was successful. Should be:
<cfset tmp = ArrayAppend(session.cart, session.item)> Jim ----- Original Message ----- From: "Owens, Howard" <[EMAIL PROTECTED]> To: "CF-Talk" <[EMAIL PROTECTED]> Sent: Thursday, December 27, 2001 11:29 AM Subject: RE: Pulling My Hair Out (a shopping cart question) > Jim: > > Thanks for responding (and thank you to all who responded). > > I appreciate the pointer on CFLock timeouts. Also I like the more simplified > code. > > I've implemented a version of your simplified code. The only thing I had to > do different than you was retain the conditional with the CFElse for whether > it's a new cart or not. I was getting an error without the either/or > option. > > I was hopeful that changing > > session.cartItem= "etc" > > to > > session.cart="etc" > > would fix my problem. > > But I get an error if I do that. > > For example: > > An error occurred while evaluating the expression: > FindItem.RecordCount+1 IS ArrayLen(session.cart) > Error near line 90, column 30. > Parameter 1 of function ArrayLen which is now "YES" must be an indexed > object such as an array or a query column > > > That line part of a conditional that makes sure duplicate items are not > added to the shopping cart if user hits the reload/refresh button. > > If you want to see my code in working action, go to > http://recordoutlet.com.onemerchant.com/ This is a site still under > development, but the shopping cart works (it's not the site that I'm > currently having trouble with). I initially developed this shopping cart > code for this site and the copied it pretty much verbatim (except for > changing variable names) for the newer site I'm working on. > > H. > > > > Howard Owens > Internet Operations Coordinator > www.insidevc.com > [EMAIL PROTECTED] > AIM: GoCatGo1956 > > > > -----Original Message----- > > From: Jim McAtee [SMTP:[EMAIL PROTECTED]] > > Sent: Wednesday, December 26, 2001 5:22 PM > > To: CF-Talk > > Subject: Re: Pulling My Hair Out (a shopping cart question) > > > > ----- Original Message ----- > > From: "Owens, Howard" <[EMAIL PROTECTED]> > > To: "CF-Talk" <[EMAIL PROTECTED]> > > Sent: Wednesday, December 26, 2001 5:36 PM > > Subject: Pulling My Hair Out (a shopping cart question) > > > > > > > <cflock timeout="#createtimespan(0,0,30,0)#" > > > name="#session.sessionID#" > > > type="EXCLUSIVE"> > > > > A cflock timeout value is specified in seconds. Using CreateTimeSpan() > > with > > 30 minutes gives you a CF date/time object of 1/48th, or 0.625. Just > > specify a whole number of seconds. I've never really seen a guide to > > determining intelligent cflock timeout values, so I just use something > > like > > 5 or 10 seconds. > > > > > session.cart = ArrayNew(1); > > > session.item = StructNew(); > > > session.item.PRODUCT_ID = 0; > > > session.item.NAME = "#FindItem.SONG_TITLE#"; > > > session.item.DESCRIPTION = "#FindItem.ARTIST_FIRST_NAME# > > > #FindItem.ARTIST_LAST_NAME#"; > > > session.item.QUANTITY = 1; > > > session.item.PRICE = "#request.songprice#"; > > > session.item.ITEMTOTAL = "3"; > > > session.item.SONG_ID = "#FindItem.SONG_ID#"; > > > > In this block of code, session.item is just used as a temporary variable, > > so > > create it in the variables (or the request) scope. As a rule, you should > > minimize the amount of code encapsulated by a cflock, so this would help > > toward that goal, since you can create and define the struct outside of > > the > > lock. > > > > > > > > session.CartItems = ArrayAppend(session.cart, session.item); > > > > > > > Could this be the source of the problems you're having? Did you mean to > > do > > this, or do you mean: > > > > session.cart = ArrayAppend(session.cart, session.item); > > > > > > Simplified, the code becomes something like: > > > > <cfscript> > > item = StructNew(); > > item.PRODUCT_ID = 0; > > item.NAME = "#FindItem.SONG_TITLE#"; > > item.DESCRIPTION = "#FindItem.ARTIST_FIRST_NAME# > > #FindItem.ARTIST_LAST_NAME#"; > > item.QUANTITY = 1; > > item.PRICE = "#request.songprice#"; > > item.ITEMTOTAL = "3"; > > item.SONG_ID = "#FindItem.SONG_ID#"; > > </cfscript> > > > > <cflock name="#session.sessionID#" type="EXCLUSIVE" timeout="5"> > > <!--- If no shopping cart exists, create one ---> > > <cfparam name="session.newcart" default="no"> > > <cfif session.newcart is "no"> > > <cfset session.cart = ArrayNew(1)> > > <cfset session.newcart = "yes"> > > </cfif> > > <!--- Add item to the cart ---> > > <cfset session.cart = ArrayAppend(session.cart, item)> > > </cflock> > > > > > > Jim > > > ______________________________________________________________________ Dedicated Windows 2000 Server PIII 800 / 256 MB RAM / 40 GB HD / 20 GB MO/XFER Instant Activation � $99/Month � Free Setup http://www.pennyhost.com/redirect.cfm?adcode=coldfusiona FAQ: http://www.thenetprofits.co.uk/coldfusion/faq Archives: http://www.mail-archive.com/[email protected]/ Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

