Передача существующих данных после нажатия кнопки редактирования для ejs из узла - PullRequest
0 голосов
/ 17 марта 2019
connection.query('update customers set ? where id ='+ req.params.id, user, function(err, result) {
    if(err) {
      req.flash('error', err);

      //Since there is an error need to render back the edit page
      res.render('/customers/edit', {
         title: 'Edit Customer',
         id: req.params.id,
         name: 'select Name from customers where id='+req.params.id,
         email: 'select Email from customers where id='+req.params.id
      })
    } else {
         req.flash('success', 'Data updated successfully!');
         res.redirect('/customers');
    }
 })

edit.ejs:

<body>
<%= console.log(id) %>
<form action="/customers/update/<%= id %>" method="post" name="form1">
<div class="form-group">
  <label for="exampleInputPassword1">Name</label>
  <input type="text" class="form-control" name="name" id="name" value="<%= name %>" placeholder="Name">
</div>
<div class="form-group">
  <label for="exampleInputEmail1">Email address</label>
  <input type="email" class="form-control" name="email" id="email" aria-describedby="emailHelp" placeholder="Enter email" value="<%= email %>">
</div>

<button type="submit" class="btn btn-info">Update</button>
</form>
</body>

Я новичок в NodeJS, я пытаюсь получить имя и адрес электронной почты в качестве значений по умолчанию из существующих значений имени и адреса электронной почты после нажатия кнопки редактирования. Если я console.log (id), он регистрирует идентификатор в консоли, однако имя и адрес электронной почты не определены, если я их регистрирую, я не уверен, как передать их в res.render, чтобы иметь возможность доступа к нему в шаблоне. Пожалуйста, предложите.

1 Ответ

0 голосов
/ 18 марта 2019

Во-первых, ваш код уязвим для sql внедрения . Я могу передать запрос, например «1 UNION DROP TABLE user», по пути «/ customer / update /» и в основном делать все, что захочу, с вашей БД.

Вам нужно собрать запрос следующим образом:

var sql = 'UPDATE customers SET someColumn = ?, someOtherColumn = ? WHERE id = ?';

Затем выполните запрос следующим образом:

var params = ['someValue', 'someOtherValue', 1];
connection.query(sql, params, function(err, result) {
if (err) { //do something

}
});

Теперь в вашем res.render вы пытаетесь передать 'select Name from customers where id='+req.params.id, который установит значение name равным запросу, а не результат запроса.

Если вы хотите передать результат запроса в шаблон, вам нужно будет выполнить дополнительный connection.query. Это будет выглядеть примерно так:

var params = ['someValue', 'someOtherValue', 1];
connection.query(sql, params, function(err, result) {
if (err) { //do something
    connection.query('SELECT name, email FROM user WHERE id = ?', [req.params.id], function(err, result) {
      if (err) { //do something
          res.render('/customers/edit', {
            title: 'Edit Customer',
            id: req.params.id,
            name: result[0],
            email: result[1]
          });
      }
    });
}
});
...