我有一段效率低下的代碼用於根據用戶輸入其用戶名或電子郵件地址來重置密碼。 PHP腳本根據使用的標識符而分支。如果用戶輸入了他們的用戶名,但是他們輸入了他們的電子郵件地址,那麼我將它摺疊成現在可以工作的一種。這裏是突出的代碼:密碼重置腳本僅觸發一半時間
$identifier = isset($_POST["username"])?"username":"email";
$ident = isset($_POST["username"])?trim(mysqli_real_escape_string($mysqli,(check_chars_username($_POST["username"])))):trim(mysqli_real_escape_string($mysqli, (check_chars_email($_POST["email"]))));
//create and issue the query
$sql = "SELECT * FROM aromaMaster WHERE $identifier = '$ident'";
$sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
if(mysqli_num_rows($sql_res) == 0) {
//wrong login info
header("Location: password_reset_form.html/error=$ident");
exit();
}
$info = mysqli_fetch_array($sql_res);
$userid = $info["id"];
$username = stripslashes($info["username"]);
$email = stripslashes($info["email"]);
我已檢查並加倍檢查電子郵件表單字段被稱爲電子郵件,它是。這讓我撓了撓頭。特別有趣的是頭重定向。當我輸入一個電子郵件地址並被重定向時,$ ident變量顯示爲空。
要麼通過一些調試器(PHP + Zend?)運行它,要麼在設置它們以確保它們是它們應該是的之後至少回顯$ identifier和$ ident。 – 2009-10-04 01:39:34
將來只需在標題中省略標籤。它混淆了這個問題。 – random 2009-10-04 01:39:49
@ e.c.h.o .:會做,對不起。 @igro:正如我所說的,我確實追加了$ ident到查詢字符串,並且它顯示爲空。然而,在嘗試$標識符時,出於某種原因它說「用戶名」。我猜isset是錯誤的測試 - 將它改爲!empty()並且效果很好。謝謝! – user97410 2009-10-04 01:44:15