1日中調べましたがどうにもならないのでお知恵をおかしください。
現在簡単なログインシステムを作っています。
header関数を使用して様々な場合にログインページへ遷移させています。
しかし1箇所だけ下記エラーがでます。
Notice: Trying to access array offset on value of type bool in ~ on line ~
Warning: Cannot modify header information - headers already sent by ~
header関数で遷移させているパターンは
直接このコードがかかれたページにアクセスした時、メアドとパスワードが間違っていた時等ですが、特定のheaderだけエラーが出ます。
エラーが出るのはアドレスを間違えた時です。アドレスの型を間違えた場合はキチンとheader関数は動きます。
アドレスが合っていてパスワードが間違っていた場合はエラーはでません。
メアド、パスワードに間違いがなければログインんができheader関数もキチンと動きます。
下記部分でエラーが出ています。
if($check === false || $check == '' || $check === NULL){ $_SESSION['E-message'] = "mistaken"; header("Location: login"); exit();
DBからpassを拾えてないのが問題なのでしょうか。。。XAMPPではキチンと動いています。
サーバーはロリポップでPHPのバージョンは7.4のLiteSpeedなるものです。
BOMもなしで保存しています。
exit();をdie('location header sent'); に変えたりheader("Location: フルパス");にしてもダメでした。。
下記ソースです。
<?php session_set_cookie_params(0); session_name('didyesclean'); session_start(); if($_SESSION['token'] == ""){ header("Location: login"); exit(); } $token = filter_input(INPUT_POST, 'token'); if ($token != '' || $token != NULL) { if($token != $_SESSION['token']){ $_SESSION['EM'] = "ut"; header("Location: login"); exit(); } } function db_connect(){ $dsn = 'mysql:dbname=sample;host=sample;charset=utf8'; $user = 'sample'; $password = 'sample'; try{ $dbh = new PDO($dsn, $user, $password); return $dbh; }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } } $dbh = db_connect(); $mail = filter_input(INPUT_POST, 'mail'); $pass = filter_input(INPUT_POST, 'password'); if (!empty($mail)){ if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $mail)){ $_SESSION['EM'] = "im"; header("Location: login"); exit(); } } $statement = $dbh->prepare("SELECT pass FROM users WHERE mail = :mail"); $statement->bindValue(':mail', $mail, PDO::PARAM_STR); $statement -> execute(); $result = $statement -> fetch(PDO::FETCH_ASSOC); $check = password_verify($pass, $result['pass']); if($check === false || $check == '' || $check === NULL){ $_SESSION['EM'] = "mt"; header("Location: login"); exit(); } elseif($check === true) { } header("Location: mypage"); exit(); }else{ header("Location: login"); exit(); } ?>
どなたかご教授していただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/19 20:31 編集
2021/09/20 01:38 編集
2021/09/20 04:03