これの続編のような形です。別の質問が出てきたためこちらにて投稿しております。
IDとパスワードでログインできるシステムを構築したい
メールアドレスではなく個別で指定したIDで認証できる仕組みにしようと考えています。
現在、XAMPPのエラーログに以下の文面が表示されています。
php_error_log
[22-Apr-2022 14:36:38 Asia/Tokyo] PHP Warning: Undefined array key "username" in C:\Kaihatsu\login.php on line 9 [22-Apr-2022 14:36:38 Asia/Tokyo] PHP Warning: Undefined array key "password" in C:\Kaihatsu\login.php on line 17 [22-Apr-2022 14:36:38 Asia/Tokyo] PHP Warning: Undefined array key "password" in C:\Kaihatsu\login.php on line 18 [22-Apr-2022 14:36:38 Asia/Tokyo] PHP Warning: Trying to access array offset on value of type bool in C:\Kaihatsu\login.php on line 18
Array型のusername
やpassword
が定義されてないとの内容ということは理解できるのですが、なぜ下記のコードで定義できないのかが理解できません。下記ソースコードです。
loginform.php
php
<?php function h($s){ return htmlspecialchars($s, ENT_QUOTES, 'utf-8'); } session_start(); //ログイン済みの場合 if (isset($_SESSION['NAME'])) { echo 'ようこそ' . h($_SESSION['NAME']) . "さん<br>"; exit; } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>login</title> <link rel="stylesheet" href="loginform.css"> </head> <body> <h1>ようこそ、ログインしてください。</h1> <form action="login.php" method="post"> <label for="username">ユーザー名</label> <input type="text" name="username"> <label for="password">パスワード</label> <input type="password" name="password"> <button type="submit">LOGIN</button> </form> </body> </html>
login.php
php
<?php require_once('required_files/config.php'); session_start(); $errormessage = ""; try { $pdo = new PDO(DSN, DB_USER, DB_PASS); $stmt = $pdo->prepare('SELECT * from users where username = ?'); $stmt->execute([$_POST['username']]); $row = $stmt->fetch(PDO::FETCH_ASSOC); }catch(\Exception $e) { echo $e->getMessage() . PHP_EQL; } if (!isset($row['username'])) { echo("ユーザー名またはパスワードが違います。"); } $password = $_POST["password"]; if(password_verify($_POST['password'], $row['password'])) { session_regenerate_id(true); echo("GENERATED ID"); $_SESSION['NAME'] = $row['username']; echo($_SESSION['NAME']); header("location: successful.php"); //完了画面に移動 exit(); }else { //認証失敗 echo("FALSE"); $errormessage = 'ユーザー名またはパスワードに誤りがあります。'; echo($errormessage); return false; } ?>
config.php
php
<?php define('DSN', 'mysql:host=localhost;dbname=userData'); define('DB_USER', 'Connect'); define('DB_PASS', 'ROP8iY$A1nJ3'); ?>
データベース情報
データベース名:userData
名前 | 値 |
---|---|
ユーザー名 | Connect |
ホスト | localhost |
パスワード | ROP8iY4A1nJ3 |
テーブル名 | users |
動作環境
OS: Windows Server 2019 Datacenter
・XAMPP(Apache 2.0 Handler)
・PHP8.1.4
引用元サイト
https://qiita.com/qwertyuiopngsdfg/items/597da67387723a5aedad
まだ回答がついていません
会員登録して回答してみよう