🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PDO

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

SQL

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

PHP

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

Q&A

解決済

1回答

1242閲覧

【PHP】DELETE文をボタンを押してから実行するようにしたい。

ma_3636

総合スコア19

PDO

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

SQL

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

PHP

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

0グッド

0クリップ

投稿2019/11/11 10:15

編集2019/11/11 10:17

解決したいこと

DELETE文をボタンを押してから実行するようにしたい。

PHP初心者です。DELETE文を実行するタイミングの条件式記述で行き詰まってしまいました。
ご教授いただけますと幸いです。

実際のコード

PHP

1 2<?php 3session_start(); 4require('../dbconnect.php'); 5require('../function.php'); 6 7if (isset($_SESSION['join']['user_id'])) { 8 if (isset($_GET['id'])){ 9 }else{ 10 $error['id'] = 'nologin'; 11 } 12}else{ 13 $error['join'] = 'nologin'; 14} 15 16 17//会委員IDと名前取得 18if (isset($_SESSION['join']['user_id'])) { 19$users = $db->prepare('SELECT user.* FROM user WHERE user_id=?'); 20$users->execute(array($_SESSION['join']['user_id'])); 21$user = $users->fetch(); 22}else{ 23$error['join'] = 'error'; 24} 25 26//商品情報取得(単体) 27if (isset($_GET['id'])) { 28$objects = $db->prepare('SELECT * FROM purchase,user WHERE purchase.id=?'); 29$objects->execute(array($_GET['id'])); 30$object = $objects->fetch(); 31} 32// isset($_POST['id']) && 33if (isset($object['id'])) { 34$delete_objects = $db->prepare('DELETE FROM purchase WHERE id=:id'); 35$delete_objects->execute(array(':id' => $_GET['id'])); 36header('location: delete_complete.php'); 37exit(); 38} 39 ?> 40 <!DOCTYPE html> 41 <html lang="ja" dir="ltr"> 42 <head> 43 <meta charset="utf-8"> 44 <title></title> 45 </head> 46 <body> 47 <p><a href="index.php">トップページ</a></p> 48 <?php if(!isset($error)): ?> 49 <p>商品名</p> 50 <p><?php echo $object['purchase_name'] ?></p> 51 <p>値段</p> 52 <p><?php echo $object['price'] ?></p> 53 <p>在庫数</p> 54 <p><?php echo $object['stock']?></p> 55 <p>商品説明</p> 56 <p><?php echo $object['item_text'] ?></p> 57 <form class="" action="delete.php" method="post"> 58 <input type="button" name="delete" value="削除する"> 59 </form> 60 <?php elseif (isset($error['join'])) :?> 61 <p><a href="../join/login.php">ログインしてください</a></p> 62 <?php elseif (isset($error['id'])): ?> 63 <p>お手数ですが、処理エラーが発生したため、再度<a href="mypage.php">マイページ</a>から選択し直してください</p> 64 <?php endif; ?> 65 </body>

上記の状態でDELETE文を実行することができているのですが、DELETE文前のIF条件式を以下のように書き換えると実行することができなくなってしまいます。
※書き換え後もエラーは発生していません。

PHP

1// isset($_POST['id']) &&isset($object['id'] 2if (isset($_POST['delete'])) { 3$delete_objects = $db->prepare('DELETE FROM purchase WHERE id=:id'); 4$delete_objects->execute(array(':id' => $_GET['id'])); 5header('location: delete_complete.php'); 6exit(); 7}

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

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

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

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

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

guest

回答1

0

ベストアンサー

array(':id' => $_GET['id'])

postでの受け渡し何idはGETを参照しようとしていませんか?

投稿2019/11/11 10:29

yambejp

総合スコア116690

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

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

ma_3636

2019/11/11 10:36

postでの受け渡し何idはGETを参照しようとしていませんか? > 前ページで受け取った$_GET['id']を参照しています! <p><a href="delete.php?id=<?php echo $_GET['id'] ?>">削除する</a></p> $_POSTと$_GETで競合?しているのでしょうか?
yambejp

2019/11/11 10:45

delete.php?id=123456 で飛んできたらgetは参照できても isset($_POST['delete'])はfalseで評価されるので分岐にはいれませんね
ma_3636

2019/11/11 10:52

そうでしたか、、勉強になりました! formのメソッドをGETに変えても動作しなかったので、別案で良しとすることにしました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問