簡體   English   中英

嘗試根據用戶從下拉菜單中選擇的內容更改 SQL 請求

[英]Trying to change a SQL Request depending on what the user has selected from a dropdown menu

請原諒我的英語,因為它不是我的母語。 我可以訪問棒球數據庫並創建了一個下拉列表,其中包含從 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 請求是 my.js 文件中的最后一行。

這是沒有單擊按鈕的頁面的圖片:沒有單擊按鈕的頁面

這是當 my.js 文件中的 yearID 為 1985 時單擊按鈕時頁面外觀的圖片(只是一個示例,我可以輸入任何我想要的年份):單擊按鈕 '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"); 
});
});

首先,我建議從服務器端構建 SQL 查詢。 避免在 javascript 中這樣做,因為任何人都可以向您的服務器發送任意請求,從而向您的數據庫發送任意請求。

也就是說,您需要解析表單中包含的輸入/選擇的值。 您可以使用FormData object 來完成,如下所示

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");
}

然后,您只需將查詢字符串中的硬編碼年份替換為使用此 function 檢索的值。

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}進行字符串模板化,這對於此類作業比連接字符串更方便。

暫無
暫無

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

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