現在PHPで掲示板を作成しているのですが、削除フォームに書き込み番号とパスワードを入力し、その書き込み番号に該当するパスワード(書き込み時に入力されたもの)をデータベースから取得し、削除フォームに入力されたパスワードと合致していれば削除するという仕組みにしたいです。
しかし、データベースから書き込み番号に該当するパスワードを取得する部分が上手くいかないです。取得された値をvar_dump関数で表示してみると論理値(True or False)になっておりデータベースからパスワードが正確に取得できていないことがわかりましたが、具体的な解決手段が分かっていない状態です。恐らく「WHERE = $deletenumber」によってテーブルの位置を指定する部分が間違っていると思っていますが解決方法が分かりません。コードは以下の通りです。
</body> </html>//表の描画 echo "<table style='border: solid 1px black;'>"; echo "<tr><th>書き込み番号</th><th>名前</th><th>内容</th><th>書き込み時刻</th></tr>"; //書き込みに関するクラスの定義 class TableRows extends RecursiveIteratorIterator { function __construct($it) { parent::__construct($it, self::LEAVES_ONLY); } function current() { return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>"; } function beginChildren() { echo "<tr>"; } function endChildren() { echo "</tr>" . "\n"; } } //変数定義 $time = date("Y/m/d H:i:s"); $err_msg1 = ""; $err_msg2 = ""; $err_msg3 = ""; $err_msg4 = ""; $err_msg5 = ""; $message =""; $name = ( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; $comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : ""; $deletenumber = ( isset( $_POST["deletenumber"] ) === true ) ?$_POST["deletenumber"]: ""; $editnumber = ( isset( $_POST["editnumber"] ) === true ) ?$_POST["editnumber"]: ""; $inputpass = ( isset( $_POST["inputpass"] ) === true ) ?$_POST["inputpass"]: ""; $deletepass = ( isset( $_POST["deletepass"] ) === true ) ?$_POST["deletepass"]: ""; $editpass = ( isset( $_POST["editpass"] ) === true ) ?$_POST["editpass"]: ""; try{ //PDO関連 $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); // $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //掲示板処理 if(isset($_POST["btn1"]) === true){ //書き込み処理 if($_POST["state"] != "editmode"){ if($name === "" ){ $err_msg1 = "名前を入力してください"; echo $err_msg1.'<br>'; echo '<br>'; }elseif($comment === "" ){ $err_msg2 = "コメントを入力してください"; echo $err_msg2.'<br>'; echo '<br>'; }elseif($pass === ""){ $err_msg3 = "パスワードを入力してください"; echo $err_msg3.'<br>'; echo '<br>'; }elseif($err_msg1 === "" && $err_msg2 ==="" && $err_msg3 ===""){ //MySQLへの書き込み $sql = "INSERT INTO bbs(name, comment, time, password) VALUES('$name', '$comment', '$time', '$inputpass')"; $conn->exec($sql); } }elseif($_POST["state"] == "editmode"){ if($name === "" ){ $err_msg1 = "名前を入力してください"; echo $err_msg1.'<br>'; echo '<br>'; }elseif($comment === "" ){ $err_msg2 = "コメントを入力してください"; echo $err_msg2.'<br>'; echo '<br>'; }elseif($pass === ""){ $err_msg3 = "パスワードを入力してください"; echo $err_msg3.'<br>'; echo '<br>'; }elseif($err_msg1 === "" && $err_msg2 ==="" && $err_msg3 ===""){ //MySQLの編集 $sql_2 = "UPDATE bbs SET comment = '$comment' WHERE number = '$editnumber' "; $conn->exec($sql_2); } } }elseif(isset($_POST["btn2"]) === true){ //削除処理 //MySQLの参照による削除 if($deletepass === ""){ $err_msg4 = "パスワードが入力されていません!".'<br>'; echo $err_msg4; }elseif($err_msg4 === ""){ $sql_delete = $conn->prepare("SELECT password FROM bbs WHERE number = '$deletenumber' "); $registeredpass = $sql_delete->execute(); if($deletepass === (string)$registeredpass){ $sql_3 = $conn->prepare("UPDATE bbs SET name = 'この書き込みは削除されました', comment = 'この書き込みは削除されました', time = '0' WHERE number = '$deletenumber' "); $sql_3->execute(); }elseif($deletepass !== (string)$registeredpass){ echo "パスワードが間違っています!".'<br>'; echo '<br>'; } } }elseif(isset($_POST["btn3"]) === true){ //編集処理 //MySQLの参照で入力フォームへ送信 $sql_edit = "SELECT password FROM bbs WHERE number = '$editnumber' "; $registeredpass_2 = $conn->exec($sql_edit); if($editpass === ""){ $err_msg5 = "パスワードが入力されていません!".'<br>'; echo $err_msg5; }elseif($err_msg5 === ""){ if($editpass === $registeredpass_2){ $get_name_0 = "SELECT name FROM bbs WHERE number = '$editnumber' "; $get_comment_0 = "SELECT comment FROM bbs WHERE number = '$editnumber' "; $get_name = $conn->exec($get_name_0); $get_comment = $conn->exec($get_comment_0); }elseif($editpass !== $registeredpass_2){ echo "パスワードが間違っています".'<br>'; echo '<br>'; } } } //書き込み表示 //MySQLの読み込みと表示 $stmt = $conn->prepare("SELECT number, name, comment, time FROM bbs ORDER BY number ASC"); $stmt->execute(); $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { echo $v; } }catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?> <h1>書き込みフォーム</h1> <form action=".php" method="post"> <?php if(isset($_POST["btn3"])):?> <div>名前</div> <input type="text" name="name" value="<?php echo $get_name; ?>"><br></br> <div>内容</div> <input type="text" name="comment" value="<?php echo $get_comment; ?>"><br></br> <div>パスワード</div> <input type ="password" name="inputpass"><br></br> <input type="hidden" name="state" value ="editmode"> <input type="submit" name="btn1" value="書き込む"> <?php else:?> <div>名前</div> <input type="text" name="name"><br></br> <div>内容</div> <input type="text" name="comment"><br></br> <div>パスワード</div> <input type ="password" name="inputpass"><br></br> <input type="submit" name="btn1" value="書き込む"> <?php endif;?> </form> <h1>削除用フォーム</h1> <form action=".php" method="post" id ="submit"> <div>削除番号</div> <input type="text" name="deletenumber"><br></br> <div>パスワード</div> <input type ="password" name="deletepass" ><br></br> <input type="submit" name="btn2" value="削除する"> </form> <h1>編集用フォーム</h1> <form action=".php" method="post"> <div>編集番号</div> <input type="text" name="editnumber"><br></br> <div>パスワード</div> <input type ="password" name="editpass" ><br></br> <input type="submit" name="btn3" value="編集する"> </form> <br></br> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script> $(function () { $('#submit').submit(function () { return confirm("本当に削除してもよろしいですか?"); }); }); </script>
回答1件
あなたの回答
tips
プレビュー