Динамическое заполнение HTML-элементов управления DropDown с использованием AJAX и PHP - PullRequest
1 голос
/ 16 ноября 2009

Чтобы динамически заполнять элементы управления DropDown в моей HTML-форме, я написал код, который вызывает AJAX-вызов файла .php. Этот файл .php заполняет элемент управления DropDown одним значением столбца.

Во всем этом процессе три файла играют роль.

(1) HTML-файл, который содержит форму ввода, (2) файл .js, содержащий базовый код AJAX, и (3) Файл .php, содержащий код для заполнения элемента управления DropDown в моей HTML-форме.

Ниже я даю необходимый код для всех трех файлов соответственно. DropDown не заполняется, поэтому я хочу знать необходимые исправления, необходимые в приведенном ниже коде.

Обратите внимание, что функция MakeRequest в файле .js принимает несколько аргументов. Эти аргументы:

(1) имя элемента управления DropDown HTML, (2) Весь запрос Sql. (3) Столбец ID в таблице MySQL. (4) Фактический столбец, значения которого необходимо заполнить в элементе управления DropDown.

В этом контексте, например, я ссылаюсь на таблицу MySQL с именем: «ElectionCategoryMaster», которая состоит из следующих столбцов:

(1) ecID Int P.K (2) ecName varchar

Я передаю столбец идентификатора в качестве аргумента, чтобы я мог получить это значение идентификатора, когда пользователь выбирает ecName из DropDown. Это, 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 ]

1 голос
/ 16 ноября 2009

Я полагаю, что javascript является источником проблемы. Позволь мне объяснить: Функция HandleResponse() всегда заполняет один и тот же идентификатор. Переменная DropDownName из вашей функции MakeRequest() никуда не передается вашей функции HandlResponse(). Попробуйте добавить этот аргумент, он должен работать лучше.

Кроме того, использование запросов MySQL непосредственно внутри вашего javascript - это большая проблема безопасности.
1) Вы рассказываете людям о внутренней структуре вашей базы данных.
2) Люди могут изменить этот запрос, чтобы получить все, что они хотят! ИЗ вашей базы данных!

НИКОГДА не вводите данные напрямую пользователем (и да, аргумент GET МОЖЕТ быть вводом пользователя: это простая переменная GET, каждый имеет к ней доступ).

0 голосов
/ 01 декабря 2009

Когда-то я использовал javascript для генерации строки запроса, но смог опустить многие важные детали, такие как имя таблицы и условия WHERE. Я также удостоверился, что использовал mysql_real_escape_string на нем, добавляя строки на переднюю и заднюю стороны сервера, чтобы сделать полную строку запроса. Это было намного проще, чем пытаться размещать массивы. Я чувствую, что это была безопасная и более легкая альтернатива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...