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

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

ただいまの
回答率

87.61%

php bootstrapのモーダルでformでデータを送信できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,374

score 6

いつもお世話になっております。formにてデータを送信できず、困っています。皆様のお知恵を拝借したく存じます。
初学者なもので、ご迷惑をお掛けするかも知れませんがよろしくお願い致します。

前提・実現したいこと

php,bootstrapを使ってインスタ風のサービスを作っています。
投稿の一覧表示内で論理削除ボタンを設置し、モーダルにて確認し、
formにてpost_idを送って、そのidを元にDBにアクセスし論理削除を行いたい。

・他のページでは、bootstrapのformは使えている。
・var_dumpしてどの時点でデータが送れていないのか、確認してformデータが送信できていないと判明している。
var_dump($_POST['is_deleted']); -> NULL

又、このようなことしなくてもこうやればできるよ!なども教えて頂ければ幸いです。

編集・追記依頼の部分の画像になります
イメージ説明

該当のソースコード html bootstrap(modal)

<!-- モーダル ここから -->

  <div class="flexbox modal_bt">
    <button type="button" class="btn btn-primary btn-sm control" data-toggle="modal" data-target="#myModal-data3">
      <i class="far fa-trash-alt fa-lg"></i>
    </button>
  </div>

  <div class="modal fade" id="myModal-data3" tabindex="-1" role="dialog">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h4 class="modal-title">投稿の削除</h4>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        </div>
        <div class="modal-body">
          <form method="post" action="">
            <div class="form-group">
              <h5>本当に削除しますか?</h5>
              <p>論理削除なので投稿自体は削除されません</p>
            </div>
            <div class="modal-footer">
              <!-- DBの論理削除カラムを1に変更する -->
              <input type="hidden" id="is_deleted" name="is_deleted" value="<?php echo $post['id']; ?>">
              <input type="submit" class="btn btn-primary" value="削除">
            </div>
          </form>
        </div>
      </div>
    </div>
  </div>

<!-- モーダル ここまで -->

該当のソースコード php

<?php
  var_dump($_POST['is_deleted']);
  // 論理削除
  if (!empty($_POST['is_deleted'])) {
    var_dump('if文入ったよ');
    $postIsDeleted = $db->prepare('UPDATE posts SET is_deleted=1 WHERE post_id=?');
    $postIsDeleted->execute($_POST['is_deleted']);

    header('Location: index.php'); exit();
  }
?>

試したこと

同じような問題が記事になっていないか検索したところ
・モーダルを覆うように<form>を書く
→特に変わらない
・type="submit"をモーダルの外側に書く
→モーダル内に送信ボタンを入れたいので却下(試していない)
・idやnameをユーモアな名前に変更
→最初はid,name共にdeleteでしたがis_deletedに変更 →特に変わらない

補足情報(FW/ツールのバージョンなど)

AWS EC2

PHP 7.0.33 (cli) (built: Jan  9 2019 22:04:26) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

bootstrap 4.1.3

必要な情報が足りないようでしたら、言って頂ければ追記致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • cochumo

    2019/01/21 08:49

    ここではvalueに$post['id']を入れて削除したい際に、この$post['id']の値を使ってSQLの
    ('UPDATE posts SET is_deleted=1 WHERE post_id=?')の?の部分に入れているので問題ありませんでした。値も取れていることを確認しています。
    しかし、formが送れているところではこのような処理をしていないので怪しいかも知れませんね。調べてみます!

    キャンセル

  • m.ts10806

    2019/01/21 09:03

    この書き方では$_POSTを間違えて書いたという印象しか受けませんでした。$postがどこからどう来ているか質問者さんにしかわからないので。
    間違えて書いたならemptyなので送信されてないのもうなずけます。

    キャンセル

  • cerfweb

    2019/02/01 19:17

    ひょっとして<form>が<form>の入れ子になっていたりはしていませんか?

    キャンセル

回答 1

check解決した方法

0

非常に初歩的なことでした。

$postIsDeleted->execute($_POST['is_deleted']);

ではなく

$postIsDeleted->execute(array($_POST['is_deleted']));

でした。
executeする変数が1つだったためarrayがいらないと思っていました。
リファレンスの確認不足でした。
お騒がせしました。
PDOStatement::execute
https://www.php.net/manual/ja/pdostatement.execute.php

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る