###質問内容
MacのVScodeにてPHPのTodoアプリを作成しています。データベースはMySqlを利用しています。
エラーが出たのですがこれを解決するのに詰まっている状態です。エラーの内容は下記のようになっています。
エラー文で
Base table or view not found
Todo.php online 78
とありますがデータベースにデータが保存されていないか、もしくはTodo.phpの78行目がどこか間違っていることが原因なのでしょうか?よろしくお願いします????♂️
###コード
Todo.php
namespace MyApp; class Todo{ private $pdo; public function __construct($pdo){ $this->pdo = $pdo; Token::create(); } public function processPost(){ if ($_SERVER["REQUEST_METHOD"] === "POST"){ Token::validate (); // 下は問題点 $action = filter_input(INPUT_GET, "action"); switch ($action){ case "add": $this->add(); break; case "toggle": $this->toggle(); break; case "delete": $this->delete(); break; case "purge": $this->purge(); break; default: exit; } header("Location:". SITE_URL); exit; } } private function add(){ $title = trim(filter_input(INPUT_POST, "title")); if($title === ""){ return; } $stmt = $this->pdo->prepare("insert into todos(title) values (:title)"); $stmt->bindValue("title", $title, \PDO::PARAM_STR); // 上小文字ダメ絶対 $stmt->execute(); } private function toggle(){ $id = filter_input(INPUT_POST, "id"); if(empty($id)){ return; } $stmt = $this->pdo->prepare("update todos set is_done = not is_done where id = :id"); $stmt->bindValue("id", $id, \PDO::PARAM_INT); $stmt->execute(); } private function delete(){ $id = filter_input(INPUT_POST, "id"); if(empty($id)){ return; } $stmt = $this->pdo->prepare("delete from todos where id = :id"); $stmt->bindValue("id", $id, \PDO::PARAM_INT); $stmt->execute(); } private function purge(){ $this->pdo->query("delete from todos where is_done=1"); } public function getAll() { // 下、今回の問題箇所の78行目 $stmt= $this->pdo->query("select * from todos order by id desc"); /////////////////////// $todos= $stmt->fetchAll(); return $todos; } } コード
index.php
require_once(__DIR__ ."/../app/config.php"); use MyApp\Database; use MyApp\Todo; use MyApp\Utils; $pdo = Database::getInstance(); $todo = new Todo($pdo); $todo->processPost(); $todos = $todo->getAll(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>My Todos</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <main> <header> <h1>To do list</h1> <form action="?action=purge" method="post" class="delete-form"> <span class="purge">purge</span> <input type="hidden" name="token" value="<?= Utils::h($_SESSION["token"]);?>"> </form> </header> <form action="?action=add" method="post"> <input type="text" name="title" placeholder="Type new todo."> <input type="hidden" name="token" value="<?= Utils::h($_SESSION["token"]);?>"> </form> <ul> <?php foreach($todos as $todo): ?> <li> <form action="?action=toggle" method="post"> <input type="checkbox" <?= $todo->is_done ? "checked" : ""; ?>> <input type="hidden" name="id" value="<?= Utils::h($todo->id);?>"> <input type="hidden" name="token" value="<?= Utils::h($_SESSION["token"]);?>"> </form> <span class="<?= $todo->is_done ? "done" : ""; ?>"> <?= Utils::h($todo->title); ?> </span> <form action="?action=delete" method="post" class="delete-form"> <span class="delete">x</span> <input type="hidden" name="id" value="<?= Utils::h($todo->id)?>"> <input type="hidden" name="token" value="<?= Utils::h($_SESSION["token"]);?>"> </form> </li> <?php endforeach; ?> </ul> </main> <script src="js/main.js"></script> </body> </html> コード
回答1件
あなたの回答
tips
プレビュー