\r\n\r\n\\n\";\r\n \r\n?>\r\n```\r\n\r\ndelete_func.php\r\n```\r\n\r\n $jsondata = $_POST['btnid'];\r\n\t\r\n\r\n $stmt = $db->prepare('DELETE FROM contacts WHERE id = '.$jsondata.' ');\r\n $stmt->execute(); \r\n header('Content-type: application/json');\r\n echo json_encode( $jsondata );\r\n```","answerCount":1,"upvoteCount":0,"datePublished":"2021-11-29T06:34:50.186Z","dateModified":"2022-01-12T10:55:45.698Z","suggestedAnswer":[{"@type":"Answer","text":"画面表示したときにはPHPの仕事は全部終わってます。\r\nつまり、表示したときには最後のidが必ず削除され続けているわけです。\r\n\r\n表示と処理は完全に別個のリクエストにしてください。\r\n\r\n今のコードだとcontact.phpに削除処理を書くことになりますが、現在の書き方だとidは渡らないのでGETリクエストを構成するためにクエリストリングの形式で記載すると良いです(あくまで手法の1つ)","dateModified":"2021-11-29T06:51:54.269Z","datePublished":"2021-11-29T06:51:54.269Z","upvoteCount":2,"url":"https://teratail.com/questions/371472#reply-503513","comment":[{"@type":"Comment","text":"削除だけならAjaxで処理したほうが良いとは思いますが。","datePublished":"2021-11-29T06:52:23.175Z","dateModified":"2021-11-29T06:52:23.175Z"},{"@type":"Comment","text":"ご回答ありがとうございます。\r\n記述方法がクエリ文字列にしてからわからず、ポイントをお教えしていただきたいです。","datePublished":"2021-11-29T07:14:50.659Z","dateModified":"2021-11-29T07:14:50.659Z"},{"@type":"Comment","text":"Ajaxの方で一度考えてみます。","datePublished":"2021-11-29T07:15:36.047Z","dateModified":"2021-11-29T07:15:36.047Z"},{"@type":"Comment","text":"クエリストリングになってませんよ。\r\nURL?key=value&key=value…\r\n現状だと「編集」のほうには?がありません。「削除」のほうにはvalueしかありません。\r\n\r\nクエリストリングでもAjaxでも必要な情報を何かしらの手法でリクエストに含める必要があります。","datePublished":"2021-11-29T07:43:23.042Z","dateModified":"2021-11-29T07:44:33.892Z"},{"@type":"Comment","text":"Ajaxにて行う際にコードを色々確かめたのですが思うようにいかない為、お時間があればお教えしていただきたいです。","datePublished":"2021-11-29T11:21:29.590Z","dateModified":"2021-11-29T11:21:29.590Z"},{"@type":"Comment","text":"あの。「思うようにいかない」「うまくいかない」では赤の他人には何も分からないんですよ(たぶん前も指摘した)\r\n何を参考にどういうコードを書いて何が起きているのか具体的に記載してください。質問は編集できます。","datePublished":"2021-11-29T13:16:25.399Z","dateModified":"2021-11-29T13:16:35.155Z"},{"@type":"Comment","text":"申し訳ございません。\r\n追記させていただきました。\r\n一度調べ、Ajaxを組み込みました。$result['id']にカラムのデータIDが入っている為、ボタンIDを取得しこの$result['id']を削除する様に記述しましたが正常に動かずでした。IDのところは他の値(idなど)で試したところエラーになった為、$result['id']にするとエラーが出ない為、取得はできていると思っております。\r\n記述にてご指摘していただきたいです。","datePublished":"2021-11-29T14:05:42.063Z","dateModified":"2021-11-29T14:09:16.787Z"},{"@type":"Comment","text":"deleteData()\r\n呼び出す方の引数が空ですね。\r\nreturn dispDelete();\r\nあと、POSTでID送信するならcontact.phpに?を付ける必要がありません。\r\nそもそもcontact.phpのコードはどうなっていますか?\r\n返却値確認せずにlocation.hrefしていたり、無理にやろうとし過ぎてる気がします。","datePublished":"2021-11-29T14:24:21.989Z","dateModified":"2021-11-29T14:25:31.665Z"},{"@type":"Comment","text":"ご回答ありがとうございます。\r\n現在、上記のコードで削除ができる様になりました。一点お聞きしたいことがありまして。。\r\n削除前にアラートを出す様にしたのですが、以下の例えの様に複数回でてしまいます。ここのアラート問題についてon Clickで別ファイルjsでアラート出すようにしたり、 if(window.confirm('削除しますか?')){の位置を変えてみたりしたり、console.log(btnid);で取得したIDを表示させたりしたりして行きましたが、解決できませんでした。もし、お時間がありましたらお願いしたいです。\r\n\r\n\r\nデータベース登録表示\r\nID 名前\r\n10 伊藤 アラートで呼び出すと3回'削除しますか?が表示されてしまいます。\r\n11 佐藤 アラートで呼び出すと2回'削除しますか?が表示されてしまします。\r\n12 五頭 アラートで呼び出すと1回'削除しますか?が表示されてしまいます。","datePublished":"2021-11-30T14:40:36.252Z","dateModified":"2021-11-30T14:40:36.252Z"},{"@type":"Comment","text":"コードがどんどん意味分からんなってる気が\r\n\r\n↓これだけで良かったはずなんですけどね。。\r\n onClick=\"return deleteData('');\" >\r\n\r\n全然関係ないと思いますが\r\n ここに何か入ってますね。→\b>削除\r\n\r\nconfirmが何回も出るのはループ回数分だけscriptが作られているからでは?whileの中に入ってますし。画面表示後、ブラウザの「ソースを表示」で生成されたHTML確認してみてください(動的Webアプリケーションでは必須です)。","datePublished":"2021-11-30T20:42:02.243Z","dateModified":"2021-11-30T20:42:02.243Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/PDO","name":"PDOに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/371472","name":"削除ボタン実行で削除 pdo"}}]}}}
現在、データベースから取得したデータを表示させ、それを削除ボタンにて削除したいと思っております。
その際に、削除ボタンを押してアラートを出しOKなら削除、キャンセルなら処理取り消しをしたく、jsとphpファイルを分けて記述しました。削除ボタンでアラートは出るもののphpに記述した削除処理を読み込ませるのがうまくできず削除できない状況となっております。
行なったこといたしましては、phpに script処理を無理やりのように埋め込んでボタンが押されたら→削除処理に行くよう記述したのですがどうにも削除ボタンを押したらアラートは出るが削除押さなくてもページをリロードすると消えてしまいます。
アドバイスをいただきたいです。
・削除ボタンでアラート表示OKなら削除
php.
1<?php
2
3$sql = 'select id, name, kana, tel, email, body, created_at from contacts';
4$stmt = $db->query( $sql );
5
6echo "<table>\n";
7echo "\t<tr><th>id</th><th></th><th>name</th><th></th><th>kana</th><th></th><th>tel</th><th></th><th>email</th><th></th><th>body</th><th></th><th>created_at</th></tr>\n";
8while( $result = $stmt->fetch( PDO::FETCH_ASSOC ) ){
9 echo "\t<tr>\n";
10 echo "\t\t<td>{$result['id']}</td>\n";
11 echo "\t\t<td> </td>\n";
12 echo "\t\t<td>{$result['name']}</td>\n";
13 echo "\t\t<td> </td>\n";
14 echo "\t\t<td>{$result['kana']}</td>\n";
15 echo "\t\t<td> </td>\n";
16 echo "\t\t<td>{$result['tel']}</td>\n";
17 echo "\t\t<td> </td>\n";
18 echo "\t\t<td>{$result['email']}</td>\n";
19 echo "\t\t<td> </td>\n";
20 echo "\t\t<td>{$result['body']}</td>\n";
21 echo "\t\t<td> </td>\n";
22 echo "\t\t<td>{$result['created_at']}</td>\n";
23 echo "\t\t<td> </td>\n";
24 echo "\t\t<td><a href=edit.php? id=".$result['id'].">編集</a>"."</td>\n";
25 echo "\t\t<td> </td>\n";
26 ?>
27 <td><a href= contact.php class="deleteBtn" data-id='<?php echo $result['id'] ;?>' onClick="return dspDelete();" >削除</a></td>
28 <?php
29 echo "\t</tr>\n";
30 ?>
31
32<script>
33 $(".deleteBtn").click(function(){
34
35 var btnid = $(this).data("id");
36 console.log(btnid);
37 deleteData(btnid);
38 });
39
40
41
42 function deleteData(btnid){
43 if(window.confirm('削除しますか?')){
44 $.ajax({
45 type: 'POST',
46 dataType:'json',
47 url:'delete_func.php',
48 data:{
49 btnid:btnid,
50 },
51
52 success:function(data) {
53 console.log(data);
54 window.location.href = "./";
55 },
56 error:function(XMLHttpRequest, textStatus, errorThrown) {
57 alert(errorThrown);
58
59 }
60
61 });
62
63 }
64 }
65</script>
66
67<?php
68
69 }
70echo "</table>\n";
71
72?>
delete_func.php
$jsondata = $_POST['btnid'];
$stmt = $db->prepare('DELETE FROM contacts WHERE id = '.$jsondata.' ');
$stmt->execute();
header('Content-type: application/json');
echo json_encode( $jsondata );
画面表示したときにはPHPの仕事は全部終わってます。
つまり、表示したときには最後のidが必ず削除され続けているわけです。
表示と処理は完全に別個のリクエストにしてください。
今のコードだとcontact.phpに削除処理を書くことになりますが、現在の書き方だとidは渡らないのでGETリクエストを構成するためにクエリストリングの形式で記載すると良いです(あくまで手法の1つ)
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

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

テンプレート機能で
簡単に質問をまとめる
質問する
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/29 06:52
2021/11/29 07:14
2021/11/29 07:15
2021/11/29 07:44 編集
2021/11/29 11:21
2021/11/29 13:16 編集
2021/11/29 14:09 編集
2021/11/29 14:25 編集
2021/11/30 14:40
2021/11/30 20:42