僅用PHP4 Session實現的迷你購物籃(一)

來源:互聯網
上載者:User
session 介紹
  如果你還沒有用PHP 實現你自已的購物籃,在讀完這篇文章之後你應該可以建立一個了。甚至你可能已
經有了一個購物籃,我在這裡所提供的一些技巧可能會協助你改善你的系統。

  我將給你一些提示,關於如何去做也許才能減少對購物籃表的無限的查詢,或減少無限的文字檔填充
你的檔案系統,因為應用程式只會做但不會刪除它們。

  如果你對這類的題目是個新手,不要害怕。它實際上相當簡單和有效,你只需要一個支援php4的主機,
象notepad或vi之類的html編輯器,你寶貴的幾分種,和這個小例子。


想法
  在1998年,我有一個在硬體商店工作的朋友要求我為他們編寫一個線上商店。需要快速和簡單,同時還
要有線上管理。當我發著39度高燒的時候我變得想當有建立力,所以我用perl寫了那個東西,使用minisql
作為後端。在整個處理中我插入了我所提到的迷你購物籃。

  這個迷你購物籃與平常的購物車只有很小的不同,它會在每一頁顯示你的購物車的東西,不需要在放入
一件東西後在購物車來回跳轉。這就是我寫這篇文章的初衷。


目標
  人們喜歡控制,那麼為什麼不給他們些透明度,以便讓他們相信擁有了控制?這個迷你購物籃示範了一
個完美的方法:它提供給人們所必須的資訊,並且節省了他們一次點擊,接近了線上商店的3擊範例。

  所以,目標就是在任何時候將這個迷你購物籃顯示為你的頁面上的一部分,在結尾處提供一個摘要用以
修改購物籃中的物品,接著在最後發送一個訂單。

要求
  你應該知道什麼是session。如果不知道,這裡有一個快速的綱要。已經有很多文章關於這個話題,你
可以從中找到所有你需要的代碼例子。在你的開始頁面開啟一個session,使用

<?php

session_start();

?>

  這樣將建立一個session名字和一個session id。你現在既可以使用預設的通過基於cookie的設定session
的方式,通過一個表單來傳遞session id,或把它作為一個變數附在你的連結上(get方法)的方法。不要忘
記在最後釋放session。:)

  你的商品應該有一個名字,價格和唯一標識,以便能用在這個例子中,如果不這樣,你可能需要做一點
修改。這裡我使用mysql作為後端以便建立頁面及其它,為了讓購物能工作這不是必須的。:)

  你應該瞭解數組。現在如果有人有時間利用My Code並且建立一個它的類,我理所當然地要感激得到它。

定義
  為了簡化這個例子,我使用了四個獨立的數組和一些額外的變數。代碼可以被最佳化。這樣可以很容易地
顯示想法和閱讀代碼。可以使用類更好的完成,但是我不能十分肯定是否能夠把對象儲存到session 裡。有
人想對此發表評論嗎?

  我們還需要一個項目計數器。當然可以使用count() 命令來實現,我只不過認為它足夠好,以便總能知
道有多少的項目,並且它也為迴圈提供了一個好的計數器。

工作
  讓我們假設在你的HTML頁中有一個商品列表

ID Name Price
1 Mouse 25.00 add
2 Key 100.00 add
3 Car 5000.00 add
4 Game 25.00 add

向你的頁面增加連結

  上面的'add'欄位應該是一個連結,用來將商品放到迷你購物籃中。使用$PHP_SELF將這個連結指向它自
已。然後向它增加商品資訊。這裡是商品1的例子。

<A HREF="<?echo $PHP_SELF;?>?id=1&price=25&basket=Mouse">add</A>

  商品的名稱能夠包含空格,所以將它放在連結的最後。Get方法好象對這個很挑剔。

準備迷你購物籃

  為了代碼重用,讓我們建立一個額外的檔案minibasket.inc。我使用.inc副檔名來標識我的包括檔案。
使用這個外部檔案的原因是,儘管你將使用session變數來傳遞給購物籃,代碼仍然需要有效。這個檔案將
包含顯示迷你購物籃的代碼,也包話增加項目的函數。實現它的最好的地方是將 <?php include ("minibasket.inc"); ?> 命令放在你需要的地方。

minibasket.inc的邏輯

  花些時間考慮一下這個。迷你購物籃應該是個什麼樣子,它需要些什麼特性?這裡顯示的迷你購物籃應
該看上去象這樣:

# Name Price
1 Mouse 25.00
3 Game 75.00
Total 100.00

  你可以很容易的通過使用一個外部樣式表格式化這個輸出。可是,它不應該太大。這個迷你購物籃是一
個資訊,然而它不應該成為你所顯示頁面的焦點。

  這個檔案的邏輯非常簡單。

檢查是否需要增加一個新的項目。
如果true,增加項目
在加入中,它要檢查複重的記錄,通過更新數量和價格來更新存在的記錄。
片段1。檢查將要增加的新的項目

  這是一個正常的IF語句,用於檢查$basket變數的值。

<?php

if ($basket!=""){
//向籃子中加入項目
}

?>

片段2。在瀏覽器中顯示籃子

<?php

if ($ses_basket_items>0){
// 如果在籃子中有項目
for ($basket_counter=0;$basket_counter<$ses_basket_items;$basket_counter++){
// 遍曆籃子,列印出每一行
// 你當然可以用格表來格式化顯示
// 需要通過格式化來顯示價格的分值。如果沒有格式化,則.00是不會顯示出來的
$price=sprintf("%01.2f",$ses_basket_price[$basket_counter]);
$amount=$ses_basket_amount[$basket_counter];
$name=$ses_basket_name[$basket_counter];
echo "$amount $name $price";
echo "<BR>\n";
}
} else {
// 在籃子中沒有商品
// 設定項目計數為0,且清除所有的變數
// 這是一個清除處理。它防止人們得到舊的數組
$ses_basket_items=0;
unset($ses_basket_name);
unset($ses_basket_amount);
unset($ses_basket_price);
unset($ses_basket_id);
}

?>

  這段代碼不會產生任何結果。項目還沒有被填充,籃子總是空的,所以籃子不會被顯示。那麼讓我們向
這個籃子中加些項目吧。




相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。