我正在嘗試創建一個腳本,用於驗證(激活)用戶帳戶是否發送給他們的註冊電子郵件中的變量。如何實現一個activate.php腳本?
的URL看起來像
activate.php?confirm=h47H35gGdh7G6dh3j
,我會$_GET["confirm"]
和檢查對數據庫,但我不知道如何捕捉所有的錯誤,我可以如遇到:
- 用戶已經激活
- 激活碼錯誤
- 沒有激活碼都等
我該怎麼做?
我正在嘗試創建一個腳本,用於驗證(激活)用戶帳戶是否發送給他們的註冊電子郵件中的變量。如何實現一個activate.php腳本?
的URL看起來像
activate.php?confirm=h47H35gGdh7G6dh3j
,我會$_GET["confirm"]
和檢查對數據庫,但我不知道如何捕捉所有的錯誤,我可以如遇到:
我該怎麼做?
我已經設法自己回答。
基本上,我從$ _GET數組中提取值並使用該值來查看它是否存在於數據庫中,如果存在,那麼我使用另一個if語句來查看該用戶的狀態是否已設置爲「active」如果是這樣,它不會做任何事情,但如果該帳戶不活躍,那麼它會將其設置爲活動狀態並進行確認。
爲了檢測沒有激活代碼:
if (!isset($_GET['confirm']) || empty($_GET['confirm'])) {
die('Error: an activation code is required.');
}
爲了檢測用戶已經激活,做用戶ID激活($uid
)數據庫查找,然後檢查在數據庫以查看是否用戶已經被激活。如果您想要避免額外的查找,並且您不介意運行額外的更新(並且您沒有更新激活時間之類的內容),則可以運行更新,然後檢查有多少行受到影響(PDO中的$stmt->rowCount()
)。如果這是零,但沒有數據庫錯誤,只是用戶已被激活,您可以拋出錯誤。
如果在查找確認碼時從數據庫中得到空集(零行),則激活碼錯誤。
謝謝,我用它來檢查激活碼是否存在,但它不檢查它是否存在於數據庫中。我實際上已經設法通過從數據庫中提取代碼並將其與$ _GET數組中的值進行比較來解決這個問題。不管怎樣,謝謝你。 – Mike
將user_id添加到您的網址。 – xdazz
@xdazz我不同意。將user_id添加到您的*數據庫*。你不想信任任何客戶端信息。 – mjec
@mjec user_id在數據庫中,你需要user_id來知道你想激活哪個用戶。 – xdazz