使用ajax php和mysql自动完成

时间:2012-01-12 07:00:14

标签: php jquery ajax autocomplete

我有一个包含两个文本框和一个提交按钮的表单。第二个框自动填充输入。在提交时,页面刷新并显示包含两个文本框内容的表(使用ajax)。

自动完成数组存储在mysql中。文本框的值存储在mysql的单独表中。

这些是代码:

1)autotesting.html

<html>
<head>
<title>PHP using AJAX</title>
<script type=""text/javascript" src="prototype.js"></script>
<link rel="stylesheet" href="autocomplete.css" type="text/css" media="screen">
<script src="jquery.js" type="text/javascript"></script>
<script src="dimensions.js" type="text/javascript"></script>
<script src="autocomplete.js" type="text/javascript"></script>

<script type="text/javascript">

var time_variable;

function getXMLObject()  //XML OBJECT
{
   var xmlHttp = false;
   try {
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")  // For Old Microsoft Browsers
   }
   catch (e) {
     try {
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")  // For Microsoft IE 6.0+
     }
     catch (e2) {
       xmlHttp = false   // No Browser accepts the XMLHTTP Object then false
     }
   }
   if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
     xmlHttp = new XMLHttpRequest();        //For Mozilla, Opera Browsers
   }
   return xmlHttp;  // Mandatory Statement returning the ajax object created
}

var xmlhttp = new getXMLObject();   //xmlhttp holds the ajax object

function ajaxFunction() {
  var getdate = new Date();  //Used to prevent caching during ajax call

 if(xmlhttp) {
    var txtname = document.getElementById("txtname");
    var searchField = document.getElementById("searchField");
    xmlhttp.open("POST","autotesting2.php",true); //calling testing2.php using POST method
    xmlhttp.onreadystatechange  = handleServerResponse;
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlhttp.send("txtname="+ txtname + "&searchField=" + searchField); //Posting to PHP File
  }
}

function handleServerResponse() {
   if (xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
       document.getElementById("message").innerHTML=xmlhttp.responseText; //Update the HTML Form element 
     }
     else {
        alert("Error during AJAX call. Please try again");
     }
   }
}




$(function(){
        setAutoComplete("searchField", "results", "autocomplete.php?part=");
    });
</script>

</script>
<body>
<form name="myForm">
<table>
 <tr>
  <td>Add New Item Type</td>

 <td>

    <p id="auto">
        <label>Colors: </label><br>
        <input type="text" id="txtname" name="txtname" /><br><br>
        <input id="searchField" name="searchField" type="text" /><br><br>

</p>
</td>   
</tr>
 <tr>
  <td colspan="2"><input type="button" value="Add new item" onclick="ajaxFunction();" />


 </tr>
</table>
<div id="message" name="message"></div>
</form>
</body>
</head>
</html>

2)autotesting2.php

<?php
$conn = mysql_connect("localhost","demo","demo");
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
 $txtname = $_POST["txtname"];
$searchField = $_POST["searchField"];
$sql = "INSERT INTO test3 (txtname,searchField) VALUES ('$txtname','$searchField')";
mysql_select_db('test_db'); 
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}
echo "<table border='2' cellspacing='5' cellpadding='5'>";
$result=mysql_query("SELECT * FROM test3"); 
while($row=mysql_fetch_array($result)) 
  {
  echo "<tr>";
  echo "<td>" . $row['txtname'] . "</td>";
  echo "<td>" . $row['searchField'] . "</td>";
  echo "</tr>";
  }
echo "</table>";echo "<br>";
mysql_close($conn); 
?>

3)autocomplete.php

<?php

$link = mysql_connect('localhost', 'demo', 'demo');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}
if (!mysql_select_db("test_db")) {
   echo "Unable to select test_db: " . mysql_error();
   exit;
}

$result = mysql_query("SELECT name FROM  sks_color");
while ($row = mysql_fetch_assoc($result)) {
        $colors[]=$row['name'];
}
mysql_free_result($result);
mysql_close($link);

// check the parameter
if(isset($_GET['part']) and $_GET['part'] != '')
{
    // initialize the results array
    $results = array();

    // search colors
    foreach($colors as $color)
    {
        // if it starts with 'part' add to results
        if( strpos($color, $_GET['part']) === 0 ){
            $results[] = $color;
        }
    }

    // return the array as json with PHP 5.2
    echo json_encode($results);
}

代码工作正常,直到页面刷新并且表格包含[object HTMLInputEle]而不是文本框内容的单元格。此外,数据库中的表将插入[object HTMLInputEle]

有什么问题?请帮忙。

1 个答案:

答案 0 :(得分:7)

首先,如果您不打算使用它,为什么要加载jQuery? jQuery已经拥有你需要做的所有事情AJAX requests,所以你可能想尝试一下(特别是因为你正在加载它)而不是创建你自己的xmlhttp对象。

接下来,如果您正在尝试自动完成工作,因为您已经加载了jQuery,您可能还想加载jQuery UI 然后,您可以使用jQuery UI autocomplete

这应该是你在这里要做的一切。