Передача переменной в строку запроса с использованием узла / js / MySQL верстак - PullRequest
0 голосов
/ 12 февраля 2020

Проблема: я получаю пустую вставку в мою базу данных при передаче переменных в оператор вставки. Переменные: firstName, lastName, email, passW.

Что я знаю: я знаю, что я получаю данные формы ввода пользователя обратно. И я утешаю переменные, в которых они хранятся, до оператора вставки, который работает и выводит данные формы на консоль. Когда форма отправляется на веб-страницу, она сохраняет «firstName», «LastName», «email», «passW», которые являются переменными. Но когда я передаю их в MySQL Workbench, они публикуются как нулевые. Мой вывод заключается в том, что переменные не передаются правильно, но когда я пробую предложения с этой и других страниц, он выдает синтаксическую ошибку, что синтаксис для SQL является неправильным. Я попытался добавить как можно больше информации, если вам нужно больше, что я не предоставляю, или я хочу опубликовать результаты теста, LMK.

Код


var express = require("express");
var http = require("http");
var mysql = require("mysql");
var express = require("express");
var path = require("path");

var app = express();
var PORT = 3001;

// Sets up the Express app to handle data parsing
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public'))); // testing
app.use(express.json());
app.use("/assets", express.static("assets"))


// home page route
app.get("/", function(req, res) {
    res.sendFile(path.join(__dirname, "index.html"));
  });
// create account route
app.get("/create", function(req, res) {
  res.sendFile(path.join(__dirname, "create.html"))
});
// login route
app.get("/login", function(req, res) {
  res.sendFile(path.join(__dirname, "login.html"))
});


// DB Connection
var connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "sportsCorner",
  port: 3306,
});
// connection response 
connection.connect(function (err) {
  console.log("SQL connected as id " + connection.threadId)
});  


// Takes the data from our login form
app.post('/handler', function (req, res) {


  // user input from the forms
  var firstName = req.body.firstName;
  var lastName = req.body.lastName;
  var email = req.body.email;
  var passW = req.body.password;

  // testing our responses stored in the variables 
  console.log("F: " + firstName, "L: " + lastName, "E: " + email, "P: " + passW)

  connection.query("INSERT INTO loginInfo VALUES(firstName, lastName, email, passW)", function (err, res) {
    if (err) throw err;
    console.log("Inserted ...")
  });

  // Getting login info from DB
  connection.query('SELECT * from loginInfo', function (err, res) {
    if (err) throw err;
    console.log(res)
    console.log("Response ...")
  })
});


// Start Server
app.listen(PORT, function() {
  console.log("Server listening on: http://localhost:" + PORT);
});
   </script>
<HTML> (FORM)
 <form method="POST" action="/handler">
   <input type="text" name="firstName" placeholder="First Name">
   <input type="text" name="lastName" placeholder="Last Name">
   <input type="email" name="email" placeholder="Email">
   <input type="password" name="password" placeholder="Password">
   <input type="submit" />
 </form>
</HTML>

Спасибо за Ваша помощь заранее

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Используйте это как запрос вставки

var sql = `INSERT INTO loginInfo 
            VALUES
            (
                ?, ?, ?, ?
            )`;
connection.query(sql, [firstName, lastName, email, passW], function (err, res) {
    if (err) throw err;
    console.log("Inserted ...")
  });
0 голосов
/ 12 февраля 2020

Здравствуйте, я отладил ваш код следующим образом

var express = require("express");
var http = require("http");
var mysql = require("mysql");
var express = require("express");
var path = require("path");

var app = express();
var PORT = 3001;

// Sets up the Express app to handle data parsing
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public'))); // testing
app.use(express.json());
app.use("/assets", express.static("assets"))


// home page route
app.get("/", function (req, res) {
    res.sendFile(path.join(__dirname, "index.html"));
});
// create account route
app.get("/create", function (req, res) {
    res.sendFile(path.join(__dirname, "create.html"))
});
// login route
app.get("/login", function (req, res) {
    res.sendFile(path.join(__dirname, "login.html"))
});


// DB Connection
let connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: "sportsCorner",
    port: 3306
});

// connection response 
connection.connect(function (err) {
    if (err) throw err;
    console.log("Connected to MySQL database!");
});

// Takes the data from our login form
app.post('/handler', function (req, res) {


    // user input from the forms
    var firstName = req.body.firstName;
    var lastName = req.body.lastName;
    var email = req.body.email;
    var passW = req.body.password;

    // testing our responses stored in the variables 
    console.log("F: " + firstName, "L: " + lastName, "E: " + email, "P: " + passW)

    let queryAddUser = `INSERT INTO loginInfo (firstName, lastName, email, passW) \
        VALUES (?, ?, ?, ?)`;

    // Protect your query from SQL attacks
    let preparedQuery = connection.format(queryAddUser, [firstName, lastName, email, passW]);

    // Execute the query
    connection.query(preparedQuery, function (error, result) {
        if (error) throw error;
        console.log('QUERY ADD NEW USER EXECUTED SUCCESSFULLY', result);
    });

    // Query count users
    let queryCountUsers = "SELECT count(*) as totalUsers FROM `loginInfo`";

    // Execute the query
    connection.query(queryCountUsers, function (error, result) {
        if (error) throw error;
        console.log('QUERY queryCountUsers EXECUTED SUCCESSFULLY', result);
    });
});


// Start Server
app.listen(PORT, function () {
    console.log("Server listening on: http://localhost:" + PORT);
});

Я добавляю оператор подготовки запроса connection.format () для защиты от SQL атак с использованием инъекций.

enter image description here

0 голосов
/ 12 февраля 2020

Попробуйте изменить это:

connection.query("INSERT INTO loginInfo VALUES(firstName, lastName, email, passW)", function (err, res) {
    if (err) throw err;
    console.log("Inserted ...")
  });

на это:

 connection.query(`INSERT INTO loginInfo VALUES('${firstName}', '${lastName}', '${email}', '${passW}')`, function (err, res) {
    if (err) throw err;
    console.log("Inserted ...")
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...