【问题标题】:Submitted data from NodeJS are undefined in Mysql Database从 NodeJS 提交的数据在 Mysql 数据库中未定义
【发布时间】:2018-09-02 21:44:51
【问题描述】:

当我提交表单数据时,数据添加到mysql数据库中,值显示为未定义
谁能告诉我问题出在哪里,我对 NodeJs 开发非常陌生。

HTML 文档

<html>

    <form method="post" action="/add">

    Name : <input   name="mname" type ="text" > <p>
    Age :  <input name="mage"   type ="text" > <p>
    Department : <input name="mdepartment"   type="text" > <p>
    City : <input   name="mcity" type = "text"> <p>

    <input type="submit" value ="submit">
    <input type="reset" value="reset"> 
    </form>
</center>

和我的Javascript文件如下

myapp.js

 var express = require('express');
var path = require('path');
var mysql = require('mysql');
var app = express();
var bodyparser = require('body-parser');

var connection = mysql.createConnection({
    host : 'localhost',
    user : 'root',
    password : '1234'
});

connection.query('USE samplenodejs');

app.set('port',3000);


app.use(bodyparser.urlencoded({extended : false}));

app.get('/', function(req, res) {
    console.log('GET /');
    res.sendFile(__dirname + '/AddDetails.html');
});


app.post('/add',function(req,res){

connection.query("INSERT INTO test VALUES('','"+req.body.mname+"','"+req.body.mage+"','"+req.body.mcity+"','"+req.body.mdepartment+"')",function(err,res){
    if(err) throw err;
});
res.redirect('/');

});


app.listen(app.get('port'));
console.log('Express server listening on port '+app.get('port'));

【问题讨论】:

  • 从不(盲目地)在您的 SQL 查询字符串中连接用户输入,否则您将面临 SQL 注入攻击。始终使用准备好的语句。
  • 您需要将res.redirect('/')放入查询回调中,否则在查询完成之前它会在查询重定向之前重定向。对于undefined 问题,您可以在查询之前检查表单字段的值。然后,您可以检查生成的整个 SQL 语句,并直接在 mysql 提示符或 phpmyadmin 中尝试它是否有效。

标签: html mysql node.js


【解决方案1】:

我期待您从客户端获取有效数据。所以下面是插入数据的函数。 Mysql 字符串常量应该用" 引号括起来。

app.post('/add',function(req,res){
    //Check this log in console, it should print all the values properly, if not issue is at clinet side
    console.log('Input:: name='+req.body.mname+' age='+ req.body.mage +' city='+ req.body.mcity + ' dep=' + req.body.mdepartment,   req.body);

    var Query = `INSERT INTO test (id, name, age, city, department) VALUES ("", "${req.body.mname}","${req.body.mage}","${req.body.mcity}","${req.body.mdepartment}" )`;

    //printing query in the console, if you still face the issue, you can execute this query manually.
    console.log("Query :" + Query );

    connection.query(Query, function(err,res){
        if(err) {
          console.error('Error in sql query:' + Query + ' Err', err);
          throw err;
        }
    });
    res.redirect('/');
});

您不应该将用户输入直接传递给 SQL 查询,始终需要进行输入验证。

在 NodeJs 中,最好使用 JSON 键值对进行插入,如下所示
connection.query('INSERT INTO test SET ?', {name:req.body.mname, age:req.body.mage}, function(err, res) {});

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 2015-01-27
    • 2019-06-18
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多