質問編集履歴

1 タグの追加

metamonsan

metamonsan score 11

2017/11/17 01:16  投稿

MySQLでDELETEを行った後のINSERT
###前提・実現したいこと
phpとMySQL1を利用して簡易掲示板を作っています。
入力データをMySQLに保存し、そこからデータを取得・表示させる流れです。
その中で、削除機能、編集機能を実装しようとしているのですが、そのうち削除機能に問題がありまして、質問させていただきます。
###発生している問題・エラーメッセージ
DELETEを行ってから新しく投稿をINSERTで入力すると、DELETEした配列部分に入ってしまいます。
例えば
```
1,内容
2,内容
3,内容
```
となっているうちの2を削除してから新規投稿すると
```
1,内容
4,内容
3,内容
```
となってしまいます。その後は3の後ろに5、6、…と続きますが、削除を繰り返すともっとずれてしまいます。
これを修正したいです。
###該当のソースコード
周辺がごちゃごちゃしていて見にくくなってしまうので、該当部分だけ記載します。
```PHP
//投稿部分
$sql='INSERT INTO kadai(name,comment,date,pass) VALUES(:name,:comment,now(),:pass)';
$stmt=$pdo->prepare($sql);
stmt->bindParam(":name",$name,PDO::PARAM_STR);
$stmt->bindParam(":comment",$comment,PDO::PARAM_STR);
$stmt->bindParam(":pass",$pass,PDO::PARAM_STR);
$name=$_POST["name"];
$comment=$_POST["comment"];
$pass=$_POST["password"];
$stmt->execute();
//削除部分
$sql="DELETE FROM kadai WHERE id=:id";
$stmt=$pdo->prepare($sql);
$stmt->bindParam(":id",$id,PDO::PARAM_INT);
$id=$_POST["deletenumber"];
$stmt->execute();
```
投稿部分、削除部分をhtmlに設置したそれぞれのボタンを押したときで条件分岐させています。
###試したこと
ずれないようにするために、以下のことを考えました。
・UPDATEで内容を「削除済み」に書き換え、表示する際の条件分岐で「削除済み」となっているものをはじく
⇒これだと、番号が残ってしまっているため編集ボタンと干渉してしまうということと、万が一「削除済み」というコメントを投稿した際に意図せずはじかれる可能性があるかな…と感じました。
・UPDATEで番号を上書きし、表示の条件分岐ではじく
⇒具体的には、番号を0にUPDATEすればいいかなと考えていますが、送信された番号をWHEREを使って指定するやり方がよくわからないので実装できていません。
自分でも深く理解できていないため、わかりにくい文章になってしまい申し訳ありません。よろしくお願いいたします。
  • MySQL

    12093 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • DELETE

    75 questions

    ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

  • INSERT

    158 questions

    INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

  • PHP

    38912 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る