質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

6737閲覧

論理削除の手順について

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2021/03/06 10:08

編集2021/03/06 13:24

##解決したいこと
PHPで論理削除を実行したい時、以下のような手順で考え方はあっているか知りたい。

##手順
イメージ説明
削除ボタンを押すと、ポップアップで削除するか確認。
イメージ説明
OKが押されると、以下のjsが走り、$flag=1を返す。
※.deleteは、削除ボタンのクラスを指してます。

$(".delete").click(function() { if(!confirm("削除を実行しますか?")) { return false; } else { return $flag = 1; } });
public function delFlg($id) { $sql = 'UPDATE players SET del_flg = :del_flg WHERE id = :id'; $sth = $this->dbh->prepare($sql); $sth->bindParam(':id', $id, PDO::PARAM_INT); $sth->bindParam(':del_flg', 1, PDO::PARAM_INT); $sth->execute(); return $result; }

$flag=1が返ってきたときに、delFlg関数が実行され、del_flgが1に更新される。
※del_flgはplayersテーブルにある論理削除用のカラムで、デフォルト値は0。0の時にデータは表示、1の時にデータは非表示にするように実装済み。

この関数で、del_flgの値が1に更新されて、データ非表示→論理削除成功!

こんな流れで論理削除を実装したいのですが、jsからdelFlg関数に$flag=1をどうやって渡し、del_flgの値を1に更新すればいいのかでつまずいています。

まとめると、
削除ボタンをおす→削除する実行→$flag=1を返す→delFlg関数を実行→関数内のdel_flgの値を1に更新→
データを非表示

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一般的には同期(form送信など)か非同期(Ajaxなど)か どっちか。
どんな形でも正しくリクエストを送られればいいです。

「やり方」が「何が正しいか」を決めるのは仕様、要件次第。
HowではなくWhyやWhatから考えてください。

固定で1入れるなら別にフロント側から渡す必要ないでしょうね。
削除対象だけ送ってください。
※共通処理にしたいなら渡したうえで渡された情報をセットする

→データを非表示

これはシステム的な表現ではないので設計するときは「del_flgが1以外を取得」としたほうが良いでしょう。

あと、削除とデータ取得は一緒にしてはロジックとして成り立ちません。
今回同じステートメントで取得できるのは「作用した件数」です。
役割分担を考えてください。何でもかんでも詰め込んでしまうとファットコントローラ、ファットモデルになるので。

投稿2021/03/06 10:32

編集2021/03/06 11:27
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

PHP

1<?PHP 2$del=filter_input(INPUT_GET,"del"); 3$sql = 'UPDATE players SET del_flg =true WHERE id = ?'; 4$stmt = $pdo->prepare($sql); 5$stmt->execute([$del]); 6?> 7<script> 8document.addEventListener('click', (e)=>{ 9 if([...document.querySelectorAll('.delete')].includes(e.target)){ 10 if(!confirm('削除?')) e.preventDefault(); 11 12 console.log(e.target.href); 13 } 14}); 15</script> 16 17<a href="?del=1" class="delete">削除</a> 18<a href="?del=2" class="delete">削除</a> 19<a href="?del=3" class="delete">削除</a>

updateした場合fetchはできません
deleteするときはセッションなどで削除権限を持っていることをチェックしてください

投稿2021/03/06 11:08

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問