PHPとMySQLを使用した掲示板

実現したいこと

PHPとMySQLを使用して掲示板を作っています。
このエラーだけが消えなくて困っています。新規投稿ボタン、削除ボタン、編集ボタンを押すと出てきます。

Column not found: 1054 Unknown column 'password_new' in 'where clause' in

どうすれば消えるのか教えていただきたいです。

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>掲示板</title> <style> body { text-align: center; } </style> </head> <body> <h1>掲示板</h1> <form action="" method="post"> <input type="text" name="user" value="ユーザー名"> <input type="text" name="comment" value="コメント"> <input type="password" name="password_new" placeholder="パスワード"> <input type="submit" name="submit"><br> <!-- 削除フォーム --> <input type="text" name="delete" placeholder="削除対象番号"> <input type="password" name="password_delete" placeholder="パスワード"> <input type="submit" name="delete_submit" value="削除"><br> <!-- 編集フォーム --> <input type="text" name="edit" placeholder="編集番号"> <input type="text" name="new_user" placeholder="新しいユーザー名"> <input type="text" name="new_comment" placeholder="新しいコメント"> <input type="password" name="password_edit" placeholder="パスワード"> <input type="submit" name="edit_submit" value="編集"> </form> <?php $dsn = 'mysql:dbname=ーーー;host=localhost'; $user = 'ーーーーー'; $password = 'ーーーー'; $pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); // テーブル $sql = "CREATE TABLE IF NOT EXISTS tbtest (" . "id INT AUTO_INCREMENT PRIMARY KEY," . "name CHAR(32)," . "comment TEXT," . "password_new CHAR(255)" . ")"; $stmt = $pdo->query($sql); $file_name = '1.txt'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['submit'])) { $user = $_POST['user']; $comment = $_POST['comment']; $password_new = isset($_POST['password_new']) ? $_POST['password_new'] : ''; // Corrected SQL query and parameter binding $sql = "INSERT INTO tbtest (name, comment, password_new) VALUES (:user, :comment, :password_new)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':user', $user, PDO::PARAM_STR); $stmt->bindParam(':comment', $comment, PDO::PARAM_STR); $stmt->bindParam(':password_new', $password_new, PDO::PARAM_STR); $stmt->execute(); } } if (isset($_POST["delete_submit"]) && isset($_POST["delete"])) { $delete_number = $_POST["delete"]; $password_delete = $_POST["password_delete"]; if (is_numeric($delete_number)) { $sql = 'SELECT * FROM tbtest WHERE id=:id AND password_new=:password_delete'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':id', $delete_number, PDO::PARAM_INT); $stmt->bindParam(':password_delete', $password_delete, PDO::PARAM_STR); $stmt->execute(); $result = $stmt->fetch(); if ($result) { deletePost($file_name, $delete_number, $password_delete); } } } if (isset($_POST['edit_submit'])) { $edit_number = $_POST['edit']; $new_user = $_POST['new_user']; $new_comment = $_POST['new_comment']; $password_edit = $_POST['password_edit']; editPost($file_name, $edit_number, $new_user, $new_comment, $password_edit); $sql = 'UPDATE tbtest SET name=:new_user, comment=:new_comment WHERE id=:id AND password_new=:password_edit'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':new_user', $new_user, PDO::PARAM_STR); $stmt->bindParam(':new_comment', $new_comment, PDO::PARAM_STR); $stmt->bindParam(':id', $edit_number, PDO::PARAM_INT); $stmt->bindParam(':password_edit', $password_edit, PDO::PARAM_STR); $stmt->execute(); } if (file_exists($file_name)) { $post_list = file($file_name, FILE_IGNORE_NEW_LINES); if (!empty($post_list)) { $count = 1; // 番号を初期化 foreach ($post_list as $post) { $elements = explode("<>", $post); echo $count . ": "; echo $elements[0] . " "; echo $elements[1] . " "; echo $elements[2] . " "; echo "<br>"; $count++; // 番号を増加 } } } function deletePost($file, $number, $password) { $posts = file($file, FILE_IGNORE_NEW_LINES); if (isset($posts[$number - 1])) { $elements = explode("<>", $posts[$number - 1]); $saved_password = end($elements); if ($password == $saved_password) { unset($posts[$number - 1]); file_put_contents($file, implode(PHP_EOL, $posts) . PHP_EOL); } } } function editPost($file, $number, $new_user, $new_comment, $password) { $posts = file($file, FILE_IGNORE_NEW_LINES); $target_post = isset($posts[$number - 1]) ? $posts[$number - 1] : null; if ($target_post) { $elements = explode("<>", $target_post); $saved_password = end($elements); if ($password == $saved_password) { $saved_password = end($elements); $elements[0] = $new_user; $elements[1] = $new_comment; $posts[$number - 1] = implode("<>", $elements); file_put_contents($file, implode(PHP_EOL, $posts) . PHP_EOL); } } } ?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント