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

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

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

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

Q&A

解決済

2回答

865閲覧

PHP deleteが反映されない

majka

総合スコア11

PHP

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

0グッド

1クリップ

投稿2020/04/06 09:12

投稿したデータを削除するため、削除リンクを踏み

PHP

1index.php 2 3<!-- リスト表示 --> 4<article> 5 <?php while($list = $lists->fetch()): ?> 6 <p><?php print('名前: ' . $list['name'] . 'さん ' . ' ' . '出身: ' . $list['from_japan'] . ' ' . $list['age'] . '歳');?></p> 7 <time><?php print($list['created']); ?></time> 8 <!-- 管理者のみ表示 今回はスルー --> 9 <a href="update.php?id=<?php print($list['id']);?>">編集</a> 1011 <a href="delete.php?id=<?php print($list['id']);?>">削除</a> 12 <hr> 13 <?php endwhile; ?>

delete.phpにidを渡し、

PHP

1<pre> 2 <?php 3 // 値が渡らない 4 require('dbconnect.php'); 5 6 if (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) { 7 8 $id = $_REQUEST['id']; 9 $stmt = $db->prepare('DELETE FROM to_pass_away WHERE id=?'); 10 $stmt->execute(array('id')); 11 } 12 header('Location: index.php'); 13 ?> 14</pre>

delete.phpに飛ばされるも、データが削除されず残ったままです。
憶測がつかないので、ご教授いただければ幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

PHP

1 $stmt->execute(array('id'));

せっかく受け取ろうとしている
$id
はここでexecute()に渡してあげて下さい。

PHP

1 $stmt->execute([$id]);

($idに想定通りにidの値がわたってる事も確認してください)
execute()の直前で

PHP

1var_dump($id); 2die();

等で確認。(確認できたら削除)


まずは
PHP デバッグ 方法
などで検索してみて、デバッグ方法を確立することをおすすめします

投稿2020/04/06 10:21

編集2020/04/06 10:32
tanat

総合スコア18727

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

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

退会済みユーザー

退会済みユーザー

2020/04/06 10:27

みおとしてーた
majka

2020/04/06 11:02

無事解決しました。 確かにデバックを考慮せず進めていました。 ありがとうございました。
tanat

2020/04/07 12:04

解決してよかったです。 リダイレクトがある場合はどうしてもデバッグしにくくなってしまうので、 IDEを使ってブレークポイントで止めたり(PHP xdebug ブレークポイントあたりで検索してみてください)、回答の様にdie()で止めたりする必要がありますね。
guest

0

まず、GETで受ける前提であるなら、$_GET['id']を使うべきです。
一旦var_dump($_GET['id']);をphpの冒頭に入れて
パラメータを受信できているかを確認してください。

そして、dbconnect.phpでどんなことをやっているかわかりませんが、
トランザクション処理を有効にしているならば、
コミット処理を入れないと反映されません。

php

1/* 変更をコミットする */ 2$db->commit();

それと、ていねいにやるなら、
PHP: PDOStatement::bindValue - Manual
でプリペアドステートメントのパラメータを文字列か数値か指定すると改善したりして。

php

1 $id = $_GET['id']; 2 $stmt = $db->prepare('DELETE FROM to_pass_away WHERE id=?'); 3 $stmt->bindValue(1, $id, PDO::PARAM_INT); 4 $stmt->execute();

これで $id が渡ります。
あるいは、

php

1 $stmt->execute(array($id)); // not 'id'

投稿2020/04/06 09:27

編集2020/04/06 10:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

majka

2020/04/06 09:43

回答ありがとうございます。 var_dumpの結果は string(2) "11"でした(11はid) また、dbconnect.phpではただmysqlからデータを取得する処理だけなので、 <?php try { $db = new PDO('mysql:dbname=deceased;host=127.0.0.1;charaset=utf8', 'root', ''); } catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); } ?> idを数字に指定すれば通ったりしますかね、?
退会済みユーザー

退会済みユーザー

2020/04/06 10:32

受信はできているから、ちゃんとexecute()のところまで渡るように、気を抜かずコードを見直しを。 (回答に見直しをかけたので、ご確認を。)
majka

2020/04/06 11:03

executeを正しく理解せずに使用していたので非常に助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問