前提・実現したいこと
PHPで簡易的な掲示板的なものを作りたいのですが「更新」「削除」の機能が動きません。
SQLテーブルkeijibanの中身ですが、「id(int)」「nameok(varchar:15)」「comment(varchar:300)」「created(DATETIME)」を作ってます。
idに主キーを設定しAutoIncrimentしています。
「投稿」は動作しているのでSQLの接続で問題が起きているわけでは無さそうなんですが、、。
発生している問題・エラーメッセージ
「更新」「削除」機能が動きません。エラーがブラウザ上に出ないので困っています。
こういうエラーが出ないときの対処法というか、どういう確認をしていったらいいかもわからず、そこらへんも教えて頂けたら嬉しいです。
該当のソースコード
PHP
1<?php header('Content-type: text/html; charset=UTF-8'); ?> 2<html> 3 <body> 4 5 <form method="post" action="/testphp/kjban.php"> 6 7 <label for="nameok">名前:</label> <!-名前ラベル-> 8 <input type="text" id="nameok" name="nameok" size="15" maxlength="15"><!-名前入力欄-> 9 <br><br><p> 10 <input type="radio" id="ins" name="set" value='1' checked><!-それぞれラジオボタン-> 11 <label for="ins">投稿</label> 12 <input type="radio" id="upd" name="set" value="2"> 13 <label for="upd">更新</label> 14 <input type="radio" id="del" name="set" value="3"> 15 <label for="del">削除</label> 16 </p> 17 <label for="comment">内容:</lavel> <!-コメントラベル-> 18 <textarea id="comment" name="comment" rows="3" cols="100" wrap="hard" maxlength="300" 19 placeholder="300字制限です"></textarea><!-投稿テキストボックス-> 20 <br> 21 <input type="submit" name="decide" value="確定する"><!-確定ボタン-> 22 <pre> 23 <?php 24 //MySQLに接続 25 $dsn = 'mysql:dbname=zpdb;host=localhost;charset=utf8mb4'; //DBへの接続情報 26 $user = 'root'; //ユーザー名 27 $password = 'OOOO'; //パスワード 28 29 try{ 30 $dbh = new PDO($dsn, $user, $password); //DBへ接続 31 } catch(PDOException $e) { 32 die('Connect Error: ' . $e->getCode()); //DB接続エラー時の処理 33 } 34 35 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //エミュレート機能をオフ 36 37 if(isset($_POST['set'])){ //ラジオボタンの値取得 38 if(isset($_POST['decide'], $_POST['nameok'] ) && $_POST['comment'] && $_POST['set']==1){ //投稿処理 39 $sql = 'INSERT INTO keijiban(nameok,comment,created) VALUES(?,?,CURDATE())'; 40 $sth = $dbh->prepare($sql); 41 $sth->bindValue(1,$_POST['nameok'],PDO::PARAM_STR); 42 $sth->bindValue(2,$_POST['comment'],PDO::PARAM_STR); 43 $sth->execute(); //SQL実行 44 } 45 46 elseif(isset($_POST['decide'],$_POST['check']) && $_POST['set']==2){ //更新 47 if(isset( $_POST['nameok'] ) && $_POST['nameok'] != '' && $_POST['comment'] != ''){ 48 $sql = 'UPDATE keijiban SET nameok=?,comment=? WHERE id = ?' ; 49 $sth = $dbh->prepare($sql); 50 $sth->bindValue(1,$_POST['nameok'],PDO::PARAM_STR); 51 $sth->bindValue(2,$_POST['comment'],PDO::PARAM_STR); 52 var_dump($_POST['comment']); 53 foreach($_POST['check'] as $chk){ 54 $id = (int)$chk; 55 $sth->bindValue(3,$id,PDO::PARAM_STR); 56 $sth->execute(); 57 } 58 } 59 } 60 else if(isset($POST['decide'],$_POST['check']) && $_POST['set']==3){ //削除 61 $sql = 'DELETE FROM keijiban WHERE id=?'; 62 $sth = $dbh->prepare($sql); 63 foreach($_POST['check'] as $chk){ 64 $id = (int)$chk; 65 $sth->bindValue(1,$id, PDO::PARAM_INT); 66 $sth->execute(); 67 } 68 } 69 } 70 $sql='SELECT nameok,comment FROM keijiban ORDER BY created DESC'; 71 //コメント表示 72 $sth = $dbh->prepare($sql); 73 $sth->execute(); 74 while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 75 echo '<input type="checkbox" name="check[]" value="'; 76 echo htmlspecialchars($row['id'],ENT_QUOTES,'UTF-8'); 77 echo '">'; 78 echo '<table border="1" style="border-collapse:collapse" style="table-layout:fixed;width:100%;">'; 79 echo '<tr><th align="left">',htmlspecialchars($row['nameok'], ENT_QUOTES, 'UTF-8'); 80 echo '</th></tr><tr><td>'; 81 echo htmlspecialchars($row['comment'], ENT_QUOTES, 'UTF-8'); 82 echo '</td></tr></table><br>'; 83 } 84 ?> 85 </pre> 86 </form> 87 </body> 88</html>
試したこと
一応、更新/削除のラジオボタンの判定は出来ているようで、そこで確定(decide)ボタン押しても投稿(insert)はされないです。
(var_dumpでもためしました )
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/09 02:28
2021/04/09 02:42
2021/04/09 02:59