使用AJAX和PHP动态填充HTML DropDown控件

时间:2009-11-16 07:24:13

标签: php javascript html ajax

要在我的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();
?>

2 个答案:

答案 0 :(得分:1)

我相信 javascript 是问题的根源。让我解释: 函数HandleResponse()始终填充相同的ID。 DropDownName函数中的变量MakeRequest()不会传递到HandlResponse()函数的任何位置。尝试添加此参数,它应该更好。

除此之外,直接在javascript中使用MySQL查询是一个安全问题 1)你告诉人们数据库的内部结构 2)人们可以修改此请求以检索他们想要的任何内容!从你的数据库!

从不直接用户输入(是的,GET参数可以是用户输入:它是一个简单的GET变量,每个人都可以访问它)。

答案 1 :(得分:0)

我曾经使用javascript生成查询字符串,但是能够省去许多重要的细节,例如表名和WHERE条件。我还确保在其上使用mysql_real_escape_string,在前端和后端服务器端添加字符串以生成完整的查询字符串。它比试图发布数组容易得多。我觉得这是一个安全而容易的选择。