2011-11-30 53 views
0

我想在php中創建一次下載鏈接,因爲我的客戶想在其網站上銷售公交車票。我是一個begginer /從來沒有真正寫過我自己的PHP,我試圖創建一個一次下載鏈接的門票。問題是由php動態創建的憑證也是一個變量存儲在鏈接中,否則我可以使用我的cms的內置函數。但是,我想創建一個時間鏈接到頁面,用重定向將用戶重定向到頁面。有一次在PHP下載喜歡?

如果有人可以概述創建一個會大大折衷的一次鏈接的過程,並且如果有人可以提供一些很好的示例代碼。

謝謝 托馬斯

+0

你提到一個CMS - 你指的是你自己的東西捲起或一個開源的CMS Drupal的一樣是,Joomla或WordPress的? @Jan Dragsbaek的問題很好地概括了這個過程,但是如果不知道可以使用的工具,就很難給出任何示例代碼。什麼數據庫/ db驅動程序?什麼環境? – DeaconDesperado

回答

5

輪廓是這樣的:

  • 生成一個唯一的ID - uniqid可用於
  • 插入該到你的數據庫
  • 將鏈接發送給用戶以某種方式使用該ID,如/ download/{id}
  • 當用戶轉到鏈接時,在數據庫中註冊它已被使用

然後確保您的下載腳本檢查以前是否使用過id。

0

您需要在數據庫中存儲某種標識符,並在訪問該數據庫後將其刪除。因此,它的工作是這樣的:

  • 人買的產品和你的腳本在數據庫中創建一個新表
  • 人下載的產品和你的腳本刪除了該行
0

不知道你的環境詳細,這裏通常給出一些關於數據層的示例思想。

爲你的票你的表結構必須是這個樣子:

  • ID - 主鍵
  • TRANSACTION_ID - 應該是一個數字ID到另一臺,可存儲的交易信息購買,可以在另一個查詢
  • uniq_key - 這可以是一個字符串的票回購的網址,使用uniqid構造或散列與md5東西。有很多好的方法可以在SO上找到用於生成GUID的方法。
  • used - 一個布爾值,用於如果票證已被下載或沒有。購買時,默認爲0(假),下載後更新爲1(真)。
  • 標記 - 時間戳可以設置對檢索

更新對於這樣一些開發者的應用程序寧願只是刪除行比有一個布爾值,而是取決於存檔這些數據是相關還是不到您的業務邏輯。一般來說,您可以在安全方面進行宣傳並保留數據,並使其失效。

購買時,您可以插入到您的交易和票據表,使得新行對購買者數據,並在同一時間將新票。您需要設置一些檢索票的方式,或者使用通過電子郵件或某種此類方式發送的$_GET超全球網址的網址路由。

爲票證下載的輸出端點將不得不首先查詢布爾值爲false的唯一標識符,並且返回一行,允許下載,然後運行另一個UPDATE查詢,然後再設置使用布爾值爲true。如果沒有行被返回(一個無效的ID或票已被檢索)下載被拒絕。

可以輸出下載使用header()功能設置一個MIME類型和內容處置頭直接到瀏覽器。理想情況下,所有這些邏輯都可以在一個輸出端點上。

如果您還沒有使用一些框架,我建議尋找到的東西至少設置URL路由你,使生活變得更加容易。 Kohana,CodeIgniter和CakePHP都非常適合這個問題領域。

還要考慮業務邏輯的需求 - 是不是真的有必要只允許一個下載?如果門票有一些唯一標識符,如序列號或uniqid(),是否真的有必要在兌換時驗證門票時限制這樣的下載?我不知道你的要求,但我知道我會很PO'ed如果特瑪沒有讓我重新下載我的票,如果我忘了在離合器:)

好運。