2016-02-03 64 views
-3

我是全新的jquery。使用php和jquery進行實時搜索?

我有一個簡單的問題:我試過一個例子,使用PHP,MySQL和jQuery進行實時搜索,但它不顯示結果。

的html代碼:名爲 「getStates.php」

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

<script type = "text/javascript"> 
function getStates(value){ 
    $.post("getStates.php",{partialState:value}, function(data){ 

     $("#results").html(data); 
    }); 
} 
</script> 
</head> 
<body> 
<input type = "text" onkeyup = "getStates(this.value)" /> 
<br> 
<div id = "results"> </div> 
</body> 

</html> 

我的PHP文件:

<?php 

$con = mysql_connect("localhost", "root", "") 
or die("Failed to connect to the server: " . mysql_error()); 

mysql_select_db("airlines") 
or die("Failed to connect to the database: " . mysql_error()); 

$partialStates = strtoupper($_POST['partialState']); 

$states = mysql_query("select source from flights where source like '%$partialStates%'"); 

while($row = mysql_fetch_array($states)) 
{ 
    echo "<div>" . $row['source'] . "</div>"; 
} 

?> 
+1

檢查錯誤,請檢查您的控制檯 –

+2

**'mysql_ *'不推薦使用**。使用[PDO Prepared Statements!](http://php.net/manual/en/pdo.prepared-statements.php) – Ben

+1

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/ 12859942 /爲什麼-不應該-I-使用MySQL的函數式的PHP)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

回答

2

「我很好奇你訪問一個你自己的機器上爲c:///file.php或http://localhost/file.php或.htm?如果NIX系統上,getStates.php和GETSTATES。 PHP是不一樣的2只不同的動物乾脆你有安裝一個Web服務器/ PHP您託管在一個網站的某個地方。 - ?弗雷德-ii- 6分鐘前」

和OP

「@ Fred-ii-是的,你是對的先生......我正在訪問在localhost之外的文件....我把文件移動到本地主機,並再次嘗試它,並正常工作..謝謝你:) ... - 馬赫馬哈茂德1分鐘前 「

在註釋中看到此之後:

」 的XMLHttpRequest無法加載的文件:/// C:/用戶/%D9%81%D8%A7% D8%B7%D9%85%D8%A9 /下載/程序/ getStates.php「

  • 這是一個大破綻。

你走了。自從你的代碼在我的機器上工作後,我對此有了一種感覺。

您需要訪問您的文件http://localhost/file.php而不是c:///file.php

這就是爲什麼會向您顯示「密碼」 /不執行任何語句,而不是被解析的原因。

如果以這種方式訪問​​,網絡瀏覽器將不會解析PHP指令,而不像.html文件,其中c:///file.html確實會顯示HTML代碼。

另外,每個人都談到了SQL注入,等等,等等等等

3

首先,要執行AJAX任何時候要求你必須在網絡服務器上執行他們!一個AJAX請求向服務器發出的HTTP請求,就像您加載任何其他網頁一樣。注意確保字符大小寫對於腳本/頁面名稱是正確的,特別是在* nix系統上,getStates.php和getstates.php不會相同。 (直亂射從拉夫!

如果我這樣做,我會做這一切在jQuery的(因爲你已經在使用它),它使您不必在您的標記,這是任何內嵌代碼清潔方法:

<script type="text/javascript"> 
$(function(){ 
    $(document).on('keyup', '[name="state"]', function() { 
     var partialState = $(this).val(); 
     $.post("getStates.php",{partialState:partialState}, function(data){ 
      $("#results").html(data); 
     }); 
    }); 
}); 
</script> 

確保一個名稱添加到輸入時刪除內嵌代碼:

<input type="text" name="state" /> 

接下來,添加錯誤檢查,以您的查詢:

$states = mysql_query("select source from flights where source like '%$partialStates%'") or die(mysql_error()); 

然後參考jQuery AJAX Basics上的這篇文章,瞭解如何閱讀控制檯及其數據以查看從查詢中返回的錯誤。


此外your script is at risk for SQL Injection Attacks.

你應該stop using mysql_* functionsThese extensions已在PHP 7中刪除。瞭解有關PDOMySQLiprepared對帳單,並考慮使用PDO,it's really pretty easy。 。

+1

*「直射射從拉爾夫!」* - 這就是爲什麼*眼睛*把我的馬歇爾的徽章山姆,更不用說*代碼偵探* ;-) –