削除機能と編集機能がうまく作動しません
解決したいこと
phpとSQLを使って、新規投稿、編集機能、削除機能、パスワードの簡単な掲示板を作成しています。
するとエラーは起きていないのですが以下の動作が作動しません。
・ 例えば、投稿番号「1」で投稿をした後、それを削除します。その後また投稿したら、また投稿番号「1」で投稿したいのですが、投稿番号「2」を表示してしまいます。
・ 編集ボタンを押すと、投稿フォーム欄に投稿番号と同じフォームが表示されて、編集に移れるようにしたいのですが、編集ボタンを押しても何も表示されません。
自分で考えたこととしては。。
・ 削除機能を出力するたびに、DROP文を使って一度ファイルを消すようにする?
・ 編集番号と一致する行を、投稿フォームにecho?
です。
アドバイス、どのような処理をしたらいいか教えていただけたら嬉しいです
発生している問題・エラー
該当するソースコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>掲示板</title>
</head>
<body>
<?php
//フィールド変数
$time = date("Y-m-d H:i:s");
$reName="";
$reTxt="";
$selectEdit="";
?>
<?php
//データベースに接続
$dsn='';
$user = '';
$password = '';
$pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
//テーブル作成
$sql = "CREATE TABLE IF NOT EXISTS tb"
." ("
. "id INT AUTO_INCREMENT PRIMARY KEY,"
. "name char(32),"
. "comment TEXT,"
. "time DATETIME,"
. "pass TEXT"
.");";
$stmt = $pdo->query($sql);
?>
<?php
//新規or編集
if (!empty($_POST["name"]) &&!empty($_POST["txt"]) && !empty($_POST["pass"]) && !empty($_POST["submit"])){
$name=$_POST["name"];
$comment=$_POST["txt"];
$pass=$_POST["pass"];
//編集投稿
$updateNum=$_POST["updateNum"];
if($updateNum>0){
$sql= "UPDATE tb SET name=:name, comment=:comment, time=:time, pass=:pass WHERE id=:id";
$update= $pdo->prepare($sql);
$update->bindParam(":name", $name, PDO::PARAM_STR);
$update->bindParam(":comment", $comment, PDO::PARAM_STR);
$update->bindParam(":time", $time, PDO::PARAM_STR);
$update->bindParam(":pass", $pass, PDO::PARAM_STR);
$update->bindParam(":id", $updateNum, PDO::PARAM_INT);
$update->execute();
}else{ //新規投稿
$post=$pdo->prepare("INSERT INTO tb(name, comment, time, pass) VALUES(:name, :comment, :time, :pass)");
$post->bindParam(":name", $name, PDO::PARAM_STR);
$post->bindParam(":comment", $comment, PDO::PARAM_STR);
$post->bindParam(":time", $time, PDO::PARAM_STR);
$post->bindParam(":pass", $pass, PDO::PARAM_STR);
$post->execute();
}
}
// 削除処理
if (!empty($_POST["delnum"]) && !empty($_POST["delpass"]) && !empty($_POST["delete"])) {
$delpass=$_POST["delpass"];
$delnum = $_POST["delnum"];
$sql="SELECT * FROM tb WHERE id=:id";
$delete=$pdo->prepare($sql); //削除するとこゲットしてSQL実行の準備
$delete->bindParam(":id", $delnum, PDO::PARAM_INT);
$delete->execute();
//結果セットの全てをゲットして
$lines=$delete->fetchALL();
foreach($lines as $line){
if($delpass==$line["pass"]){ //パスワード同じか
$sql = 'delete from tb where id=:id';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $delnum, PDO::PARAM_INT); //削除番号削除
$stmt->execute();
}
}}
//編集投稿
if (!empty($_POST["editnum"]) && !empty($_POST["editpass"]) && !empty($_POST["edit"])) {
$editpass=$_POST["editpass"];
$editnum=$_POST["editnum"];
$sql="SELECT * FROM tb WHERE id=:id";
$edit=$pdo->prepare($sql);
$edit->bindParam(":id", $editnum, PDO::PARAM_INT);
$edit->execute();
$lines=$edit->fetchAll();
foreach($lines as $line){
if($line["pass"]==$_POST["editpass"]){//パスワード一致なら表示
$newname=$line["name"];
$newcomment=$line["comment"];
$newnum=$line["id"];
}
}
}
?>
<form action="" method="post">
<!-- 投稿用 -->
<h3>【投稿フォーム】</h3>
<br>
<label>名前:</label>
<input type="text" name="name" value="<?php echo $reName; ?>" placeholder="名前">
<br>
<label>コメント:</label>
<input type="text" name="txt" value="<?php echo $reTxt ; ?>" placeholder="コメント">
<input type="hidden" name="updateNum" value="<?php echo $selectEdit; ?>">
<br>
<label>パスワード:</label>
<input type="password" name="pass" placeholder="パスワードを入力してください">
<br>
<input type="submit" name="submit" value="送信">
<br>
<!-- 削除用 -->
<h3>【削除フォーム】</h3>
<br>
<label>投稿番号:</label>
<input type="number" name="delnum" value="">
<br>
<label>パスワード:</label>
<input type="password" name="delpass" placeholder="パスワードを入力してください">
<br>
<input type="submit" name="delete" value="削除">
<!-- 編集用 -->
<h3>【編集フォーム】</h3>
<br>
<label>投稿番号:</label>
<input type="number" name="editnum" value="" placeholder="編集したい投稿番号">
<br>
<label>パスワード:</label>
<input type="password" name="editpass" placeholder="パスワードを入力してください">
<br>
<input type="submit" name="edit" value="編集">
<br>
<input type="hidden" name="hiddenNum" value="<?php echo $selectEdit; ?>" >
</form>
<?php
//ブラウザに表示
$sql="SELECT * FROM tb";
$statement=$pdo->query($sql);
$lines=$statement->fetchAll();
foreach($lines as $line){
echo $line["id"]. "<br>";
echo "名前: " . $line["name"] . "<br>";
echo "コメント: " . $line["comment"] . "<br>";
echo $line["time"] . "<br><br>";
}
?>