[英]PDO validating login data
好的,..我完全不熟悉PDO。.我試圖將mysql腳本(工作)重新創建為PDO腳本(不工作)。.我測試了我的數據庫登錄信息已針對PDO進行了正確編程。
這是我的PDO腳本...
<?
session_start();
//connect to DB
require_once("connect.php");
//get the posted values
$email=htmlspecialchars($_POST['email'],ENT_QUOTES);
$pass=md5($_POST['psw']);
//now validating the email and password
$sql - $conn_business->prepare( "SELECT email, password FROM members WHERE email='".$email."'");
$sql -> execute();
$count = $sql->rowCount();
$result = $sql -> fetch();
// Now use $result['rowname'];
$stmt = $conn_business->prepare("SELECT * FROM members WHERE email='".$email."'");
$stmt ->execute();
$act = $stmt -> fetch();
//if email exists
if($count > 0)
{
//compare the password
if(strcmp($result["password"],$pass)==0)
{
// check if activated
if($act["activated"] == "0")
{
echo "act"; //account is not activated yet
}
else
{
echo "yes"; //Logging in
//now set the session from here if needed
$_SESSION['email'] = $email;
}
}
else
echo "no"; //Passwords don't match
}
else
echo "no"; //Invalid Login
?>
這是我的舊mysql腳本...
session_start();
require_once("connect.php");
//get the posted values
$email=htmlspecialchars($_POST['email'],ENT_QUOTES);
$pass=md5($_POST['psw']);
//now validating the username and password
$sql="SELECT email, password members WHERE email='".$email."'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$sql2="SELECT * FROM members WHERE email='".$email."'";
$result2=mysql_query($sql2);
$row2=mysql_fetch_array($result2);
$act = $row2['activated'];
//if username exists
if(mysql_num_rows($result)>0)
{
//compare the password
if(strcmp($row['password'],$pass)==0)
{
// check if activated
if($act == "0")
{
echo "act";
}
else
{
echo "yes";
//now set the session from here if needed
$_SESSION['email'] = $email;
}
}
else
echo "no";
}
else
echo "no"; //Invalid Login
有人知道,我做錯了嗎? 這是一個自動腳本。它通過AJAX調用,並基於“否”,“是”和“行為”返回數據,這些數據告訴AJAX / jQuery腳本該怎么做。如我所說,mysql腳本正在工作,因此,如果有人能告訴我我使用PDO腳本做錯了什么,請..
編輯:
當它將數據返回到jQuery腳本時,應該發生這種情況:如果是:啟動會話,則在會話已啟動的情況下重定向到page2.php。 否則,如果執行:在未激活帳戶的字段中輸入。 否則:寫下電子郵件和密碼不匹配。
問題是,當我嘗試編寫正確的電子郵件和密碼時,它會繼續寫:“電子郵件和密碼不匹配”,而不是重定向。.當我說它不起作用時,是因為mysql腳本按照說明進行操作,但PDO腳本則沒有。
並且我試圖更改“回聲”;“ 回聲“是”;” 看看是否無論如何都會開始登錄,但是以某種方式繼續顯示電子郵件和密碼不匹配。
解:
我之所以沒有告訴我,是因為我認為這是不必要的,但是它不起作用的原因是因為我在頁面頂部的注釋標記中包含了舊的mysql代碼,因此session_start命令不起作用..刪除舊代碼后,它可以工作,但是后來我發現有其他需要更改的地方,並且它在驗證時在PDO腳本中顯示:$ sql-$ conn_business-> prepare(“從成員處選擇電子郵件地址和密碼email ='“。$ email。”'“); 然后我只是將$ sql之后的'-'更改為'=',現在一切正常...謝謝大家..希望這段代碼可以對其他人有所幫助。
我相信您的腳本中的第二個查詢不是必需的,您可以簡單地執行
SELECT * FROM members WHERE email=:EMAIL AND password=:PWS;
使用bindParam方法
$qCredentials->bindParam(":EMAIL",$EMAIL);
$qCredentials->bindParam(":PWS",$PWS);
然后做更多不穩定的輸出,而不是是或否 。
對於無效的值類型,請嘗試“無法登錄:提供的憑據無效”或
對於無效的用戶憑據,“無法登錄:無效的憑據,找不到用戶” 。
您可以在用戶成功登錄IF條件並返回yes后嘗試嘗試啟動會話。
$PDOstatement->debugDumpParams()
$PDOstatement->errorInfo()
$PDOstatement->errorCode()
將幫助您了解查詢出了什么問題!
在“開始使用” PDO之前,您是否還閱讀過手冊?
像簡單的MD5那樣散列密碼只是個惡作劇。
session_start(); //very stupid way to acquire connection require_once("connect.php"); //get the posted values $email = htmlspecialchars($_POST['email'],ENT_QUOTES); if (filter_var( $email, FILTER_VALIDATE_EMAIL)) { // posted value is not an email } // MD5 is not even remotely secure $pass = md5($_POST['psw']); $sql = 'SELECT email, password, activated FROM members WHERE email = :email'; $statement = $conn_business->prepare($sql); $statement->bindParam(':email', $email, PDO::PARAM_STR); $output = 'login error'; if ($statement->execute() && $row = $statement->fetch()) { if ( $row['password'] === $pass ) { // use account confirmed if ( $row['activated'] !== 0 ) { $output = 'not activated'; $_SESSION['email'] = $email; } $output = 'logged in'; } } echo $output;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.