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