Yes, ArrayAppend() returns a boolean ... on a successful completion of the append.
ArrayAppend() _should_ add a new index to the array, then it returns a TRUE. As I wrote the above, I had another idea for a debugging test ... I ran an output on the results of the arrayappend() and, in fact, it returned true .. even though the new item is not showing up in the array. Now this is weird -- the output for the cart is still showing only one item. BUT, arrayLen() now returns a 2 (as it should) rather than 1, as it did yesterday. Which leads me back to looking at my output :-( Well, OK, so I do an arrayLen() right before I loop through the array and I get a 1 (while the one right after the append takes place returns 2). Ummm ... still stumped ... time for lunch than more testing and hair pulling. H. Howard Owens Internet Operations Coordinator www.insidevc.com [EMAIL PROTECTED] AIM: GoCatGo1956 > -----Original Message----- > From: Jim McAtee [SMTP:[EMAIL PROTECTED]] > Sent: Thursday, December 27, 2001 11:34 AM > To: CF-Talk > Subject: Re: Pulling My Hair Out (a shopping cart question) > > 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 > > > > > > ______________________________________________________________________ Get Your Own 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=coldfusionb 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

