2017-05-30 144 views
0

当我提交表单数据时,数据添加到mysql数据库中并且值显示为未定义
任何人都可以告诉我最新的问题,我很新的NodeJs发展。从NodeJS提交的数据在Mysql数据库中未定义

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')); 
+0

**从来没有**(盲目地)连接SQL查询字符串中的用户输入,否则你打开自己的SQL注入攻击。始终使用准备的语句。 – mscdex

+0

您需要将'res.redirect('/')'放在查询回调中,否则,在查询完成之前,它将在查询重定向之前重定向。对于未定义的问题,您可以在查询之前检查表单字段的值。然后,您可以检查生成的整个SQL语句,并直接在mysql提示符或phpmyadmin中查看它是否有效。 –

回答

0

我期待您从客户端获得有效数据。所以下面是插入数据的函数。 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 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测试SET?',{名称:req.body.mname,年龄:req.body。 mage},function(err,res){});