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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4046閲覧

セレクトボックスとラベルをNode.js + MySQLで連動させる

t_tak

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/22 07:59

前提・実現したいこと

Node.js + MySQL + Expressの練習でフォームを制作しております。
フォームにセレクトボックスとラベルがあり、セレクトボックスで選択した値によってラベルに表示する内容を変更したいです。

MySQLにはIDと名前、メールアドレスの3つをもった以下のlistテーブルが存在します。他にもいくつかテーブルが存在します。

+------+-----------+--------------------+
| id | name | mail |
+------+-----------+--------------------+
| 1 | user1 | user1@mail.com |
| 2 | user2 | user2@mail.com |
| 3 | user3 | user3@mail.com |
+------+-----------+--------------------+

発生している問題・エラーメッセージ

セレクトボックスには名前を表示させることができているのですが、 user1を選択したときはuser1@mail.comを表示させるということを node.js + mysqlで実現する方法がわからず詰まっております。

該当のソースコード

ejs

1<select input name="input_name"> 2 <span>名前</span> 3 <% for(var j in userdata) {%> 4 <% var usr_obj = userdata[j]; %> 5 <option value="userdata"><%= usr_obj.name %></option> 6 <% } %> 7 </select> 8<label> 9 <span>メールアドレス</span> 10 <input id="mail" name="input_mail"> 11</label>

javascript

1app.get("/", async (req, res) => { 2const usr_sql = "select * from user"; 3let user_results = await queryAsync(usr_sql); 4 5const sql = "select * from list"; 6let result = await queryAsync(sql); 7 8res.render("index.ejs",{userdata: user_results,content: result}); 9}); 10 11

試したこと

if文で処理するのかと思いましたが、ラベルに表示したい値をハードコーディングしていないため、どのように記述するか方法が思い浮かばない状況です。

分かりづらい質問かもしれませんが、よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

第一段階として、まずHTMLとJavaScriptだけで目的を満たすコードをハードコーディングしてみる、
というアプローチはいかがでしょうか?
これができれば、第二段階としてハードコーディング部分をejsで自動生成するように実装すればよいです。

2020/05/25 20:15 ごろ追記
第一段階のサンプルを作ってみました。
htmlファイルを作成し、コードを全部貼り付ければ動作確認できるかと思います。

HTML

1<label> 2 <span>名前</span> 3 <select id="username"> 4 <option value=""> 5 <option value="user1@mail.com">user1 6 <option value="user2@mail.com">user2 7 </select> 8</label> 9<label> 10 <span>メールアドレス</span> 11 <input id="mail"> 12</label> 13<script> 14 document.getElementById("username").addEventListener('change', changeName); 15 function changeName() { 16 const username = document.getElementById("username"); 17 const mail = document.getElementById("mail"); 18 mail.value = username.value; 19 } 20</script>

上記コードのうち、option要素をejsタグで作成すれば要望を満たせないでしょうか?

投稿2020/05/23 01:57

編集2020/05/25 11:15
snogot

総合スコア134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_tak

2020/05/25 03:39

回答ありがとうございます。 書き方が悪かったのですがHTMLとJavaScriptだけでハードコーディングはしており、それを1からejsで実装している形です。 もう少し、どのように自動生成できるか考えてみたいと思います。
snogot

2020/05/25 11:12

HTMLとJavaScriptはできているのですね。 それならもしかすると、ejsで実装しにくい書き方になっているのかもしれません。 私が作成した第一段階のサンプルを回答に追記しますので、 よろしければ参考にしてみてください。
t_tak

2020/05/25 12:51

追記ありがとうございます。 サンプルを参考にしてもう一度シンプルにHTML/CSSで作ってみた結果、無事にejsでも動かすことができました! ここまで親切に教えてくださったことに感謝しております、ありがとうございます!
snogot

2020/05/25 12:57

上手くいったのですね、安心しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問