AJAX ve PHP kullanarak dinamik doldurmamak HTML DropDown denetimleri

2 Cevap php

Dinamik benim HTML Formunda DropDown denetimlerini doldurmak için, ben bir. Php dosyasına AJAX çağrı yapar kod yazdım. Bu. Php dosyası tek bir sütun değeri ile DropDown denetimi doldurur.

Bütün bu süreçte, üç dosya rol oynamaktadır.

(1) A HTML file that contains the entry form, (2) A .js file containing basic AJAX code, and (3) A .php file containing code to populate the DropDown control on my HTML form.

Aşağıda, sırasıyla her üç dosya gerekli kodu veriyorum. DropDown nedenle, ben aşağıda verilen kodu gerekli gerekli düzeltmeleri bilmek istiyorum, doldurma değildir.

. Js dosyasında MakeRequest işlevi, birkaç bağımsız değişken kabul unutmayın. Bu argümanlar şunlardır:

(1) HTML DropDown control name, (2) Entire Sql Query. (3) The ID column in a MySQL table. (4) The actual column whose values need to be populated in the DropDown control.

Aşağıdaki sütunlardan oluşmaktadır "ElectionCategoryMaster": Bu bağlamda, örneğin, ben adında bir MySQL tablo başvuran ediyorum:

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

Kullanıcı DropDown bir ecName seçtiğinde ben bu ID değerini almak böylece ben bir argüman olarak kimlik sütunu geçirerek. Bu, ECID, farklı bir tabloda depolanır.

[Code: HTML file]

<td onactivate="javascript: MakeRequest('inCategory','SELECT * FROM electioncategorymaster', 'ecid', 'ecname');">
    <select id="inCategory" name="inCategory" class="entryFormInputBoxColor">

    </select>
</td>

[Code: .js file] [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;
}

[Code: .php file] [To populate the desired DropDown control]

<?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 Cevap

I believe the javascript is the source of the problem. Let me explain: The function HandleResponse() always fills in the same ID. The variable DropDownName from your MakeRequest() function isn't passed anywhere to your HandlResponse() function. Try to add this argument, it should work better.

Apart from that, using MySQL queries directly inside your javascript is a big security issue.
1) You tell people the inner structure of your database.
2) People can modify this request to retrieve anything they want! FROM your database!

ASLA kullanıcı doğrudan kullanıcı girişi (ve evet, GET argüman kullanıcı girişi olması CAN: herkesin buna erişimi olan, basit bir GET değişkeni var).

Bir keresinde bir sorgu dizesi oluşturmak için javascript kullanılan, ancak bu tablo adı ve koşulları gibi birçok önemli bilgilerinizi bırakın başardı. Ben de tam bir sorgu dizesi yapmak için ön ve arka sunucu tarafında dizeleri ekleyerek, üzerinde mysql_real_escape_string kullandığınızdan emin yaptı. Bu diziler yayınlamak için çalışmaktan çok daha kolay oldu. Ben bu güvenli ve kolay bir alternatif olduğunu hissediyorum.