2012-01-12 85 views
1

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

自动完成数组存储在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]

什么问题?请帮忙。

回答

7

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

接下来,如果你想获得自动完成工作,因为你已经拥有jQuery的加载,你可能还需要加载jQuery UI 然后你可以使用jQuery UI autocomplete

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