我遇到了一些來自我老闆的請求。PHP註冊後自動登錄
我使用他的使用創造了http://www.html-form-guide.com/登記表(我已經把它貼以防萬一有人想使用或看它的鏈接)
所以我是很新,PHP,但我一直在獲得瘋狂的知識。
這是我的問題 - 我需要使這種形式註冊用戶比自動登錄。 (這種形式有一個電子郵件確認系統)
所以我設法繞過電子郵件確認並獲得用戶註冊,但我似乎無法弄清楚如何獲得自動登錄。
以下是我的代碼已經追蹤:
function RegisterUser()
{
if(!isset($_POST['submitted']))
{
return false;
}
$formvars = array();
if(!$this->ValidateRegistrationSubmission())
{
return false;
}
$this->CollectRegistrationSubmission($formvars);
if(!$this->SaveToDatabase($formvars))
{
return false;
}
/*if(!$this->SendUserConfirmationEmail($formvars))
{
return false;
}*/
$this->SendAdminIntimationEmail($formvars);
$this->AutoLogin($formvars);// My call
return true;
}
這將拉動中名,電子郵件地址和密碼 - 把它們放在一個數組,然後把它送上了驗證和衛生設施。我在這裏放了一個調用函數。
之後,我需要手動登錄:
function Login()
{
if(empty($_POST['email']))
{
$this->HandleError("Email is empty!");
return false;
}
if(empty($_POST['password']))
{
$this->HandleError("Password is empty!");
return false;
}
$email = trim($_POST['email']);
$password = trim($_POST['password']);
if(!isset($_SESSION)){ session_start(); }
if(!$this->CheckLoginInDB($email,$password))
{
return false;
}
$_SESSION[$this->GetLoginSessionVar()] = $email;
return true;
}
所以我把登錄功能的最後部分並提出:
function AutoLogin(&$formvars)
{
$email = trim($formvars['email']);
$password = trim($formvars['password']);
if(!isset($_SESSION)){ session_start(); }
if(!$this->CheckLoginInDB($email,$password))
{
return false;
}
$_SESSION[$this->GetLoginSessionVar()] = $email;
return true;
}
我做回聲$電子郵件; echo $ password;出口;測試,我可以看到電子郵件和密碼正在出現。但是「會話」(我認爲)沒有啓動,或者檢查登錄沒有獲取數據。
function CheckLogin()
{
if(!isset($_SESSION)){ session_start(); }
$sessionvar = $this->GetLoginSessionVar();
if(empty($_SESSION[$sessionvar]))
{
return false;
}
return true;
}
現在我看到的是一個CheckLoginInDB是:
function CheckLoginInDB($email,$password)
{
if(!$this->DBLogin())
{
$this->HandleError("Database login failed!");
return false;
}
$email = $this->SanitizeForSQL($email);
$pwdmd5 = md5($password);
$qry = "Select name, email, pagecode, welcome from $this->tablename where email='$email' and password='$pwdmd5' and confirmcode='y'";
$result = mysql_query($qry,$this->connection);
if(!$result || mysql_num_rows($result) <= 0)
{
$this->HandleError("Error logging in. The email or password does not match");
return false;
}
$row = mysql_fetch_assoc($result);
$_SESSION['name_of_user'] = $row['name'];
$_SESSION['email_of_user'] = $row['email'];
$_SESSION['pagecode_of_user'] = $row['pagecode'];
$_SESSION['welcome_user'] = $row['welcome'];
return true;
}
我可以從這個收集什麼,看到它只是一個標準的檢查數據庫,如果該用戶存在並返回結果。
我已經通過stackoverflow搜索,似乎無法看到我的問題的答案。
我看着餅乾,但我不認爲這是我真的需要在這裏。
我的問題是:
我怎樣才能讓這個壞小子開始註冊會議?
我的想法是調用AutoLogin(& $ formvars)是否是正確的想法?
我的AutoLogin函數語法出錯了嗎?
萬一這裏是GetLoginSessionVar():
function GetLoginSessionVar()
{
$retvar = md5($this->rand_key);
$retvar = 'usr_'.substr($retvar,0,10);
return $retvar;
}
這是我不能連接我的工作文件可惜,但如果你需要任何進一步的代碼片段讓我知道,我一定會馬上編輯它!
首先,您必須最小化代碼並從理論上描述問題。如果需要,稍後發佈代碼。 –
我並不是想在這裏聽起來很刺耳,但我不會再浪費時間了。這些代碼在現場環境中完全不安全。首先是'mysql_' api,然後是MD5。使用預準備的語句和'password_hash()'。 –
@YashParekh嗯,每次我看到這個網站的問題,我看到每個人都抱怨說他們沒有加入代碼。我試圖儘可能地徹底。 – PowerCat