Как опубликовать выпадающее значение в Node.js в базе данных MySQL с EJS? - PullRequest
0 голосов
/ 22 мая 2019

в моем проекте Node.js у меня есть функция post, с помощью которой я записываю данные в свою базу данных MySQL.Я хотел бы иметь некоторые значения в качестве раскрывающегося на моей странице добавления.На данный момент я могу только записать все данные с текстовыми полями в базу данных MySQL.

Я уже создал выпадающие списки, но с их помощью я могу отображать только данные из соответствующих таблиц, но выбранное значение в записиФункция не будет применена, независимо от того, что я пробовал.

Функция GET и POST:

app.get('/add', function(req, res, next) {
    connection.query("SELECT DISTINCT platform_platform FROM platform; SELECT DISTINCT art_art FROM art;", [1, 2], function (error, result, fields) {
        if(error) {
            req.flash('error', error)
            res.render('games/add', {
                data: ''
            })
        } else {

    res.render('games/g-add', {
        data: result[0],
        data1: result[1],
        g_name: '',
        g_status: ''
    })
}
    });
})

app.post('/add', function(req, res, next) {
    req.assert('g_name').notEmpty()
    req.assert('g_status').notEmpty()

    var errors = req.validationErrors()

    if( !errors ) {

        var game = {
            g_name: req.sanitize('g_name').escape().trim(),
            g_status: req.sanitize('g_status').escape().trim()
        }

        connection.query('INSERT INTO games SET ?', game, function(err, result) {
            console.log(err);
            console.log(result.length);
            if(err) {
                req.flash('error', err)

                res.render('games/g-add', {
                    g_name: game.g_name,
                    g_status: game.g_status
                })
            } else {
                res.render('games/g-add',  {
                    g_name: '',
                    g_status: ''
                })
            }
        })
    } 
    else {
        var error_msg = ''
        errors.forEach(function(error) {
            error_msg += error_msg + '<br>'
        })
        req.flash('error', error_msg)

        res.render('games/g-add', {
            g_name: req.body.g_name,
            g_status: req.body.g_status
        })
    }
})

EJS:

<form action="/games/add" method="post">

....

<div class="form-group">
    <h4>Platform</h4>
    <select class="custom-select">
    <% for (var i = 0; i < data.length; i++) { %>
        <option>
           <%= data[i].platform_platform %>
        </option>
        <% } %>
    </select>
</div>

....

<div class="form-group">
   <label class="col-form-label" for="inputDefault">Name:</label>
   <input type="text" class="form-control" id="inputDefault" value="<%= g_name %>">
</div>

 ....

<input type="submit" value="POST" class="btn btn-danger">
</form>

Я просто знаю два выпадающихне включены в функцию POST, но я не знаю, как получить выбранные данные в функцию POST.

1 Ответ

2 голосов
/ 22 мая 2019

Вы должны добавить атрибут name в свой select. Например:

<div class="form-group">
    <h4>Platform</h4>
    <select name="platform" class="custom-select">
    <% for (var i = 0; i < data.length; i++) { %>
        <option>
           <%= data[i].platform_platform %>
        </option>
        <% } %>
    </select>
</div>

Теперь в вашей функции записи вы можете получить доступ к выбранной опции из объекта запроса.

app.post('/add', function(req, res, next) {
    ....
    var platform = req.body.platform;
    ....
})

Вы должны сделать то же самое при вводе имени, поскольку в нем также отсутствует атрибут name.

...