質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

540閲覧

PHPのTodoアプリでのエラー文解決法について

Maruco2321

総合スコア118

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/11/18 00:44

###質問内容
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> コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/11/18 00:49

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
Maruco2321

2021/11/18 03:21

エラー文を写真の形式で表示させていただきました????‍♂️
guest

回答1

0

ベストアンサー

そんな名前のテーブルはありませんと言われているので、テーブル名がただしくDB上にあるか確認してください

投稿2021/11/18 01:00

yambejp

総合スコア114767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Maruco2321

2021/11/18 03:22

確認してみようと思います。ありがとうございました????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問