【问题标题】:How to populate ejs form dropdown list options from MySQL database?如何从 MySQL 数据库填充 ejs 表单下拉列表选项?
【发布时间】:2021-01-05 00:28:26
【问题描述】:
            <div class="form-group">
                <label for="Station_Type">Station Type</label>
                <select name="Station_Type" class="form-control" name="Station_Type" id="Station_Type" autocomplete="off">
                
                    <option>Sewing</option>
                    <option>Cutting</option>
                    <option>Finishing</option>
                    <option>Distribution</option>
                    <option>Ironing</option>
                    <option>Offline</option>
                </select>
            </div>

我希望此下拉字段的选项值由存储在 MySQL 数据库中名为“stationoptions”的单独表中的值填充,该表将不断更新。现在,选项是硬编码的,如我上面的代码所示,但是,我希望下拉列表在 MySQL 中的“stationoptions”表中添加新值时自动更新。请问如何从 MySQL 查询数据到这个表单域?

这就是我将此表单中的数据插入到另一个单独的表中的方式。 (在我的 .js 文件中)

addPlayerPage: (req, res) => {
    res.render('add-player.ejs', {
        title: "Welcome | Add a new transaction",
        message: ''
    });
},

addPlayer: (req, res) => {
    
    let playerId = req.params.id;
    let LineNo = req.body.LineNo;
    let Station_Type = req.body.Station_Type;

   
    let query = "INSERT INTO `lineid` (id, LineNo, Station_Type) VALUES (NULL, '" + LineNo + "', '" + Station_Type + "')"; 


            db.query(query, (err, result) => {
                if (err) {
                    return res.status(500).send(err);
                }                
        
            });  
            res.redirect('/line'); 
}, 

【问题讨论】:

    标签: html mysql forms ejs


    【解决方案1】:

    试试这个:

    <div class="form-group">
       <label for="Station_Type">Station Type</label>
       <select id="Station_Type" name="Station_Type" class="form-control" placeholder="Station_Type" value="<%= playerLine.Station_Type %>" required>
    
    <!-- for loop code start -->
       <% for(var i=0; i < playerLine.length; i++) { %>
       <option value="<%= playerLine[i].Station_Type %>"><%= playerLine[i].Station_Type %></option>
       <% } %>
    <!-- for loop code end -->
    
    <!-- and maybe you can remove this part -->
    <option value="<%= playerLine.Station_Type %>"><%= playerLine.Station_Type %></option>
                        <option>Sewing</option>
                        <option>Cutting</option>
                        <option>Finishing</option>
                        <option>Distribution</option>
                        <option>Ironing</option>
                        <option>Offline</option>
    <!-- and maybe you can remove this part -->
    
         </select>
     </div>
    

    编辑

    在您的js 文件中:

    addPlayerPage: (req, res) => {
        // query the table you want show in your ejs
        let myQuery = "SELECT field_name FROM table_name;" // query for the dropdown
    
        db.query(myQuery , function(err, result) {
                if (err) {
                    return res.status(500).send(err); // check if query have error
                }
                res.render('add-player.ejs', {
                    title: "Welcome | Add a new transaction",
                    message: '',
                    drecord: result // setting result reference for ejs
                });
            })
    },
    
    addPlayer: (req, res) => {
        
        let playerId = req.params.id;
        let LineNo = req.body.LineNo;
        let Station_Type = req.body.Station_Type;
    
       
        let query = "INSERT INTO `lineid` (id, LineNo, Station_Type) VALUES (NULL, '" + LineNo + "', '" + Station_Type + "')"; 
    
    
                db.query(query, (err, result) => {
                    if (err) {
                        return res.status(500).send(err);
                    }                
            
                });  
                res.redirect('/line'); 
    }, 
    

    在你add-player.ejs:

    <div class="form-group">
       <label for="Station_Type">Station Type</label>
       <select id="Station_Type" name="Station_Type" class="form-control" placeholder="Station_Type" required>
    
    <!-- for loop code start -->
       <% for(var i=0; i < drecord.length; i++) { %>
       <option value="<%= drecord[i].field_name %>"><%= drecord[i].field_name %></option>
       <% } %>
    <!-- for loop code end -->
    
         </select>
     </div>
    

    【讨论】:

    • 但是如何从 MySQL 进行查询?
    • MySQL 中的查询就像SELECT field_name FROM table_name 一样直截了当。我有兴趣知道的是,您是否能够在 ejs 中显示来自任何 MySQL 查询结果的内容?如果没有,您可能必须在问题中包含更多信息,例如后端代码 (js)、路由信息和数据库连接代码,尤其是 multipleStatements: true 启用
    • 我应该在我的代码中的哪里插入 MySQL 查询语句?我在我的问题中包含了更多信息。我希望它有帮助!谢谢
    • 是的,它有效,谢谢!根据用户从同一表单中的另一个表单字段中选择的内容,下拉列表是否可以仅填充选定的几个值?例如,如果用户为 LineNo 字段选择“1”,则只有选项“cutting”和“sewing”将填充在 Station_Type 下拉列表中。如果用户为 LineNo 字段选择“2”,则 Station_Type 下拉列表中将仅填充选项“finishing”和“distribution”。谢谢!
    • 我至少能想到两种方法。一种是在后端有多个查询,但如果选择很多;假设范围为 1 到 20,您最终可能会编写 20 个查询或 1 个非常长的查询。第二种方法是保持后端不变,改为修改前端;在 ejs 中添加 javascript 以填充下拉列表。我在做这种方法方面没有任何丰富的经验,所以我只是给出一个理论上的想法。我猜想尝试并实现这一目标需要大量的测试。但是如果你的选择少于5个,你可以试试第一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多