要在我的HTML表单上动态填充DropDown控件,我编写了代码,使AJAX调用.php文件。此.php文件使用单个列值填充DropDown控件。
在整个过程中,有三个文件发挥作用。
(1)包含报名表的HTML文件, (2)包含基本AJAX代码的.js文件,和 (3)一个.php文件,其中包含用于在我的HTML表单上填充DropDown控件的代码。
下面,我将分别提供所有三个文件的必要代码。 DropDown没有填充,因此,我想知道下面给出的代码中所需的必要更正。
请注意.js文件中的MakeRequest函数接受少量参数。这些论点是:
(1)HTML DropDown控件名称, (2)整个Sql查询。 (3)MySQL表中的ID列。 (4)实际列,其值需要在DropDown控件中填充。
在这种情况下,例如,我正在引用一个名为“ElectionCategoryMaster”的MySQL表,它包含以下列:
(1)ecID Int P.K (2)ecName varchar
我将ID列作为参数传递,以便在用户从DropDown中选择ecName时可以检索此ID值。这个ecID将存储在另一个表中。
[代码:HTML文件]
<td onactivate="javascript: MakeRequest('inCategory','SELECT * FROM electioncategorymaster', 'ecid', 'ecname');">
<select id="inCategory" name="inCategory" class="entryFormInputBoxColor">
</select>
</td>
[代码:.js文件] [AJAX]
function MakeRequest(DropDownName, SqlQuery, IdColumnName, DisplayColumnName)
{
var xmlHttp = getXMLHttp();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
HandleResponse(xmlHttp.responseText);
}
}
xmlHttp.open("GET", "filldropdown.php?DropDownControlName = " + DropDownName + "&SqlQuery = " + SqlQuery + "&IdColumnName = " + IdColumnName + "&DisplayColumnName = " + DisplayColumnName, true);
xmlHttp.send(null);
}
function HandleResponse(response)
{
document.getElementById('ResponseDiv').innerHTML = response;
}
[代码:.php文件] [填充所需的DropDown控件]
<?php
//Get values
$dropdownControlName = $_GET['DropDownControlName'];
$sqlQuery = $_GET['SqlQuery'];
$idColumnName = $_GET['IdColumnName'];
$displayColumnName = $_GET['DisplayColumnName'];
echo "dfddddf";
dbconnection::OpenConnection();
$result = dbaccess::GetRows($sqlQuery);
// JavaScript code to populate the DropDown.
echo "<select name='". $dropdownControlName ."'>";
echo "<option>Select</option>";
while($row=mysql_fetch_array($result))
{
echo "<option value=<?=". $row[$idColumnName] ."?>><?=". $row[$displayColumnName] ."?></option>";
}
echo "</select>";
dbconnection::CloseConnection();
?>
答案 0 :(得分:1)
我相信 javascript 是问题的根源。让我解释:
函数HandleResponse()
始终填充相同的ID。 DropDownName
函数中的变量MakeRequest()
不会传递到HandlResponse()
函数的任何位置。尝试添加此参数,它应该更好。
除此之外,直接在javascript中使用MySQL查询是一个大安全问题 1)你告诉人们数据库的内部结构 2)人们可以修改此请求以检索他们想要的任何内容!从你的数据库!
从不直接用户输入(是的,GET参数可以是用户输入:它是一个简单的GET变量,每个人都可以访问它)。
答案 1 :(得分:0)
我曾经使用javascript生成查询字符串,但是能够省去许多重要的细节,例如表名和WHERE条件。我还确保在其上使用mysql_real_escape_string,在前端和后端服务器端添加字符串以生成完整的查询字符串。它比试图发布数组容易得多。我觉得这是一个安全而容易的选择。