2011-08-29 61 views
0

我正在嘗試創建一個腳本,用於驗證(激活)用戶帳戶是否發送給他們的註冊電子郵件中的變量。如何實現一個activate.php腳本?

的URL看起來像

activate.php?confirm=h47H35gGdh7G6dh3j 

,我會$_GET["confirm"]和檢查對數據庫,但我不知道如何捕捉所有的錯誤,我可以如遇到:

  • 用戶已經激活
  • 激活碼錯誤
  • 沒有激活碼都等

我該怎麼做?

+2

將user_id添加到您的網址。 – xdazz

+0

@xdazz我不同意。將user_id添加到您的*數據庫*。你不想信任任何客戶端信息。 – mjec

+0

@mjec user_id在數據庫中,你需要user_id來知道你想激活哪個用戶。 – xdazz

回答

0

我已經設法自己回答。

基本上,我從$ _GET數組中提取值並使用該值來查看它是否存在於數據庫中,如果存在,那麼我使用另一個if語句來查看該用戶的狀態是否已設置爲「active」如果是這樣,它不會做任何事情,但如果該帳戶不活躍,那麼它會將其設置爲活動狀態並進行確認。

0

爲了檢測沒有激活代碼:

if (!isset($_GET['confirm']) || empty($_GET['confirm'])) { 
    die('Error: an activation code is required.'); 
} 

爲了檢測用戶已經激活,做用戶ID激活($uid)數據庫查找,然後檢查在數據庫以查看是否用戶已經被激活。如果您想要避免額外的查找,並且您不介意運行額外的更新(並且您沒有更新激活時間之類的內容),則可以運行更新,然後檢查有多少行受到影響(PDO中的$stmt->rowCount())。如果這是零,但沒有數據庫錯誤,只是用戶已被激活,您可以拋出錯誤。

如果在查找確認碼時從數據庫中得到空集(零行),則激活碼錯誤。

+0

謝謝,我用它來檢查激活碼是否存在,但它不檢查它是否存在於數據庫中。我實際上已經設法通過從數據庫中提取代碼並將其與$ _GET數組中的值進行比較來解決這個問題。不管怎樣,謝謝你。 – Mike

相關問題