PHPでTodo管理システムを作っています。今回改修作業として、ログイン画面を作成し担当者IDとパスワードを入力してログインする機能を追加しました。
ところが初回アクセス時に以下のエラーメッセージが発生しました。
Notice: Undefined index: password in /work/public/login.php on line 5
実現したいこと
・初回アクセス時に上記のエラーメッセージが表示されないこと
該当のソースコード
PHP login.php
1<?php 2 3 4 5if($_POST["password"] == "tanaka" && $_POST["user_id"] == 99999) { 6 header('Location: index.php'); 7exit; 8} 9if($_POST["password"] == "yamada" && $_POST["user_id"] == 11111){ 10 header('Location: index.php'); 11exit; 12} 13?> 14<html> 15 <head> 16 <meta charset="UTF-8"> 17 <title>ログイン</title> 18 </head> 19 <body> 20 <h1>ログインページ</h1> 21<form method="POST" action=""> 22 <label>担当者ID</label></br> 23 <input type="text" name="user_id"></br></br> 24 <label>パスワード</label></br> 25 <input type="password" name="password" value=""></br></br> 26 <input type="submit" value="ログイン"> 27</form> 28 </body> 29</html>
PHP index.php
1<?php 2 3require_once(__DIR__ . '/../app/config.php'); 4 5use MyApp\Database; 6use MyApp\Todo; 7use MyApp\Utils; 8 9$pdo = Database::getInstance(); 10 11$todo = new Todo($pdo); 12$todo->processPost(); 13$todos = $todo->getAll(); 14 15?> 16<!DOCTYPE html> 17<html lang="ja"> 18<head> 19 <meta charset="utf-8"> 20 <title>My Todos</title> 21 <link rel="stylesheet" href="css/styles.css"> 22</head> 23<body> 24 <?php 25 if (isset($_POST['password']) && isset($_POST['user_id'])) { 26 $password = $_POST['password']; 27 $user_id = $_POST['user_id']; 28 } 29 30 31 ?> 32 33 <main data-token="<?= Utils::h($_SESSION['token']); ?>"> 34 <header> 35 <h1>Todos</h1> 36 <span class="purge">Purge</span> 37 </header> 38 39 <form> 40 <input type="text" name="title" placeholder="Type new todo."> 41 </form> 42 43 <ul> 44 <?php foreach ($todos as $todo): ?> 45 <li data-id="<?= Utils::h($todo->id); ?>"> 46 <input type="checkbox" <?= $todo->is_done ? 'checked' : ''; ?>> 47 <span><?= Utils::h($todo->title); ?></span> 48 <span class="delete">x</span><span><?= Utils::h($todo->createnow); ?></span> 49 </li> 50 <?php endforeach; ?> 51 </ul> 52 </main> 53 54 <script src="js/main.js"></script> 55</body> 56</html>
試したこと
初回アクセス時とフォーム送信後のアクセスの切り分けができていないときに発生すると言う記述を見かけたので
PHP index.php
1if(empty($_POST)){ 2 echo 'フォームは送信されてないよ'; 3} 4else{ 5 echo 'フォームは送信されたよ'; 6}
というのを
PHP index.php
1<?php 2 3if(empty($_POST)){ 4 echo 'フォームは送信されてないよ'; 5} 6else{ 7 echo 'フォームは送信されたよ'; 8} 9 if (isset($_POST['password']) && isset($_POST['user_id'])) { 10 $password = $_POST['password']; 11 $user_id = $_POST['user_id']; 12 } 13 ?>
の箇所にいれたところ送信されたよが表示されました。
他にもindex.phpに
PHP index.php
1 <?php 2$passowrd = ""; 3 if (isset($_POST['password']) && isset($_POST['user_id'])) { 4 $password = $_POST['password']; 5 $user_id = $_POST['user_id']; 6 } 7 8 9 ?>
という方法も試してみましたが最初のエラーメッセージは消えませんでした。
補足情報
http://localhost:8562/login.php
でアクセスしました。
一度ログインボタンを押すとエラーメッセージは表示されませんでした。
回答1件
あなたの回答
tips
プレビュー