0

私のサイトを PDO に更新している最後の質問のおかげで、私は最初のページから始めて、より深く作業を進め、最初のハードルにぶつかり、ログイン スクリプトに失敗しました。

login-exec.php 編集済み

session_start();

include_once ('connect.php');   

$Email = isset($_POST['Email']) ? $_POST['Email'] : "Email Never Sent";
$Password = isset($_POST['Password']) ? $_POST['Password'] : "Password Never Sent";

$stmt = $db->prepare("SELECT * FROM members WHERE Email = :Email AND Password = :Password");
$stmt->bindParam(":Email"   , $Email    );
$stmt->bindParam(":Password", $Password);
$stmt->execute();
$member = $stmt->fetch(PDO::FETCH_ASSOC);
if ($member)    
    { 
            $_SESSION['SESS_MEMBER_ID'] = $member['Member_ID'];
            $_SESSION['SESS_POST_AS'] = $member['Post_As'];
            $_SESSION['SESS_AUTH'] = $member['auth'];
            session_write_close();
            header('location: index.php');
            exit(); 
    } else  {
        header("location: ?p=login-failed");
        exit();
    }

connect.php

$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

編集:ログインに失敗したページに送信されるようになったので、このページがフォームから受け取ったものに問題がありますか?

$password がプレーン テキストであることはわかっています。以前は md5 を使用していましたが、これが機能するようになったら、より良い保護を実装します。

4

5 に答える 5

0

適切なエラー報告の設定に加えて、変更も

$count = $stmt->rowCount();

if ($count > 1) 

$member = $stmt->fetch();

if ($member) 

コードに一貫性を持たせる

于 2013-07-08T12:39:02.007 に答える
0

接続試行を try/catch に入れると、エラーが表示されます

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
于 2013-07-08T12:30:15.347 に答える
-1

これを試して:

if ($count > 0) 

また

if ($count >= 1) 
{
    session_start();    
    $_SESSION['SESS_MEMBER_ID'] = $member['Member_ID'];
    $_SESSION['SESS_POST_AS'] = $member['Post_As'];
    $_SESSION['SESS_AUTH'] = $member['auth'];
    session_write_close();
    header('location: index.php');
    exit(); 
}
于 2013-07-08T12:42:42.460 に答える