-1

既存のアカウントを使用してログインしようとすると、コードは正常に実行されますが、存在しないアカウントでログインしようとすると、else一部とメッセージを実行する必要がありますが、ブロックechoで定義された部分を実行します。ifなんで?

その他のヒントは大歓迎です

$sql = "SELECT email,password,id FROM user WHERE email=? AND password=?";
$stm = $db->prepare($sql);
$stm->execute(array($email,$password));
$row = $stm->fetch(PDO::FETCH_ASSOC);
$number_of_rows = $stm->fetchColumn();

if(count($number_of_rows)==1){
    $_SESSION['id']=$row['id'];
    header('Location: cpanel/#welcome');
}else{
    echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect. Please try again.</font>";
}
4

4 に答える 4

0

すでにデータがある場合は、追加の検証は必要ありません

だから、チェック$rowは十分でしょう。ただし、電子メールとパスワード (既に持っているもの) を要求しても意味がありません。
したがって、fetchColumn() を使用できますが、fetch を使用しない場合は次のようになります。

$sql = "SELECT id FROM user WHERE email=? AND password=?";
$stm = $db->prepare($sql);
$stm->execute(array($email,$password));
$id = $stm->fetchColumn();

if ($id) {
    $_SESSION['id']=$id;
    header('Location: cpanel/#welcome');
    exit;
} else {
    echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect.  Please try again.</font>";
}
于 2013-04-18T18:18:56.337 に答える