2011-09-06 58 views
1

我試圖使用PHP,jQuery和MS SQL數據庫實現即時搜索功能。說實話,我不確定我遇到的問題是什麼。我沒有得到任何的PHP錯誤,我唯一能想到的就是與數據庫有關的一些混淆。我在Windows Server 2003上有這些文件,而且我試圖訪問另一臺運行Windows Server 2008的服務器上的MSSQL數據庫。我對這些服務器是完全陌生的,並且像這樣對它們進行編程。 (我是IT實習生。)以下是我正在使用的代碼,它是從用於創建即時搜索的教程修改而來的。這是我在這一點上的代碼。使用PHP,MSSQL,JQuery進行即時搜索

的PHP文件:

<?php 
if(!empty($_GET['q'])) { 
search(); 
} 

function search() { 
$server = 'Windows2008ServersName'; 
$con = mssql_connect($server, 'username', 'password') 
    or die("Couldn't connect to SQL Server on $server"); 
mssql_select_db('dbname', $con); 

$q = str_replace("'","''",$_GET['q']); 
$sql = mssql_query(" 
    SELECT 
     db.First_Name, SUBSTR(db.Last_Name,1,300) 
    FROM db 
    WHERE db.First_Name LIKE '%{$q}%' OR db.Last_Name LIKE '%{$q}%' 
    ") 
or die ('Query Error'); 

//Create an array with the results 
$results=array(); 
while($v = mssql_fetch_object($sql)){ 
    $results[] = array(
     'title'=>$v->title, 
     'post'=>$v->post 
    ); 
} 

//using JSON to encode the array 
echo json_encode($results); 
} 
?> 

JavaScript文件:

var runningRequest = false; 
var request; 

//Identify the typing action 
$('input#q').keyup(function(e){ 
    e.preventDefault(); 
    var $q = $(this); //get the letter 

    //if it's not a search term return false 
    if($q.val() == ''){ 
     $('div#results').html(''); 
     return false; 
    } 

    //Abort opened requests to speed it up 
    if(runningRequest){ 
     request.abort(); 
    } 

    runningRequest=true; 
    request = $.getJSON('search.php',{ 
     q:$q.val() 
    },function(data){   
     showResults(data,$q.val()); 
     runningRequest=false; 
    }); 

//Create HTML structure for the results and insert it on the result div 
function showResults(data, highlight){ 
     var resultHtml = ''; 
     $.each(data, function(i,item){ 
      resultHtml+='<div class="result">'; 
      resultHtml+='<h2><a href="#">'+item.title+'</a></h2>'; 
      resultHtml+='<p>'+item.post.replace(highlight, '<span  class="highlight">'+highlight+'</span>')+'</p>'; 
      resultHtml+='<a href="#" class="readMore">Read more..</a>' 
      resultHtml+='</div>'; 
     }); 

     $('div#results').html(resultHtml); 
    } 

    $('form').submit(function(e){ 
     e.preventDefault(); 
    }); 
}); 

HTML文件:

<html> 
<head> 
    <title>Instant Search</title> 
    <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script> 
<script type="text/javascript" src="js/search.js"></script> 
<style> /*css*/ </style> 
</head> 
<body> 
    <form method="get" action=""> 
     <input type="text" id="q" name="q" /> 
    <input type="submit" value="Search" /> 
    </form> 

    <div id="results"></div> 

</body> 
</html> 

PHP安裝在Web服務器上,但我不確定它安裝在MSSQL服務器上,這可能是問題嗎?我並不十分熟悉如何設置服務器以便彼此協作。特別是在這樣的情況下。

+0

它是做什麼的?如果它什麼都不做,那麼你的JavaScript有問題。 – Cfreak

+0

這將需要一些調試。如果你把alert()放在keyup處理程序中,它會觸發嗎?如果你警告()你的PHP頁面的響應,它會顯示什麼? – dqhendricks

+0

兩個數字都沒有。它沒有訪問我的PHP文件? – dwf

回答

0

不要以爲你想在JavaScript中的var var''$;它可以被允許(我不認爲它是,但我沒有嘗試過),但它不是必要的,它是令人困惑的。

可能還有更多,但是這對我來說很糟糕。

+0

我正在使用MSSQL,所以我不認爲我可以使用該功能?我的印象是'$ q = str_replace(''「,'''」,$ _ GET ['q']);'會處理它 – dwf

+0

哈哈錯過了。是的,你沒有該功能的mssql。引用替換通常被認爲是SQL Server最簡單的助手。 –