最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

输入值未存储在数据库中

IT培训 admin 4浏览 0评论

输入值未存储在数据库中

我正在尝试将表单上已填写的数据存储到数据库中,但不存储。此代码的目标是使用html文件创建数据,一旦输入了数据,则将其保存在服务器上并从服务器端显示在表上。我目前只能显示要显示的列名,但没有输入数据-

var express = require('express');
var bodyParser = require("body-parser");
var sqlite3 = require("sqlite3").verbose();
var db = new sqlite3.Database('myDBnaima3');

var app = express();

app.use(express.static('public_html'));

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

app.post('/Contact', function (request, response, next) {
 let name = request.body.Name;
 let email = request.body.Email;
 let message = request.body.Message;

 //db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER UNIQUE PRIMARY KEY NOT NULL, name TEXT NOT NULL, email TEXT NOT NULL);');
 var statement = db.run(`INSERT INTO users (name, email, message) VALUES    ("${name}","${email}","${message}");`);
 console.log("Information Entered Succesfully!");
 res.status(200).redirect('/'); 
});

app.get('/Contact', function (request, response, next) {
  db.all('SELECT * FROM users;', function (error, rows) {
     response.write(`<table border=1>`);
     response.write("<tr>");
     response.write(`<th>ID</th>`);
     response.write(`<th>Name</th>`);
     response.write(`<th>Message</th>`);
     response.write("</tr>");

     rows.forEach(row => {
         response.write("<tr>");
         response.write(`<td>${row["name"]}</td>`);
         response.write(`<td>${row["email"]}</td>`);
         response.write(`<td>${row["message"]}</td>`);
         response.write("</tr>");
     });
     response.write("</table>");
   });
 }); 

 app.listen(3000, function () {
   console.log("Web server running at: http://localhost:3000 NAIMA IS HERE AGAIN!!!!");
   console.log("Type Ctrl+C to shut down the web server");
  });
回答如下:

您不检查insert是否成功。可能会失败。您可以检查将在语句完成或出现错误时运行的回调。

将值直接粘贴到SQL中会使代码容易受到SQL Injection,一个非常常见的安全性问题以及其他语法错误的攻击。例如,如果您的消息包含",它将破坏insert

您应该改用占位符。

将它们放在一起,就像这样。

db.run(
  "INSERT INTO users (name, email, message) VALUES ($name,$email,$message)",
  { $name: name, $email: email, $message: message },
  (error) => {
    if( error ) {
      console.log(`Insert failed: ${error}`);
      res.status(500);
    }
    else {
      console.log("Information Entered Succesfully!");
      res.status(200).redirect('/'); 
    }
  }
);

可以使用db.each简化您的代码。

db.each

这更简单,更有效。如果您有很多用户,app.get('/Contact', function(request, response, next) { response.write(`<table border=1>`); response.write("<tr>"); response.write(`<th>ID</th>`); response.write(`<th>Name</th>`); response.write(`<th>Message</th>`); response.write("</tr>"); db.each('SELECT * FROM users;', function(error, row) { response.write("<tr>"); response.write(`<td>${row["name"]}</td>`); response.write(`<td>${row["email"]}</td>`); response.write(`<td>${row["message"]}</td>`); response.write("</tr>"); }); response.write("</table>"); }); 将立即将所有行存入内存中。 db.all将一次获取一个。

输入值未存储在数据库中

我正在尝试将表单上已填写的数据存储到数据库中,但不存储。此代码的目标是使用html文件创建数据,一旦输入了数据,则将其保存在服务器上并从服务器端显示在表上。我目前只能显示要显示的列名,但没有输入数据-

var express = require('express');
var bodyParser = require("body-parser");
var sqlite3 = require("sqlite3").verbose();
var db = new sqlite3.Database('myDBnaima3');

var app = express();

app.use(express.static('public_html'));

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

app.post('/Contact', function (request, response, next) {
 let name = request.body.Name;
 let email = request.body.Email;
 let message = request.body.Message;

 //db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER UNIQUE PRIMARY KEY NOT NULL, name TEXT NOT NULL, email TEXT NOT NULL);');
 var statement = db.run(`INSERT INTO users (name, email, message) VALUES    ("${name}","${email}","${message}");`);
 console.log("Information Entered Succesfully!");
 res.status(200).redirect('/'); 
});

app.get('/Contact', function (request, response, next) {
  db.all('SELECT * FROM users;', function (error, rows) {
     response.write(`<table border=1>`);
     response.write("<tr>");
     response.write(`<th>ID</th>`);
     response.write(`<th>Name</th>`);
     response.write(`<th>Message</th>`);
     response.write("</tr>");

     rows.forEach(row => {
         response.write("<tr>");
         response.write(`<td>${row["name"]}</td>`);
         response.write(`<td>${row["email"]}</td>`);
         response.write(`<td>${row["message"]}</td>`);
         response.write("</tr>");
     });
     response.write("</table>");
   });
 }); 

 app.listen(3000, function () {
   console.log("Web server running at: http://localhost:3000 NAIMA IS HERE AGAIN!!!!");
   console.log("Type Ctrl+C to shut down the web server");
  });
回答如下:

您不检查insert是否成功。可能会失败。您可以检查将在语句完成或出现错误时运行的回调。

将值直接粘贴到SQL中会使代码容易受到SQL Injection,一个非常常见的安全性问题以及其他语法错误的攻击。例如,如果您的消息包含",它将破坏insert

您应该改用占位符。

将它们放在一起,就像这样。

db.run(
  "INSERT INTO users (name, email, message) VALUES ($name,$email,$message)",
  { $name: name, $email: email, $message: message },
  (error) => {
    if( error ) {
      console.log(`Insert failed: ${error}`);
      res.status(500);
    }
    else {
      console.log("Information Entered Succesfully!");
      res.status(200).redirect('/'); 
    }
  }
);

可以使用db.each简化您的代码。

db.each

这更简单,更有效。如果您有很多用户,app.get('/Contact', function(request, response, next) { response.write(`<table border=1>`); response.write("<tr>"); response.write(`<th>ID</th>`); response.write(`<th>Name</th>`); response.write(`<th>Message</th>`); response.write("</tr>"); db.each('SELECT * FROM users;', function(error, row) { response.write("<tr>"); response.write(`<td>${row["name"]}</td>`); response.write(`<td>${row["email"]}</td>`); response.write(`<td>${row["message"]}</td>`); response.write("</tr>"); }); response.write("</table>"); }); 将立即将所有行存入内存中。 db.all将一次获取一个。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论