前提・実現したいこと
PHPでtodoリストを作っています。
dbにtodoの内容を送信してその内容を同じページに表示させるという処理で、送信した直後は上手くいくのですが再度ページに入ると下記のようなエラーが表示されました。
送った直後でなくても一覧にしてtodo内容を表示させるにはどうしたらいいですか?
発生している問題・エラーメッセージ
Fatal error: Uncaught Error: Call to a member function fetch() on null in /Applications/MAMP/htdocs/TODO/index.php on line 42
Error: Call to a member function fetch() on null in /Applications/MAMP/htdocs/TODO/index.php on line 42
該当のソースコード
php
1<?php 2require('db.php'); 3 4 5if(!empty($_POST)) { 6 $add = $db->prepare('INSERT INTO todos SET todo=?, created_at=NOW()'); 7 $add->execute(array( 8 $_POST['todo'] 9 )); 10 $todos = $db->query('SELECT * FROM todos ORDER BY id DESC'); 11} 12 13 14 15 16 17?> 18 19<!DOCTYPE html> 20<html lang="ja"> 21<head> 22 <meta charset="UTF-8"> 23 <link rel="stylesheet" href="css/normalize.css"> 24 <link rel="stylesheet" href="css/style.css"> 25 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 26 27 <title>ToDo List</title> 28</head> 29<body> 30 <div id="container"> 31 <header> 32 <h1>ToDo List</h1> 33 </header> 34 <div class="add"> 35 <form action="" method="POST"> 36 <input type="text" required placeholder="Add plan!!" name="todo"> 37 <input type="submit" value="Add"> 38 </form> 39 </div> 40 <div class="todos"> 41 <form action="" method="POST"> 42 <?php while($todo = $todos->fetch()): ?> 43 <div class="todo"> 44 <div class="lavel"><div class="circle"></div></div> 45 <input type="checkbox" name="check" onclick="document.querySelector('p').classList.toggle('check')"> 46 <p><?php print($todo['todo']); ?><br>2020/10/13</p> 47 <div class="remove"> 48 <a href=""><p class="remove_btn">×</p></a> 49 <input type="submit" value="Edit"> 50 </div> 51 </div> 52 <?php endwhile; ?> 53 54 </form> 55 <div class="page"> 56 <a href=""><span>次のページ</span></a> 57 | 58 <a href=""><span>前のページ</span></a> 59 </div> 60 </div> 61 </div> 62 63</body> 64</html>
php
1<?php 2try { 3 $db = new PDO('mysql:dbname=todo;host=localhost;charset=utf8', 'root', 'root'); 4}catch(PDOException $e) { 5 echo 'DB接続エラー' . $e->getMessage(); 6} 7?> 8<?php
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 10:31
2020/05/10 10:35