実現したいこと
- 情報を格納する機能を追加したい。
前提
一覧に選択ボタンを用意し、選択ボタンが押されたら一覧から情報を消す。
選択した情報一覧という項目を別に用意して、選択ボタンが押された情報はこの選択した情報一覧に入れる機能を作成したい。
下記ejsコードの146~165が今回問題としている記述です。
今回使用している情報一覧はmysqlから持ってきています。(この下の質問のところに載せました。)
該当のソースコード
ejs
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <link rel="stylesheet" type="text/css" href="/new/public/style.css"> 6 <title>顧客情報管理システム</title> 7 </head> 8 <body> 9 <div class="table1"> 10 <table> 11 <tr> 12 <th>ID</th> 13 <th>名前</th> 14 <th>ふりがな</th> 15 <th>性別</th> 16 <th>メールアドレス</th> 17 <th>電話番号</th> 18 <th>住所</th> 19 <th>都道府県</th> 20 <th>世帯</th> 21 <th>更新</th> 22 <th>削除</th> 23 <th>選択</th> 24 </tr> 25 <tbody id="list"> 26 <% personas.forEach(function(value) { %> 27 <tr> 28 <td> 29 <%= value.id %> 30 </td> 31 <td> 32 <%= value.name %> 33 </td> 34 <td> 35 <%= value.kana_name %> 36 </td> 37 <td> 38 <%= value.gender %> 39 </td> 40 <td> 41 <%= value.email %> 42 </td> 43 <td> 44 <%= value.phone %> 45 </td> 46 <td> 47 <%= value.address %> 48 </td> 49 <td> 50 <%= value.workplace %> 51 </td> 52 <td> 53 <%= value.household %> 54 </td> 55 <td><a href="/edit/<%= value.id %>"><button>更新</button></a></td> 56 <td><a href="/delete/<%= value.id %>"><button>削除</button></a></td> 57 <td><a href="/selection/<%= value.id %>"><button class="selectButton">選択</button></a></td> 58 </tr> 59 <% }); %> 60 </tbody> 61 <thead id="list2"> 62 </thead> 63 </table> 64 <p><input type="text" id="searchText" placeholder="検索キーワードを入力"></p> 65 <p><button id="checkButton1">検索</button></p> 66 <p class="newmember1"><a href="/create1">ユーザーの追加</a></p> 67 <p class="newmember2"><a href="/create2">選択した情報一覧</a></p> 68 </div> 69 <style> 70 table, 71 th, 72 td { 73 font-size: 12px; 74 border: 1px #000 solid; 75 border-collapse: collapse; 76 padding: 10px; 77 } 78 79 th { 80 color: #fff; 81 background-color: #777; 82 } 83 84 td { 85 text-align: center; 86 } 87 88 .table1 { 89 display: flex; 90 } 91 92 input { 93 margin: 0 20px; 94 } 95 96 .newmember1 { 97 position: absolute; 98 top: 70px; 99 left: 1080px; 100 } 101 102 .newmember2 { 103 position: absolute; 104 top: 110px; 105 left: 1080px; 106 } 107 </style> 108 <script type="text/javascript"> 109 //ボタンがクリックされたときの処理 110 function buttonClick1() { 111 let list = document.getElementById('list'); 112 list.remove() 113 //名前を検索して表示させる処理をする関数を実行 114 usersSearch1(); 115 } 116 //変数宣言 117 let checkButton1 = document.getElementById("checkButton1"); 118 checkButton1.addEventListener("click", buttonClick1); 119 //名前を検索して表示させる処理 120 function usersSearch1() { 121 let memberUser = JSON.parse('<%= JSON.stringify(personas) %>'.replace(/"/g, '"')); 122 //空の配列を用意 123 let newMember1 = []; 124 for (let i = 0; i < memberUser.length; i++) { 125 let input = document.getElementById("searchText"); 126 let getValue1 = input.value; 127 let getName = memberUser[i].name; 128 //文字列を検索 129 let members = getName.indexOf(getValue1); 130 if (members !== -1) { 131 //空の配列に追加する 132 newMember1.push(memberUser[i]); 133 console.log(newMember1); 134 } 135 } 136 //ブラウザに表示 137 newMember1.forEach(function (value) { 138 let td = document.getElementById('list2'); 139 td.insertAdjacentHTML( 140 "beforebegin", 141 `<tr class=memberUser><td>${value.id}</td><td>${value.name}</td><td>${value.kana_name}</td><td>${value.gender}</td><td>${value.email}</td><td>${value.phone}</td><td>${value.address}</td><td>${value.workplace}</td><td>${value.household}</td><td><button>更新</button></td><td><button>削除</button></td></tr>` 142 ); 143 }); 144 } 145 146 const selectButtons = document.querySelectorAll("selectButton"); 147 // 選択した情報を保存するための配列 148 let selectedInfo = []; 149 // 選択ボタンがクリックされた時の処理 150 function handleSelectButtonClick(event) { 151 // 押されたボタンがどの行のものなのか特定 152 const selectedRow = event.target.parentElement.parentElement; 153 // 選択した情報を取得 154 const selectedData = selectedRow.firstElementChild.textContent; 155 // 選択した情報を配列に追加 156 selectedInfo.push(selectedData); 157 // テーブルから情報を削除 158 selectedRow.remove(); 159 // 選択した情報一覧を更新 160 updateSelectedInfo(); 161 } 162 //各選択ボタンにクリックイベントを追加 163 selectButtons.forEach((button) => { 164 button.addEventListener("click", handleSelectButtonClick); 165 }); 166 </script> 167 </body> 168</html> 169 170
js
1const path = require("path"); 2const express = require("express"); 3const ejs = require("ejs"); 4const app = express(); 5const bodyParser = require("body-parser"); 6const port = 3000; 7 8app.use(bodyParser.urlencoded({ extended: true })); 9app.use(express.static('public')); 10app.set("view engine", "ejs"); 11 12const mysql = require("mysql2"); 13 14const con = mysql.createConnection({ 15 host: "localhost", 16 user: "root", 17 password: "rootroot", 18 database: "express_db", 19}); 20 21// mysqlからデータを持ってくる 22app.get("/", (req, res) => { 23 const sql = "select * from personas"; 24 con.query(sql, function (err, result, fields) { 25 if (err) throw err; 26 res.render("index", { 27 personas: result 28 }); 29 }); 30}); 31 32//入力フォームに飛ぶための記述 33app.get("/create1", (req, res) => { 34 res.sendFile(path.join(__dirname, "/views/html/form.html")); 35}); 36 37//選択した情報一覧に飛ぶための記述 38app.get("/create2", (req, res) => { 39 res.sendFile(path.join(__dirname, "/views/html/selection.html")); 40}); 41 42//更新フォームに飛ぶための記述 43app.get("/edit/:id", (req, res) => { 44 const sql = "SELECT * FROM personas WHERE id = ?"; 45 con.query(sql, [req.params.id], function (err, result, fields) { 46 if (err) throw err; 47 res.render("edit", { user: result }); 48 }); 49}); 50 51//削除機能の記述 52app.get("/delete/:id", (req, res) => { 53 const sql = "DELETE FROM personas WHERE id = ?"; 54 con.query(sql, [req.params.id], function (err, result, fields) { 55 if (err) throw err; 56 res.redirect("/"); 57 }); 58}); 59 60//選択ボタン 61app.get("/selection/:id", (req, res) => { 62 const sql = "SELECT FROM personas WHERE id = ?"; 63}); 64 65app.listen(port, () => console.log(`Example app listening on port ${port}!`)); 66
html
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>顧客情報管理システム</title> 6 </head> 7 <body> 8 <h1>選択した情報一覧</h1> 9 </body> 10 </html>
やり方自体が間違っているかもしれませんが、解決のためアドバイスいただけると幸いです。よろしくお願いいたします。

あなたの回答
tips
プレビュー