![](/img/trans.png)
[英]Dynamic Dropdown menu - change button URL depending on option selected with JavaScript
[英]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.