為了講解方便,突出重點,本文用數組實現要顯示的商品信息。但在實際的系統開發中,這些商品信息的數據應該來自后臺數據庫。 在程序中,我們定義了一個sp數組并對其賦值,然后用一個循環實現其數據顯示及對下一個程序的數據傳遞。程序部分代碼如下:
<% i=1 do while (i<=5) %> <tr > <td><%=sp(i)%></td> <td><a href=“cart.asp?spid=<%=sp(i)%>”>訂購</a></td> </tr> <% i=i+1 loop %> 構建購物小車 為處理用戶訂購商品的操作,我們自定義了兩個Session的屬性,分別是“spid”(用來保存商品名稱)和“num”(用來保存相應商品的訂購數量)。當用戶訂購了一種商品后,我們分三種情況對Session進行處理: ●購物小車為空,即Session(“spid")=“",直接將spid與num加入Session; ●購物小車非空且當前訂購的商品是購物小車中沒有的,則處理方法同上; ●購物小車非空但當前訂購的商品是購物小車中已有的,Session保持不變。 程序實現的要點是如何判別當前訂購的商品在購物小車中是否存在,因此,首先要將Session變量的內容拆分并存入數組: array1=split(Session(“spid”),“:”) 然后用循環語句判別array1中是否有元素與傳遞來的spid相同并將結果存入變量ifbuy:
for i=0 to ubound(array1)-1 if array1(i)= Request.QueryString(“spid”) then ifbuy=true exit for end if next 將新增的商品信息加入Session: Session(“spid”)=Session(“spid”)& Request. QueryString(“spid”)&“:” Session對象的另一個自定義屬性num的處理同spid相同。 購物小車的顯示 顯示用戶已經購買的商品信息,即是顯示Session變量的內容。只要將Session變量的內容拆分,存入數組中,再顯示數組的內容即可。購物小車的顯示界面如圖1所示,其中“數量”欄的類型為“text",“取消本商品”欄的類型為“checkbox”。這兩欄的數據是可以變動的,在“取消本商品”欄中打“√”,再按“重新計算”,將在購物小車中取消該商品。

圖1
“重新計算”和“繼續購買”兩個命令按鈕用JavaScript實現:
<script language=“JavaScript"> <!-- function onback(theForm) {window.history.back() } function recal(theForm) {theform.action=“modifycart.asp" } --> </script>
實現顯示購物小車的代碼如下:
<% dim k array1=split(Session(“spid”),“:”) array2=split(Session(“num”),“:”) k=0 do while k<ubound(array1) %> <tr> <td><p align=“center”><%=array1(k)%> </p></td> <td><p><input type=“text” name=“t1” size=“10” value=“<%=array2(k)%>”></p></td> <td><p><input type=“checkbox” name= “ifcancel” value=<%=k%> ></p></td></tr> <% k=k+1 loop %> <tr> <td align=center height=“42” colspan=“2”> <input type=“submit” name=“submit” value=“重新計算” onclick=“return recal(this.form)”></td> <td align=center height=“42” colspan=“3”> <input type=“submit” name=“Submit” value=“繼續購買” onclick=“return onback(this.form)”></td> </tr>
購物小車的修改 在用戶點擊“重新計算”按鈕后,需要對購物小車的內容進行修改,包括對數量的修改和將被取消的商品從Session中刪除。 對于數量的修改,只要將文本框中被變動過的數據重新存入Session中即可:
<% ’首先將保存在Session變量中的訂購數量提取出來 array=split(Session(“num”),“:”) ’將文本框t1中商品的數量提取出來,存入array數組中 if Request.Form(“t1”)<>“”then Session(“num”)=“” j=0 for each item in Request.Form(“t1”) array(j)=item j=j+1 next ’將提交后的商品數量放入Session變量中 for i=0 to ubound(array)-1 Session(“num”)=Session(“num”)&array(i)&“:” next end if %> 要從Session中刪除被選中的商品,首先要取得“checkbox”的返回值,它用來定位被取消的商品在Session變量中的位置!癱heckbox”的返回值k是一個循環變量,是商品所在行的行數,其實也就是被選中商品在Session中的位置。如果不加返回值定義的話,“checkbox”的返回值是按自然數順序排列的。例如,在圖1所示的情況下,如果“電視機”和“書籍”兩行被選中,若是“checkbox”不加返回值定義,它的返回值將分別為1和2,這樣就會導致把“電視機”和“鋼筆”從Session中刪除的錯誤。
<% dim array1,array2,ifcancel(20),m1,m2,i,j array1=split(Session(“spid”),“:”) array2=split(Session(“num”),“:”) m1=ubound(array1)-1 m2=ubound(array2)-1 ’保存復選框checkbox的值 for i=1 to Request.Form (“ifcancel”).Count ifcancel(i)=Request.Form (“ifcancel”)(i) next for i=1 to Request.Form (“ifcancel”).Count ’將checkbox選中的spid和num從Session中去掉 for j=ifcancel(j) to m1-1 array1(j)=array1(j+1) array2(j)=array2(j+1) next ’將總數減1,并將后面的checkbox的值減1 m1=m1-1 for p=i to Request.Form (“ifcancel”).Count ifcancel(p)=ifcancel(p)-1 next ’將處理后的spid和num放回Session Session(“spid”)=“” Session(“num”)=“” for j=0 to m1 Session(“spid”)=Session(“spid”)&array1(j)&“:” Session(“num”)=Session(“num”)&array2(j)&“:” next next %> 本文重點說明購物小車的實現與修改,所以對數據進行了簡單化處理。在實際的商業系統中,對數據的處理要復雜得多,例如需要例外及安全驗證等。
|