わかりました。私はこのPDOにまったく慣れていません。mysqlスクリプト(機能している)をPDOスクリプト(機能していない)に再作成しようとしました。DBログイン情報が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を介して呼び出され、「no」、「yes」、「act」に基づいてデータを返し、AJAX/jQueryスクリプトに何をすべきかを指示します。ですから、PDOスクリプトで私が間違ったことを誰かに教えてもらえれば幸いです。
編集:
データをjQueryスクリプトに返すと、次のようになります。はいの場合:セッションを開始し、セッションが開始された状態でpage2.phpにリダイレクトします。それ以外の場合:アカウントがアクティブ化されていないフィールドに書き込みます。それ以外の場合:メールアドレスとパスワードが一致しなかったことを記入してください。
問題は、正しい電子メールとパスワードを書き込もうとすると、リダイレクトする代わりに「電子メールとパスワードが一致しませんでした」と書き続けるということです。スクリプトは説明どおりに機能しますが、PDOスクリプトは機能しません。
そして、私は「エコー「いいえ」;」を変更しようとしました。'エコー"はい";' とにかくログインが開始されるかどうかを確認しますが、どういうわけか、電子メールとパスワードが一致しなかったと書き込みを続けます。
解決:
不要だと思ったので言わなかったのですが、ページ上部のコメント欄に古いmysqlコードが入っていて、session_startコマンドが機能しなかったためです。 ..古いコードを削除した後、それは機能しましたが、変更するものが他に見つかりました。検証中のPDOスクリプトには、次のように表示されます。$ sql-$ conn_business-> prepare( "SELECT email、password FROM members WHERE email ='"。$email。"'"); 次に、$sqlの後の「-」を「=」に変更しました。これですべてが完全に機能します...とにかく皆さんに感謝します。このコードが他の人に役立つことを願っています。