

現在掲示板を作ってますが、削除機能の実装ができません。  
sqlの条件や、根本的なformの構成が良くないのかと思ってます。

長くなるので一部省略してます。  
情報が足りなかったら、指摘お願いします。

**index.php**

[code]

    <body>
    <div id="wrap">
      <div id="head">
        <h1>掲示板</h1>
      </div>
      <div id="content">
          <div>
          <label for="view_name">表示名</label>
          <input id="view_name" type="text" name="view_name" value="<?php if( !empty($_SESSION['view_name']) ){ echo $_SESSION['view_name']; } ?>">
          </div><br>
          <form action="index.php" method="post" id="form"><!-- javascript:void(0)-->
              <textarea name="message" id="message" cols="70" rows="15" placeholder="メモを残してください"></textarea><br>
              <input type="submit" value="書き込む" id="write">
          </form>
          <!--
          <form id="form_1" method="post" accept-charset="utf-8" return false>
              <p>名前 <input type="text" name = "userid" id ="userid"> </p>
              <p>パスワード <input type="text" name = "passward" id="passward"> </p>
          </form>
          <button id="ajax">ajax</button>
          </div>
          -->
         <hr>
        <hr>
      </div>
      <?php
        $prin = $db->query("SELECT * FROM tb /*ORDER BY ban DESC*/");
        while($fet = $prin->fetch()):
          echo "ID :".nl2br($fet['id'])."<br>";
          echo nl2br($fet['mes'])."<br>";
    
          // 表示名の入力チェック
          if( empty($_POST['view_name']) ) {
            $error_message[] = '表示名を入力してください。';
          } else {
            $clean['view_name'] = h($_POST['view_name'], ENT_QUOTES);
    
            // セッションに表示名を保存
            $_SESSION['view_name'] = $clean['view_name'];
          }
    
      ?>
        <!--ポップアップ
        <div id="popup" style="width: 200px;display: none;padding: 30px 30px;border: 2px solid #000;margin: auto;">
          削除しますか？<br />
          <button id="ok" onclick="okfunc()">削除</button>
          <button id="no" onclick="nofunc()">キャンセル</button>
        </div>
        -->
        <divv id="functions">
          <div id="bottons" style="display:inline-flex">
            <form action="delete.php" method="post">
              <input type="submit" value="削除" id="delete">
            </form>
          </div>
    
[/code]

**delete.php**

[code]

    <?php
    session_start();
    require('dbconnect.php');
    
    $id = $_POST['id'];
    $del = $db->prepare("DELETE FROM tb WHERE id = $id");//ここの条件がうまくできない
    $del->execute();
    
    header('Location: index.php'); exit();
    ?>
    
[/code]


CC BY-SA 4.0
2019-10-26T01:25:40.257
59983
2019-10-30T05:43:16.623
2019-10-26T06:13:14.553
3060
35497
question
php sql
PHP 掲示板　削除機能


１、 **prepare、execute** の使い方が違う。名前付きパラメータを用いて ”SQL
ステートメントを準備する”指定方法と、”疑問符パラメータを用いて SQL ステートメントを準備する”指定方法がありますが、疑問符パラメータでの例です。

[code]

    $del = $db->prepare("DELETE FROM tb WHERE id = ?");
    $del->execute(array($id));
    
[/code]

２、削除したい削除投稿記事ID($_POST['id'])を指定するinputタグが無いのでサーバーに削除投稿記事IDが送信されないから削除できない

詳細は以下のリンクで確認して下さい。  
<https://www.php.net/manual/ja/pdo.prepare.php>

追記、  
GETパラメータで解決した様ですが、初心を完結してもらいたいので  
jqueryで POST送信するサンプルスクリプトを追記しておきます。

[code]

    <?php
    if(isset($_POST['id'])){
        echo intval($_POST['id']); exit;
    };
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src="//code.jquery.com/jquery-3.4.1.min.js"></script>
    </head>
    <body>
    <script>
        function send_post_id(pid){
            $.post( "a.php", { id: pid}).done(function( html ) { alert( html );});
        }
    </script>
    <a href="#" onclick="send_post_id('12345')">POST 送信</a>
    </body>
    </html>
    
[/code]

実際に試す時は、a.php として保存して下さい。


CC BY-SA 4.0
2019-10-28T03:58:05.680
60036
2019-10-30T05:43:16.623
2019-10-30T05:43:16.623
22793
22793
59983
answer