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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1636閲覧

削除ボタン実行で削除 pdo

shos3

総合スコア15

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/11/29 06:34

編集2021/11/30 14:30

現在、データベースから取得したデータを表示させ、それを削除ボタンにて削除したいと思っております。
その際に、削除ボタンを押してアラートを出し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 );

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

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

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

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

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

guest

回答1

0

画面表示したときにはPHPの仕事は全部終わってます。
つまり、表示したときには最後のidが必ず削除され続けているわけです。

表示と処理は完全に別個のリクエストにしてください。

今のコードだとcontact.phpに削除処理を書くことになりますが、現在の書き方だとidは渡らないのでGETリクエストを構成するためにクエリストリングの形式で記載すると良いです(あくまで手法の1つ)

投稿2021/11/29 06:51

m.ts10806

総合スコア80850

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

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

m.ts10806

2021/11/29 06:52

削除だけならAjaxで処理したほうが良いとは思いますが。
shos3

2021/11/29 07:14

ご回答ありがとうございます。 記述方法がクエリ文字列にしてからわからず、ポイントをお教えしていただきたいです。
shos3

2021/11/29 07:15

Ajaxの方で一度考えてみます。
m.ts10806

2021/11/29 07:44 編集

クエリストリングになってませんよ。 URL?key=value&key=value… 現状だと「編集」のほうには?がありません。「削除」のほうにはvalueしかありません。 クエリストリングでもAjaxでも必要な情報を何かしらの手法でリクエストに含める必要があります。
shos3

2021/11/29 11:21

Ajaxにて行う際にコードを色々確かめたのですが思うようにいかない為、お時間があればお教えしていただきたいです。
m.ts10806

2021/11/29 13:16 編集

あの。「思うようにいかない」「うまくいかない」では赤の他人には何も分からないんですよ(たぶん前も指摘した) 何を参考にどういうコードを書いて何が起きているのか具体的に記載してください。質問は編集できます。
shos3

2021/11/29 14:09 編集

申し訳ございません。 追記させていただきました。 一度調べ、Ajaxを組み込みました。$result['id']にカラムのデータIDが入っている為、ボタンIDを取得しこの$result['id']を削除する様に記述しましたが正常に動かずでした。IDのところは他の値(idなど)で試したところエラーになった為、$result['id']にするとエラーが出ない為、取得はできていると思っております。 記述にてご指摘していただきたいです。
m.ts10806

2021/11/29 14:25 編集

deleteData() 呼び出す方の引数が空ですね。 return dispDelete(); あと、POSTでID送信するならcontact.phpに?を付ける必要がありません。 そもそもcontact.phpのコードはどうなっていますか? 返却値確認せずにlocation.hrefしていたり、無理にやろうとし過ぎてる気がします。
shos3

2021/11/30 14:40

ご回答ありがとうございます。 現在、上記のコードで削除ができる様になりました。一点お聞きしたいことがありまして。。 削除前にアラートを出す様にしたのですが、以下の例えの様に複数回でてしまいます。ここのアラート問題についてon Clickで別ファイルjsでアラート出すようにしたり、 if(window.confirm('削除しますか?')){の位置を変えてみたりしたり、console.log(btnid);で取得したIDを表示させたりしたりして行きましたが、解決できませんでした。もし、お時間がありましたらお願いしたいです。 データベース登録表示 ID   名前 10  伊藤      アラートで呼び出すと3回'削除しますか?が表示されてしまいます。 11  佐藤      アラートで呼び出すと2回'削除しますか?が表示されてしまします。 12  五頭 アラートで呼び出すと1回'削除しますか?が表示されてしまいます。
m.ts10806

2021/11/30 20:42

コードがどんどん意味分からんなってる気が ↓これだけで良かったはずなんですけどね。。 onClick="return deleteData('<?php echo $result['id'] ;?>');" > 全然関係ないと思いますが ここに何か入ってますね。→>削除</a> confirmが何回も出るのはループ回数分だけscriptが作られているからでは?whileの中に入ってますし。画面表示後、ブラウザの「ソースを表示」で生成されたHTML確認してみてください(動的Webアプリケーションでは必須です)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問