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

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

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

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

Node.js

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

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

JavaScript

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

Q&A

解決済

1回答

813閲覧

inputタグのmethod="post"を利用して一覧表示させたいのに、表示ができない。

ppos

総合スコア3

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

Node.js

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

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

JavaScript

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

0グッド

0クリップ

投稿2021/04/20 09:06

編集2021/04/20 09:58

前提・実現したいこと

プログラミング初心者です。
Node.jsを学び、ローカル環境で簡単なwebサービスを作ろうとしています。

ざっくりお伝えすると、
ページAのフォームに入力した情報を、ページBで一覧表示していきたいです。

困っている事

現状、SQLのデータベース内に入れているデータは表示ができるのですが、ページBで入力した情報が表示されません。
おそらくSQLデータベースに正しくINSERTできていないのかもしれません。
追記:MySQLのデータベースをコマンドプロンプトで直接確認したところ、新しくデータの追加がされていないようです。

はじめてのプロダクト開発です。
事情により家で1人で作っており相談する先生などいないため、どなたか回答いただけますと幸いです。

該当のソースコード

ページA(フォーム用のページ)が/new-costで、ページB(一覧用のページ)が/cost-listです。

**
「app.js」ファイルです。3段落目に、SQLデータベースへのINSERTを記載しているつもりです。

app.js

1app.get('/cost-list', (req, res) => { 2 connection.query( 3 'SELECT * FROM cost_info', 4 (error, results) => { 5 if (error) console.error(error); 6 console.log(results); 7 res.render('cost-list.ejs',{cost_info: results}); 8 } 9 ); 10}); 11 12app.get('/new-cost', (req, res) => { 13 res.render('new-cost.ejs'); 14}); 15 16 17app.post('/create', (req, res) => { 18 connection.query( 19 'INSERT INTO cost-info(amount_money) VALUES (?)', 20 [req.body.amountMoney], 21 (error, results) => { 22 if (error) console.error(error); 23 res.redirect('/cost-list'); 24 } 25 ); 26}); 27

ページA「new-cost.ejs」です。inputタグにnameもありますし、formタグにactionもmethodも記載しています。

new

1 <form action="/create" method="post"> 2 <input name="amountMoney" type="number"> 3 <input type="submit" value="作成"> 4 </form> 5

ページB「cost-list.ejs」です。SQLデータベースのテーブル名が「cost_info」なのですが、forEachを使って表示させようとしています。

cost

1 <ul class="table-body"> 2 <% cost_info.forEach((cost) => { %> 3 <li> 4 <div class="cost-data"> 5 <span class="date-column"><%= cost.id %></span> 6 <span class="expense-items-column"><%= cost.expense_items %></span> 7 <span class="amount-column"><%= cost.amount_money %></span> 8 </div> 9 </li> 10 <% }); %> 11 </ul> 12

補足情報

足りない情報があれば教えてください。

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

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

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

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

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

m.ts10806

2021/04/20 09:32

INSERTできているかどうかは直接データを確認すれば良いのでは?
ppos

2021/04/20 09:46

ありがとうございます。 すみません、であれば「INSERTができていない」と断言できそうです。 コマンドプロンプトを使って該当するSQLテーブルの一覧を見たのですが、新しいデータ(=新しいidのついた行)はありませんでした。
m.ts10806

2021/04/20 09:48

はい。その確認結果を質問本文に追記してください。 質問は編集できます。
ppos

2021/04/20 09:58

修正しました。ありがとうございます。
guest

回答1

0

ベストアンサー

SQLのSELECT文で利用しているテーブルは
SELECT * FROM cost_infoなのでcost_infoですね。

INSERT文の方はINSERT INTO cost-list(amount_money) VALUES (?)
なのでcost-listですね。

テーブル名が一致してないように見えます。


何故こんなケアレスミスが見抜けないか!
それはエラーを握りつぶしているからです。

SQLと省略されているため何を使っているかわかりませんが
例えばMySQL関係のモジュールであれば、
第一引数errorは正常終了される限りnull値になるはずで、
null値以外であれば重篤なエラーが発生している可能性が高いです。

このerror引数を何も確認せずスルーする行為は
現場では「エラーの握りつぶし」等と呼び、ダメな奴(バッドプラクティス)です。

厳密に言えばerrornull値でなければ
POSTに失敗しましたみたいなエラーメッセージを投げ返すような挙動をすべきなのですが、
とりま下記のように修正してコンソールで見張る癖を付けましょう。

js

1app.get('/cost-list', (req, res) => { 2 connection.query( 3 'SELECT * FROM cost_info', 4 (error, results) => { 5 if (error) console.error(error); 6 console.log(results); 7 res.render('cost-list.ejs',{cost_info: results}); 8 } 9 ); 10}); 11 12app.get('/new-cost', (req, res) => { 13 res.render('new-cost.ejs'); 14}); 15 16 17app.post('/create', (req, res) => { 18 connection.query( 19 'INSERT INTO cost-list(amount_money) VALUES (?)', 20 [req.body.amountMoney], 21 (error, results) => { 22 if (error) console.error(error); 23 res.redirect('/cost-list'); 24 } 25 ); 26});

投稿2021/04/20 09:45

miyabi-sun

総合スコア21203

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

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

miyabi-sun

2021/04/20 09:59

> はじめてのプロダクト開発です。 > 事情により家で1人で作っており相談する先生などいないため でしょうねって感じです。 駆け出しのプログラマなら8割がエラーを握りつぶして先輩に 「エラーを握りつぶすんじゃねえ」と叱られる奴なので別に気にしないでください。 因みに残りの2割はエラーを気にしすぎてメインロジックがtry-catchだらけでぐしゃぐしゃにしてしまい、何をやってる処理なのか読んでも分からんようにする石橋を叩き壊すタイプです。 何処を見張らなければならないか、どういう時にエラーが出やすいかという勘所は結構大変なので、 長い時間をかけて理解していきましょう。
ppos

2021/04/20 10:03

丁寧に教えて下さりありがとうございます....!!! テーブル名の修正、if文の追加をさせていただきました。 エラーの握りつぶし、とても勉強になりました。 無事、上記でエラー確認ができましたし、テーブル名の修正にてやりたいことができるようになりました。 本当に勉強になりました。ありがとうございます。ダメな奴にならないようもっと精進していきます。
ppos

2021/04/20 10:05

>因みに残りの2割はエラーを気にしすぎてメインロジックがtry-catchだらけでぐしゃぐしゃにしてしまい、何をやってる処理なのか読んでも分からんようにする石橋を叩き壊すタイプです。 >何処を見張らなければならないか、どういう時にエラーが出やすいかという勘所は結構大変なので、 長い時間をかけて理解していきましょう。 なるほど...。見ず知らずの私なんかに丁寧に教えて頂き、本当にありがとうございます...!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問