2017-05-30 146 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){});