簡體   English   中英

如何使用 PHP 中的 AJAX 從數據庫動態填充下拉框而不提交表單和頁面刷新?

[英]How to fill dropdown box dynamically from database without submitting form and page refresh using AJAX in PHP?

我有一個 PHP 文件,其中有一個表格,其中有兩個 Select 下拉框。 第一個 select 框填充了一些值。

第二個 select 盒子是空的。

根據要求,如果從第一個下拉框中選擇了某個值,則第二個框應該填充數據庫中的一些值。

我想使用 AJAX 來實現這一點。

我從http://www.w3school.com站點獲得了一個代碼。 但隨后只有一個下拉框,並且在 onchange 事件中,所選值的相關值以表格格式顯示。我可以用我的第二個 select 框替換代碼中表格的 html 代碼。 但根據要求,我想在選擇之前將第二個 select 下拉框顯示為空,該下拉框應根據第一個 select 框中的選擇動態並從數據庫中填充。 所以請朋友們告訴我如何解決這個問題。 如果你因為格式化不理解下面的代碼; 那么我從http://www.w3school.com站點獲得的相同代碼位於同一站點的以下鏈接上。

http://www.w3schools.com/php/php_ajax_database.asp

這是帶有 ajax 代碼的 HTML 頁面

<html>
<head>
<script type="text/javascript">
function showUser(str)
{
 if (str=="")
 {
  document.getElementById("txtHint").innerHTML="";
  return;
 } 
 if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
 }
 else
 {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>
</body>
</html>

這是位於服務器上的 PHP 文件,使用 AJAX 調用並從數據庫中獲取值

<?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
 }
 mysql_select_db("ajax_demo", $con);
 $sql="SELECT * FROM user WHERE id = '".$q."'";
 $result = mysql_query($sql);
 echo "<table border='1'>
 <tr>
 <th>Firstname</th>
 <th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "<td>" . $row['Age'] . "</td>";
  echo "<td>" . $row['Hometown'] . "</td>";
  echo "<td>" . $row['Job'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

請朋友指導我。 謝謝你!

而不是以表格行的形式回顯結果,也許像這樣以 JSON 格式將它們發送回。 您還應該通過強制轉換(如果您的 'q' 變量是數字)或 mysql_real_escape_string() 對 SQL 注入進行某種檢查。

PHP 文件:

<?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT `yourFieldName`, `yourFieldValue` FROM `yourTable` WHERE id = '".$q."'";
$result = mysql_query($sql);
$i = 0;
while ( $row = mysql_fetch_assoc($result) )
{
    $return[$i] = $row;
    $i++
}
$return["size"] = $i;
mysql_close($con);
echo json_encode($return);
?>

現在 javascript 文件中所有需要更改的是:

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        var responses = JSON.parse(xmlhttp.responseText);
        var size = responses.size;
        var selectBox =document.getElementById("yourSecondSelectBox");

        //clear any previous entries
        selectBox.options.length=0;
        for (var i = 0; i < size; i++){
            selectBox.options[i]=new Option(responses.i.yourFieldName, responses.i.yourFieldValue, false, false)
        }
    }
}

當然,您需要下載 JSON js 文件並將其包含在您的 html 'head' 標簽中。 或者,您可以包括 jquery 並使用它們內置的 AJAX 和 JSON 支持,但這需要您進行更多研究。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM