チェックボックスは記事と1対1の関係で、記事数分だけ存在します。
削除ボタンは画面に一つだけです。
index.phpでチェックされた値を保持して削除ボタンを押したらdelete.phpのSQLを動かす方法でやってみたのですが、削除ボタンを押しても削除されませんでした。
delete.phpではdeleted_atに時間を入れて論理削除を使用しています。
おそらくチェックされた投稿のidがdelete.phpに渡っていないことが原因なのではないかと予想しますが、対処の仕方がわかりません。
ご教授いただけると幸いです。よろしくお願いします。
index.php
1<?php 2require('dbconnect.php'); 3 4$subject = $_POST['subject']; 5$body = $_POST['body']; 6$post_user = $_POST['post_user']; 7 ?> 8 9<?php 10// create.phpから送信されてきた場合 11if (isset($_POST["subject"], $_POST["post_user"])) { 12 //件名が空のとき 13 if ($_POST["subject"] == '') { 14 $isSubject = false; 15 }else { 16 $isSubject = true; 17 } 18 //投稿ユーザーが空のとき 19 if ($_POST["post_user"] == '') { 20 $isPost_user = false; 21 } else { 22 $isPost_user = true; 23 } 24} 25 // データベースに追加する 26 if (isset($isSubject, $isPost_user)) { 27 if ($isSubject && $isPost_user) { 28 try { 29 30 $sql = "insert into t_bbs (subject, post_user) VALUES (:subject, :post_user)"; 31 $stmt = $db->prepare($sql); 32 $stmt->bindValue(":subject", $_POST["subject"], PDO::PARAM_STR); 33 $stmt->bindValue(":post_user", $_POST["post_user"], PDO::PARAM_STR); 34 $stmt->execute(); 35 }catch (PDOException $e){ 36 print('Error:'.$e->getMessage()); 37 die(); 38 } 39 } 40 } 41//ここまでcreate.phpの処理 42?> 43<?php 44 45$sql = "select * from t_bbs where parent_id is null and deleted_at is null order by id desc"; 46 $stmt = $db->query($sql); 47 while($row = $stmt->fetch()){ 48 $rows[] = $row; 49 } 50 51 //データベース接続切断 52 $db = null; 53 54 ?> 55 <!DOCTYPE html> 56 <html> 57 <head> 58 <title>一覧表示</title> 59 <meta charset="utf-8"> 60 </head> 61 <script type="text/javascript"> 62 function disp(){ 63if(window.confirm('本当に削除しますか?')){ 64 location.href = "index.php"; 65} 66else{ 67 window.alert('キャンセルされました'); 68} 69} 70 </script> 71 <body> 72 <h1>一覧表示</h1> 73 74 <table border='1'> 75 <tr> 76 <td>ID</td><td>件名</td><td>投稿ユーザー</td><td>投稿日時</td> 77 </tr> 78 79 <?php 80 foreach($rows as $row){ 81 ?> 82 <tr> 83 <form action="delete.php" method="post"> 84 <td><input name="id[]" type="checkbox" value=""</td><?php echo $row['id']; ?> 85 </form> 86 <td> 87 <form action="edit.php" method="GET"> 88 <a href="edit.php?id=<?php echo $row['id'];?>"> 89 <?php echo $row['subject']; ?> 90 </a> 91 </form> 92 </td> 93 <td><?php echo $row['post_user']; ?></td> 94 <td><?php echo $row['created_at']; ?></td> 95 </tr> 96 <?php 97 } 98 ?> 99<!-- <a href="edit.php?id=<?php print($row['id']);?>"> --> 100 </table> 101 102 <!-- <form action="delete.php" method="post"> --> 103 <p><input type="button" value="チェックした投稿を削除する" onClick="disp()"></p> 104 <!-- </form> --> 105 <p> 106 <a href="create.php">新規投稿へ</a> 107 </p> 108 </body> 109 </html> 110
delete.php
1<?php 2require('dbconnect.php'); 3 4 if(isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) { 5 $id = $_REQUEST['id']; 6 var_dump($id); // 追加 7 var_dump($_REQUEST['id']); // 追加 8 9 $statement = $db->prepare("update t_bbs set deleted_at = cast(now() as datetime) WHERE id=?"); 10 $statement->execute(array($id)); 11 } 12?> 13
追記
削除ボタンを押したら論理削除されたものを除いてindex.phpに戻ってくることを実行させたいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/24 05:08 編集
2020/03/24 04:59
退会済みユーザー
2020/03/24 05:41
2020/03/25 04:39