我使用以下代码来使用AJAX动态填充DropDown控件。每次单击DropDown控件时,以下语句将查询转移到AJAX函数,然后转发到.php文件以检索数据库结果。用于AJAX的查询字符串不刷新
问题是,即使MySQL连接字符串与主机使用相同的远程服务器的IP地址,相同的代码在本地计算机上使用时仍能正常工作。但是,当我将文件上传到远程服务器时,所有DropDowns都会填充相同的结果。例如,如果有三个DropDowns即:区,选区,城市,并且如果我点击说城市,则比其他所有的DropDowns还显示列表中的城市。
我猜我在下面的AJAX函数中使用的查询字符串不刷新。
[HTML下拉代码示例]
<div id="divDistrict" name="divDistrict">
<select class="element select medium" id="inDistrict" name="inDistrict" onclick="MakeRequest('divDistrict', 'inDistrict', 'SELECT * FROM districtmaster');">
<option value="Select" selected="Select">Select</option>
</select>
</div>
[AJAX功能]
function MakeRequest(DivName, DropDownName, SqlQuery)
{
var xmlHttp = getXMLHttp();
var strUrl = "../Lib/filldropdown.php?DivName=" + DivName + "&DropDownControlName=" + DropDownName + "&SqlQuery=" + SqlQuery;
try
{
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
HandleResponse(xmlHttp.responseText, DivName);
}
}
xmlHttp.open("GET", strUrl, true);
xmlHttp.send(null);
}
catch(err)
{
alert(err);
}
}
[PHP的文件代码]
<?php
require("dbconnection.php");
require("dbaccess.php");
$dropdownControlName = $_GET['DropDownControlName'];
$query = $_GET['SqlQuery'];
dbconnection::OpenConnection();
$result = dbaccess::GetRows($query);
?>
<select name=" <?php $dropdownControlName ?> ">
<option>Select from the list</option>
<?php while($row=mysql_fetch_array($result))
{ ?>
<option value="<?= $row[0] ?>"><?= $row[1] ?></option>
<?php } ?>
</select>
请忽略DBAccess & DBConnection参考。这些文件包含简单的mysql_query & mysql_connect函数。另外,我意识到在查询字符串中传递查询的风险。一旦DropDown填充正常工作,我将修复它。
OFF:让网页传递SQL查询是非常危险的。你的SQL服务器可能会被直接攻击!我希望它不是生产代码... – fviktor 2010-01-01 14:07:47
不,它不是生产代码。正如我写的,我将着手解决这个问题。 – RKh 2010-01-01 14:09:13