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

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

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

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

Q&A

解決済

1回答

2216閲覧

PHPのポップアップ確認後の削除機能が作動しない

masaa0802

総合スコア28

PHP

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

0グッド

1クリップ

投稿2022/03/17 06:18

編集2022/03/17 16:52

前提・実現したいこと

現在PHPで削除機能を実装しております。実現したいことは削除ボタンを押すと'本当に削除しますか?'のポップアップが出てきて、OKを押すと登録されているデータが削除されるという流れです。

発生している問題・エラーメッセージ

イメージ説明

contact.phpの削除ボタンを押すとポップアップが出てOKを押すとdelete.phpへ飛び、Idが渡されているのですが、処理が完了せず、delete.phpの画面のまま止まってしまいます。OKを押した後、削除処理が実行され、contact.phpの画面へ戻り、一覧からデータを削除するにはどうすればいいでしょうか?

ソースコード

php

1<!-- contact.php --> 2 <form action="" method="post"> 3 <table> 4 <th>氏名</th> 5 <th>フリガナ</th> 6 <th>電話番号</th> 7 <th>メールアドレス</th> 8 <th>お問い合わせ内容</th> 9 <th></th> 10 <th></th> 11 <?php if( !empty($message_array) ){ ?> 12 <?php foreach( $message_array as $value ){ ?> 13 <tr> 14 <td><p><?php echo $value['name']; ?></p></td> 15 <td><p><?php echo $value['kana']; ?></p></td> 16 <td><p><?php echo $value['tel']; ?></p></td> 17 <td><p><?php echo $value['email']; ?></p></td> 18 <td><p><?php echo nl2br($value['body']); ?></p></td> 19 <td><a href="edit.php?message_id=<?php echo $value['id']; ?>" name="edit">編集</a></td> 20 <td><a href="delete.php?message_id=<?php echo $value['id']; ?>" onclick="return confirm('本当に削除しますか?')" name="delete">削除</a></td> 21 </tr> 22 <?php } ?> 23 <?php } ?> 24 </table> 25 </form> 26 <?php endif; ?> 27 </body> 28</html> 29

php

1 <!-- delete.php --> 2 3<?php 4 5 require_once(ROOT_PATH .'Models/Db.php'); 6 7$value = null; 8 9if( !empty($_GET['message_id']) && empty($_POST['message_id']) ) { 10 // SQL作成 11 $stmt = $pdo->prepare("SELECT * FROM contacts WHERE id = :id"); 12 13 // 値をセット 14 $stmt->bindValue( ':id', $_GET['message_id'], PDO::PARAM_INT); 15 16 // SQLクエリの実行 17 $stmt->execute(); 18 19 // 表示するデータを取得 20 $message_data = $stmt->fetch(); 21 22 // 投稿データが取得できないときは管理ページに戻る 23 if( empty($message_data) ) { 24 echo '投稿データが取得できませんでした'; 25 } 26} elseif ( !empty($_POST['message_id']) ) { 27 // トランザクション開始 28 $pdo->beginTransaction(); 29 30 try { 31 32 // SQL作成 33 $stmt = $pdo->prepare("DELETE FROM contacts WHERE id = :id"); 34 35 // 値をセット 36 $stmt->bindValue( ':id', $_POST['message_id'], PDO::PARAM_INT); 37 38 // SQLクエリの実行 39 $stmt->execute(); 40 41 // コミット 42 $res = $pdo->commit(); 43 44 } catch(Exception $e) { 45 46 // エラーが発生した時はロールバック 47 $pdo->rollBack(); 48 echo $e; 49 } 50 51 // 削除に成功したら一覧に戻る 52 if( $res ) { 53 header("Location: contact.php"); 54 exit; 55 } 56} 57 58// データベースの接続を閉じる 59$stmt = null; 60$pdo = null; 61 62?>

php

1<!-- Db.php --> 2 3<?php 4// 使用する変数を初期化 5$name = null; 6$kana = null; 7$tel= null; 8$email = null; 9$body = null; 10 11$message_array = array(); 12$message_date = null; 13$pdo = null; 14$stmt = null; 15$res = null; 16$option = null; 17 18// データベースに接続 19try { 20 21 $option = array( 22 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 23 PDO::MYSQL_ATTR_MULTI_STATEMENTS => false 24 ); 25 $pdo = new PDO('mysql:charset=UTF8;dbname=casteria;host=127.0.0.1;port=8111', 'root', '', $option); 26 27} catch(PDOException $e) { 28 29 // 接続エラーのときエラー内容を取得する 30 $error_message[] = $e->getMessage(); 31}

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

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

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

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

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

guest

回答1

0

ベストアンサー

<a href="message_id=<?php echo $value['id']; ?>" onclick="return confirm('本当に削除しますか?')" name="delete">削除</a>

どこにも delete.php を読んでませんよね。

<a href="delete.php?message_id=<?php echo $value['id']; ?>" onclick="return confirm('本当に削除しますか?')" name="delete">削除</a>

などではないでしょうか。

それと、もう1点。
delete.php で大きく処理が2つのブロックに分かれていますが、
GETで受信するとデータ取得して、POST受信すると削除処理するように見えます。
delete.php?message_id=999999
みたいなリンクで呼ばれるとGET受信することになるのですが、
シンプルにGET受信したら削除する処理だけにしたらよいのではないでしょうか。

投稿2022/03/17 06:27

編集2022/03/17 07:36
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

masaa0802

2022/03/17 06:34

ご返信ありがとうございます。 そちらも試してみたのですが、やはりdelete.phpの画面で止まったままで、削除機能も処理されないです。。。
masaa0802

2022/03/17 07:52

追加のメッセージありがとうございます。 ご指摘通り、POST受信のブロックは不必要で削除した後、GETのみで処理されました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問