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

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

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

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

Node.js

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

927閲覧

Node.JS上でMySQLへ値を追加する方法がわからない

Azel_T3T

総合スコア117

MySQL

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

Node.js

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/12/22 00:12

編集2021/12/22 02:55

初めまして。
SQL,Node.js,HTML.CSSの学習を始めてから5日の初心者です。
作成したフォーラムの内容をデータベースに追加したいのですが、どうにもうまく動かなく困っております。
データベースの内容を参照することはできるので接続はされています。
どなたか解決策をご存じの方いらっしゃいましたらご教授いただけると幸いです。

mysql Ver 14.14 Distrib 5.7.36, for Win64 (x86_64)

HTML.CSS

1<form action="/new" method="post"> 2 <ul class="table-body"> 3 <li> 4 <span class="id-column">名前</span> 5 <input class="text2" type="text" size="55" name="name"> 6 </li> 7 <li> 8 <span class="id-column">性別</span> 9 <input class="text2" type="text" size="55" name="gender"> 10 </li> 11 <li> 12 <span class="id-column">住所</span> 13 <input class="text2" type="text" size="55" name="address"> 14 </li> 15 <li> 16 <span class="id-column">番号名</span> 17 <input class="text2" type="text" size="55" name="address2"> 18 </li> 19 <li> 20 <span class="id-column">年齢</span> 21 <input class="text2" type="text" size="55" name="old"> 22 </li> 23 </ul> 24 </form>

Node.js,SQL

1app.post('/new', (req, res)=>{ 2 var name_db = req.body.name 3 var gender_db = req.body.gender 4/*変数はテストなのでとりあえず二つだけです*/ 5 console.log(req.body.name) 6 connection.query( 7 'INSERT INTO users (name, gender) VALUES ("' + name_db + '", ' + '"' + gender_db + '")', 8 (error, results)=>{ 9 res.redirect('/') 10 console.log(error) 11 }) 12})

補足

フォーラムの内容ではなく直接文字列を追加する方法も試してみたのですが、こちらもうまく動きませんでした。

Node.js,SQL

1 2app.post('/new', (req, res) => { 3 connection.query( 4 'INSERT INTO users (name) VALUES ("あ")', 5 (error,results)=>{ 6 console.log(results); 7 res.render('hello-test.ejs'); 8 } 9 ); 10});

補足2

以下にapp.js全文(途中省略)記載しておきます。

app.js

1const express = require('express'); 2const mysql = require('mysql'); 3const app = express(); 4 5app.use(express.urlencoded({extended: false})); 6 7app.use(express.static('public')); 8 9const connection = mysql.createConnection({ 10 host: 'localhost', 11 user: 'root', 12 password: '*********', 13 database: 'forums' 14}); 15 16connection.connect((err) => { 17 if (err) { 18 console.log('error connecting: ' + err.stack); 19 return; 20 } 21 console.log('success'); 22}); 23 24~省略~ 25/*文字列をテーブルへ追加(使うとき以外コメントアウトしています)*/ 26app.post('/new', (req, res) => { 27 connection.query( 28 "INSERT INTO users (name) VALUES ('あ')", 29 (error,results)=>{ 30 console.log(results); 31 res.render('hello-test.ejs'); 32 } 33 ); 34}); 35 36/*フォーラムで得た情報をテーブルへ追加(使うとき以外コメントアウトしています)*/ 37app.post('/new', (req, res)=>{ 38 var name_db = req.body.name 39 var gender_db = req.body.gender 40 console.log(req.body.name) 41 connection.query( 42 'INSERT INTO users (name, gender) VALUES ("' + name_db + '", ' + '"' + gender_db + '")', 43 (error, results)=>{ 44 res.redirect('/') 45 console.log(error) 46 }) 47}) 48 49/*コンソールへテーブルの中身を出力(使うとき以外コメントアウトしています)*/ 50app.get('/new', (req, res) => { 51 connection.query( 52 'SELECT * FROM users', 53 (error, results) => { 54 console.log(results); 55 res.render('hello-test.ejs'); 56 } 57 ); 58}); 59 60app.listen(3000);

ファイル状況

test-forum-----node_module---省略 public-----css-----style.css image views------top.ejs forum.ejs hello-test.ejs app.js package.json package-json.lock

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/22 01:36 編集

データベースは何を使っていますか、MySQLですか? データベースへの接続に関する箇所のコードも質問文中に掲載してください。動的要素のないSQL文の実行も確認できないのであれば、Node.js以外の手段では接続できて実行できるのでしょうか、例えばMySQLならmysqlコマンドラインクライアント上やphpMyAdminなどで接続して実行できるでしょうか。そもそも接続先データベースは作成済みだとして、テーブルはどうやって作成しましたか? 実行環境についても詳しく質問文中に書いてください。Windows11/10だったりmacだったり、そういう基本的なところから確認することも大事です。
Azel_T3T

2021/12/22 02:42 編集

返信ありがとうございます。 データベースはMySQLを使用しています。 OSはWin10を使用しております。 pwだけ隠してSQL関連の部分のみ補足としてコードを記載しておきます。 ファイル状況なども補足に記しておきます。 接続についてはテーブルの中身のコンソールへの出力をためして出来ているところから問題ないと思われます。 またmysqlコマンドラインクライアント上での実行、テーブルへの値の追加は可能でした。
guest

回答2

0

自己解決

以下のコードに書き換えることで解決しました。

app.js

1app.post('/new', (req, res) => { 2 const username = req.body.name; 3 const gender = req.body.gender; 4 const address = req.body.address; 5 const address2 = req.body.address2; 6 const age = req.body.age; 7 const lineid = req.body.lineid; 8 console.log(username, gender, address, address2, age, lineid); 9 connection.query( 10 'INSERT INTO users (name, gender, address, address2, old, lineid) VALUES (?, ?, ?, ?, ?, ?)', 11 [username, gender, address, address2, age, lineid], 12 (error, results) => { 13 console.log(results) 14 res.redirect('/top'); 15 } 16 ); 17})

HTML.CSS

1 <form action="new" method="post"> 2 <p>名前</p> 3 <input type="text" name="name" value="山田太郎"> 4 <p>性別</p> 5 <input type="text" name="gender" value="男"> 6 <p>住所</p> 7 <input type="text" name="address" value="○○県○○市○○1-1-1"> 8 <p>番号名</p> 9 <input type="text" name="address2" value="ヤマダビルディング101号室"> 10 <p>年齢</p> 11 <input type="text" name="age" value="18"> 12 <p>LINE ID</p> 13 <input type="text" value="@" name="lineid"> 14 <input href="/new" type="submit" value="送信する"> 15 <!--<a href="/list">一覧にもどる</a>--> 16 </form>

投稿2021/12/23 06:28

編集2021/12/23 06:31
Azel_T3T

総合スコア117

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

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

0

SQL Serverなら文字列はシングルクォーテーションじゃないとダメな気がする

javascript

1'INSERT INTO users (name) VALUES ("あ")'

javascript

1"INSERT INTO users (name) VALUES ('あ')"

投稿2021/12/22 01:52

sousuke

総合スコア3828

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

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

Azel_T3T

2021/12/22 02:46

返信ありがとうございます。 試してみましたが動きませんでした...。
sousuke

2021/12/22 02:53 編集

データベースはMySQL?ならタグ直したほうがいいです。 postの中までプログラムが動いていることはconsole.logとかで確認できますか? console.log(error)の内容などはないのでしょうか? 念のためお聞きしますがapp.jsは修正するたびに再起動していますか?
Azel_T3T

2021/12/22 03:00 編集

そうですね???? すいません直しておきました。
Azel_T3T

2021/12/22 03:03 編集

app.postの直下に今console.log('new');を入れて試してみましたが、consoleには出力されなかったです。 なぜpostの中までプログラムが動いていないんでしょうか.... app.jsは再起動しています。
sousuke

2021/12/23 00:10

form内のデータはどのようにsubmitしているんですか?ボタンは見当たりませんが
Azel_T3T

2021/12/23 06:36

返信ありがとうございます。 恐らくそれも原因の一部だったと思います。 大幅にコードを書き換えることで解決したので自己解決とさせていただきます。 問題解決へのご協力ありがとうございました。
sousuke

2021/12/23 07:00

そもそもpostの送信自体をしてなかったんですね。SQLの書き方や実行方法の問題以前だったと思うので、詰まったときはプログラム動作を一つずつ確認することをお勧めします。
Azel_T3T

2021/12/23 08:13

そうですね...。 自分にとっても色々反省が残る内容でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問