簡體   English   中英

如何使用EJS將Node.js中的下拉值發布到MySQL數據庫?

[英]How to post dropdown value in Node.js to MySQL database with EJS?

在我的Node.js項目中,我有一個發布功能,可以將數據寫入MySQL數據庫。 我想在添加頁面上添加一些值作為下拉菜單。 目前,我只能將帶有文本字段的所有數據寫入MySQL數據庫。

我已經創建了下拉列表,但是使用這些下拉列表我只能顯示相應表中的數據,但是無論我嘗試了什么,都不會應用post函數中的選定值。

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函數中。

您必須在select添加name屬性。 例如:

<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屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM