表題の通りでして、現状チェックボックスで値が複数チェックしても1つしか送信されません。
formタグ内にあるinputタグ内のform属性をdeleteにすれば複数チェックして複数送信されるのですが、そうした場合下部の削除ボタンのform属性が被ってしまいます。同一idのform要素(form="delete")があり、文法上問題があると思い改善をしたいと思っています。id要素はユニークに設定したいです。
受け取り側のPHPでもvar_dumpで1つしか出力されないので送信側で複数送れていないのではないかと思うのですが、対処法がわかりませんでした。何卒ご教示いただきたい次第です。よろしくお願いいたします。
↓送信するindex.php
php
1 <tr> 2 <td><input type="checkbox"></td><td>ID</td><td>件名</td><td>投稿ユーザー</td><td>投稿日時</td> 3 </tr> 4 <?php 5 foreach($rows as $row){ 6 ?> 7 <tr> 8 <td> 9 <form action="delete.php" method="GET" onSubmit="return check()" id="delete"> 10 <input type="checkbox" name="id[]" value="<?php print($row['id']);?>">//ここにform="delete"と書くと複数チェックしても上手くいくが「削除する」のinputとformが被るので改善したい 11 </form> 12 </td> 13 <td><?php print($row['id']); ?> 14 </td> 15 <td> 16 <form action="edit.php" method="POST"> 17 <a href="edit.php?id=<?php echo $row['id'];?>"> 18 <?php echo $row['subject']; ?> 19 </a> 20 </form> 21 </td> 22 <td><?php echo $row['post_user']; ?></td> 23 <td><?php echo $row['created_at']; ?></td> 24 </tr> 25 <?php 26} 27?> 28 </table> 29 <input form="delete" type="submit" value="削除する"> 30 31 <script type="text/javascript"> 32 function check(){ 33 if(window.confirm('本当に削除しますか?')){ 34 return true; 35 var elements = document.getElementsByName('id[]') ; 36 for(var i = 0 ; i < elements.length ; i ++){ 37 if(elements[i].checked == true){ 38 // alert(elements[i].value); 39 location.href = "delete.php"; 40 } 41 } 42 } 43 else{ 44 window.alert('キャンセルされました'); 45 return false; 46 } 47 } 48 </script>
↓受け取るdelete.php
php
1<?php 2require('dbconnect.php'); 3var_dump($_GET['id']); //複数チェックしても1つしか表示されない 4 5 if (isset($_GET['id']) && is_array($_GET['id'])) { 6 $id = []; 7 $id = $_GET['id']; 8 }else{echo "NOTARRAY";} //NOTARRAYが表示される 9 10 for($i=0;$i < count($id); $i++){ 11 $sql = "update t_bbs_6_6 set deleted_at = cast(now() as datetime) WHERE id = $id[$i];"; 12 $stmt = $db->prepare($sql); 13 $stmt->execute(); 14 } 15var_dump($id) //nullになる 16 // header('Location: index.php'); 17 // exit(); 18 ?> 19
回答1件
あなたの回答
tips
プレビュー