【问题标题】:Trying to change a SQL Request depending on what the user has selected from a dropdown menu尝试根据用户从下拉菜单中选择的内容更改 SQL 请求
【发布时间】:2022-01-04 19:59:17
【问题描述】:

请原谅我的英语不是我的母语。我可以访问棒球数据库并创建了一个下拉列表,其中包含从 1985 年到 2013 年的年份。我现在希望能够在单击“lancer”按钮后显示所选年份中收入最高的球员。截至目前,当我点击按钮时,我可以显示数据。我想要球员的姓氏、名字、球队和薪水,按照这个顺序。这是我的 SQL 请求:

SELECT nameLast as Nom_de_famille, nameFirst as Prenom, teamID as Équipe, MAX(salary) as Salaire

FROM Master, Salaries

WHERE yearID=1985;

我的问题如下,我一直在到处搜索,但我似乎找不到根据用户从我的下拉菜单中选择的年份来更改 SQL 请求的 WHERE 子句的方法。如果有人能指出我正确的方向,这对我来说意味着整个世界。 SQL 请求是我的 .js 文件中的最后一行。

这是未点击按钮时页面的外观图片: Page without clicking the button

这是当我的 .js 文件中的 yearID 为 1985 时单击按钮时页面的外观图片(只是一个示例,我可以输入任何我想要的年份): Page when clicking the button 'lancer'

这是我的 HTML 代码:

    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script type="text/javascript" src="exercice1.js"></script>
        <title>Document</title>
    </head>
    <body>
        <div>   
            <form name="Form1">
                Choisissez une année:
                <select name="Année">
                    <option value="1985">1985</option>
                    <option value="1986">1986</option>
                    <option value="1987">1987</option>
                    <option value="1988">1988</option>
                    <option value="1989">1989</option>
                    <option value="1990">1990</option>
                    <option value="1991">1991</option>
                    <option value="1992">1992</option>
                    <option value="1993">1993</option>
                    <option value="1994">1994</option>
                    <option value="1995">1995</option>
                    <option value="1996">1996</option>
                    <option value="1997">1997</option>
                    <option value="1998">1998</option>
                    <option value="1999">1999</option>
                    <option value="2000">2000</option>
                    <option value="2001">2001</option>
                    <option value="2002">2002</option>
                    <option value="2003">2003</option>
                    <option value="2004">2004</option>
                    <option value="2005">2005</option>
                    <option value="2006">2006</option>
                    <option value="2007">2007</option>
                    <option value="2008">2008</option>
                    <option value="2009">2009</option>
                    <option value="2010">2010</option>
                    <option value="2011">2011</option>
                    <option value="2012">2012</option>
                    <option value="2013">2013</option>
                </select>
            </form>
        </div>
        <div>
            <button id="lancer">Lancer</button>
            <p id="texte"></p>
            <table id="table"></table>
        </div>
    </body>
    </html>

这是我的 Javascript 代码:

function genereTableau(donnees, id){
    var nb = donnees.length;
    if (nb>0){
        var htmltable="<tr>";
        for(var attr in donnees[0]){
             htmltable=htmltable+"<th>"+attr+"</th>";
        };
        htmltable=htmltable+"</tr>";
        for(var x=0;x<nb;x++){
            htmltable=htmltable+"<tr>";
            for(var a in donnees[x]){
                htmltable=htmltable+"<td>"+donnees[x][a]+"</td>";
            }
            htmltable=htmltable+"</tr>";
        }
        $("#"+id).html(htmltable);
    }else{
        alert("La réponse à la requête est vide.");
        $("#"+id).html("");
    }
};

function poste(requête){
    var postData = {};
    postData["db"] = "dift6800_baseball";
    postData["query"] = requête; 
    $.post(
        "http://www-ens.iro.umontreal.ca/~dift6800/baseball/db.php",
        postData,
        function(reponse,status){
             console.log(status);
             var obj = JSON.parse(reponse);
            if(obj.error==""){
                genereTableau(obj.data, "table");
            }else{
                alert("Erreur:"+obj.error);
            }
        
        }
    );
};

function requete() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            alert("status:" + this.status);
            $("#texte").text = this.responseText;
        };
    };
    xhttp.open("GET", "LoremIpsum.txt", true);
    xhttp.send();
}
$(document).ready(function(){
$("#lancer").click(function(event){

    poste("nameLast as Nom_de_famille, nameFirst as Prenom, teamID as Equipe, MAX(salary) as Salaire from Master, Salaries WHERE yearID=1985"); 
});
});

【问题讨论】:

    标签: javascript html sql drop-down-menu request


    【解决方案1】:

    首先,我建议从服务器端构建 SQL 查询。避免在 javascript 中执行此操作,因为任何人都可以向您的服务器和您的数据库发送任意请求。

    也就是说,您需要解析表单中包含的输入/选择的值。您可以使用FormData 对象来实现,如下所示

    function getSelectedYear(){
        // get reference to the form element
        const formElement = document.querySelector("form[name=Form1]");
        // create object to access data contained in your form
        const formData = new FormData(formElement);
        // extract value for field "Année"
        return formData.get("Année");
    }
    

    然后您只需将查询字符串中的硬编码年份替换为使用此函数检索的值。

    const year = getSelectedYear();
    poste(`nameLast as Nom_de_famille, nameFirst as Prenom, teamID as Equipe, MAX(salary) as Salaire from Master, Salaries WHERE yearID=${year}`);
    

    请注意,我在这里使用反引号 (`) 而不是引号 (")。这允许使用语法 ${variableName} 进行字符串模板化,这对于此类作业比连接字符串更方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多