実現したいこと
メモアプリを作成しています。チェックボックスにチェックが入っているものだけをDBから消去したい
PHP
<?php session_start(); //DB接続// try{ $pdo=new PDO('mysql:host=********; dbname=********=utf8', '********', '********'); }catch(PDOException $e){ echo '接続できませんでした。'; } ?> <?php //ログイン中のIDと書き込み内容をDBに登録// if(isset($_SESSION['user']) && isset($_POST['add']) && !empty($_POST['contents'])){ $sql = $pdo->prepare('insert into text(login_id,contents) values(?,?)'); $sql -> bindvalue(1,$_POST['login_id']); $sql -> bindvalue(2,$_POST['contents']); $sql -> execute(); } //ユーザーIDによって違う内容を表示// if(isset($_SESSION['user']['id'])){ $sql=$pdo->prepare('select * from text where login_id = "'.$_SESSION['user']['id'].'"'); $sql->execute(); foreach($sql as $row){ echo '<form method="post">'; echo $row['contents']; echo '<input type="checkbox" name="check">'; echo '</form>'; } } //任意のものだけ消去したい if(isset($_POST['delete'])){ $sql=$pdo->prepare('delete from text where login_id = "'.$_SESSION['user']['id'].'" and //何か条件を追加すれば良いと思う'); $sql -> execute(); } //PHP空白判定// $add = filter_input(INPUT_POST,'add'); $contents = filter_input(INPUT_POST,'contents',); if(isset($add)){ if(empty($contents)) echo '内容を入力してください'; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> <link rel="stylesheet" href="../css/style2.css"> <title>Document</title> </head> <body> <?php require('../header/header.php'); ?> <hr> <h1>リスト</h1> <?php //セッションが入っている場合 if(isset($_SESSION['user'])){ echo 'ユーザーID:<input type="text" name="login_id" value="'.$_SESSION['user']['id'].'" readonly>','<br>'; } echo '<form method="post">'; echo '<input type="text" name="contents" value="">'; echo '<button type="submit" name="add">追加</button>'; echo '<button type="submit" name="delete">消去</button>'; echo '</form>'; ?> </body> </html>
環境
- VSCode
- MySQL
試したこと
$sql -> excute($_POST['check']);にした場合できるかなと思いましたが無理でした。
postにcheckの値が入っていれば送信して任意のものを消去できる,もしくはDBにもチェックボックスみたいな感じの役割のものを追記すればできると思いましたがわかりませんでした。有識者さんアドバイスお願いいたします。
更新後のコード
PHP
<?php session_start(); //DB接続// try{ $pdo=new PDO('mysql:host=mysql154.phy.lolipop.lan; dbname=LAA1290628-upup;charset=utf8', 'LAA1290628', 'Shion0724'); }catch(PDOException $e){ echo '接続できませんでした。'; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> <link rel="stylesheet" href="../css/style2.css"> <title>Document</title> </head> <body> <?php require('../header/header2.php'); ?> <hr> <h1>リスト</h1> <?php echo '<form method="post">'; //セッションが入っている場合 if(isset($_SESSION['user'])){ echo 'ユーザーID:<input type="text" name="login_id" value="'.$_SESSION['user']['id'].'" readonly>','<br>'; } //内容追加 echo '<label for="name">内容:</label><input type="text" name="contents" id="name" value="">'; echo '<button type="submit" name="add">追加</button>'; echo '</form>'; //内容消去 echo '<form id="check" method="post">'; echo '<button type="submit" name="delete">消去</button>'; if(isset($_POST['check'])){ $check = $_POST['check']; foreach($check as $name){ //チェックボックスに内容が入っている //echo $name; } } echo '</form>'; ?> <?php //ログイン中のIDと書き込み内容をDBに登録// if(isset($_SESSION['user']) && isset($_POST['add']) && !empty($_POST['contents'])){ $sql = $pdo->prepare('insert into text(login_id,contents) values(?,?)'); $sql -> bindvalue(1,$_POST['login_id']); $sql -> bindvalue(2,$_POST['contents']); $sql -> execute(); } //内容を消去// if(isset($_POST['delete'])){ $sql=$pdo->prepare('delete from text where login_id = "'.$_SESSION['user']['id'].'" and contents="'.$name.'"'); $sql -> bindvalue(1,$name); $sql -> execute(); } //ユーザーIDによって違う内容を表示// if(isset($_SESSION['user']['id'])){ $sql=$pdo->prepare('select * from text where login_id = "'.$_SESSION['user']['id'].'"'); $sql->execute(); foreach($sql as $row){ // echo '<form method="post">'; echo $row['contents']; echo '<input type="checkbox" name="check[]" form="check" value="'.$row['contents'].'" >'; echo '<br>'; // echo '</form>'; } } //PHP空白判定// $add = filter_input(INPUT_POST,'add'); $delete = filter_input(INPUT_POST,'delete'); $contents = filter_input(INPUT_POST,'contents',); $check = filter_input(INPUT_POST,'check',); if(isset($add)){ if(empty($contents)) echo '内容を入力してください'; } if(isset($delete)){ if(empty($check)) echo 'チェックを入れてください'; } ?> </body> </html>
現状ですと1つずつしか消去できない感じです。
delete文のところに問題があると思いますが躓いています。
まだ回答がついていません
会員登録して回答してみよう