前提・実現したいこと
checkboxがcheckedかそうでないかでtrue,falseで評価し、SQLを併用することでスタイリングをするなどの処理を行いたい
発生している問題・エラーメッセージ
以前の環境ではカラムに対してBOOLの設定をすることが出来たが、昨日XAMPPを使い始めたところtinyintというものに変わってしまい、すっかり扱いが分からなくなってしまいました。エラーメッセージは無いようです。 Todoアプリを試作しています。SQLを使った処理でTodoを追加することは可能でした。 formでidを送信した後に行う処理も全て実行されません。
該当のソースコード
function getPdoInstance() { try { $pdo = new PDO( DSN, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_EMULATE_PREPARES => false ] ); return $pdo; } catch (PDOException $e) { echo $e->getMessage(); exit; } } function h($str) { return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } function addTodo($pdo) { $title = trim(filter_input(INPUT_POST,'title')); if($title === '') { return; } $stmt = $pdo->prepare("INSERT INTO mytodos (title) VALUES (:title)"); $stmt->bindValue('title',$title,PDO::PARAM_STR); $stmt->execute(); } function toggleTodo($pdo) { $id = filter_input(INPUT_POST,'id'); if (empty($id)) { return; } $stmt = $pdo->prepare("UPDATE mytodos SET is_done = NOT is_done WHERE id = :id"); $stmt->bindValue('id', $id, PDO::PARAM_INT); $stmt->execute(); } function deleteTodo($pdo) { $id = filter_input(INPUT_POST, 'id'); if (empty($id)) { return; } $stmt = $pdo->prepare("DELETE FROM mytodos WHERE id = :id"); $stmt->bindValue('id', $id, PDO::PARAM_INT); $stmt->execute(); } function getTodos($pdo) { $stmt = $pdo->query("SELECT * FROM mytodos ORDER BY id DESC"); $todos = $stmt->fetchAll(); return $todos; } $pdo = getPdoInstance(); if($_SERVER['REQUEST_METHOD'] === 'POST') { $action = filter_input(INPUT_GET,'action'); switch ($action) { case 'add': addTodo($pdo); break; case 'toggle': toggleTodo($pdo); break; case 'delete': deleteTodo($pdo); break; } header('Location: '.SITE_URL); exit; } $todos = getTodos($pdo); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>MyTodo</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <h1>MyTodo</h1> <form action="?action=add" method="post"> <input type="text" name="title" placeholder="Type new todo."> </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="<?= h($todo->id); ?>"> </form> <span class="<?= $todo->is_done? 'done': ''; ?>"> <?= h($todo->title); ?> </span> <form action="?action=delete" method="post"> <input type="hidden" name="id" value="<?= h($todo->id); ?>"> <span>x</span> </form> </li> <?php endforeach; ?> </ul> </body> </html>
試したこと
データベースを確認し、カラム名が間違っていないか。
基本的な文法事項
このコードは模写なのですが、大元の方のソースコードとの照らし合わせ。
以上のことを試しました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。