phpのログイン認証でてこづっていますので、ご教授いただきたいです。
$_POST["id"]をsetterに送り、
$pdo = $db->access();でデータベースに接続し、
$db::logining($pdo);でログイン認証をしています。
$db::logining($pdo);では、sqlを送り返ってきた結果が、
$_POST["id"];と同じであれば、ログイン成功、異なれば
loginForm.phpにページ移動するような仕様です。
今回はわかりやすくするため、IDだけのチェックにしています。
---login.php--- if($_POST != null){ require_once 'logfor.php'; require_once 'db.php'; $log = new login(); $log->setId($_POST["id"]); ---IDをpostで受取りセット $db = new db(); $pdo = $db->access(); ---Mysqlに接続 $db::logining($pdo); ---メソッドの呼び出し echo $arr; }
---db.php function logining($pdo){ $login = new login(); $id = $login->getId(); $sql = "SELECT * FROM MUSER WHERE ID = '".$id."'"; $result = $pdo->query($sql); ---結果をもらう // $arr = $result->fetch(PDO::FETCH_ASSOC); if((array)$result[0] == $id){ ---帰ってきた結果がセットした$idと同じならページ移動 ---コメントアウトを外した際は$resultを$arrに変更しています。 header("Location:ログイン成功.php"); exit(); }else{ header("Location:loginForm.php"); exit(); }
$id = $login->getId();にはちゃんと値が入っており、データベース接続も成功しています。
しかし、最後のif文が機能しておらず、データベースにない値でも、ログイン成功.phpに入ってしまいます。
また、コメントアウトを外した際は
Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\コメントアウトの部分 Stack trace: #0 C:\loginForm.php(14): db::logining(Object(PDO)) #1 {main} thrown in C:\コメントアウトの部分
というエラー文が出力されます。
よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/12 09:19
退会済みユーザー
2018/07/12 09:20
2018/07/12 09:34
2018/07/12 09:36
退会済みユーザー
2018/07/12 10:36
2018/07/13 01:04
2018/07/13 01:05