2014-06-29 85 views
0

前一段時間我做了一個與AJAX和PHP的搜索功能。你可以用文本填寫一個文本框,它會嘗試在存儲在數據庫中的所有國家中找到一個匹配項。 現在我正在細化代碼並使其成爲PDO,但是我破壞了一些東西,而我無法找出什麼。PHP數據庫AJAX沒有更新

這是我的純HTML

<head> 
    <title>Ajax</title> 
    <link href="style/style.css" rel="stylesheet" type="text/css" /> 
    <link rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript" src="scripts/Javascript.js"></script> 
</head> 

<body> 
    <div id="main"> 
      <h1 class="title">Enter your country please</h1> 

     <input type="text" id="search" autocomplete="off" onchange=""> 
      <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4> 

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

這裏是我的jQuery和JavaScript的。注意我沒有改變任何HTML或JavaScript,所以它不能通過類型錯誤。

$(document).ready(function() { 
alert('asdf'); 

function search() { 
    var query_value = $('input#search').val(); 
    $('b#search-string').html(query_value); 

    if(query_value !== ''){ 
     $.ajax({ 
      type: "POST", 
      url: "search.php", 
      data: { query: query_value }, 
      cache: false, 
      success: function(html){ 
       $("ul#results").html(html); 
      } 
     }); 
    } 

    return false; 
} 

$("input#search").live("keyup", function(e) { 
    clearTimeout($.data(this, 'timer')); 
    var search_string = $(this).val(); 

    if (search_string == '') { 
     $("ul#results").fadeOut(); 
     $('h4#results-text').fadeOut(); 
    } 

    else { 
     $("ul#results").fadeIn(); 
     $('h4#results-text').fadeIn(); 
     $(this).data('timer', setTimeout(search, 100)); 
     }; 
    }); 
}); 

這裏是我的search.php

<?php 
class SearchEngine{ 

    private $html; 

    public function __construct($conn){ 

     $this->html = '<li class="result"> 
          <h3>NameReplace</h3> 
          <a target="_blank" href="ULRReplace"></a> 
         </li>'; 

     if (isset($_POST["query"])) { 
      $search_string = mysql_real_escape_string($search_string); 
     } 

     else{ 
      $search_string = 'b'; 
     } 

     if (strlen($search_string) >= 1 && $search_string !== ' ') { 

      $query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"'; 
      $result = $conn->prepare($query); 
      $result->execute(); 
      $result_array = $result->fetchAll(); 

       foreach ($result_array as $result) { 
        $display_name = preg_replace("/" . $search_string . "/i", "<b>" . $search_string . "</b>", $result['name']); 
        $display_url = 'sadf'; 

        $output = str_replace('NameReplace', $display_name, $this->html); 
        $output = str_replace('ULRReplace', $display_url, $output); 
        echo($output); 
       } 
     } 
    } 

    } 
?> 

的問題:

  1. 郵政查詢,從未創建,爲了這個,我做了一個isset所以現在當有沒有創建郵政查詢。它將創建一個值爲「B」的Post Query。

  2. 我認爲該網頁永遠不會更新,但我不能100%確定,因爲該帖子永遠不會被創建,因此永遠不會對該查詢進行更新。由於某種原因,結果並不在正確的位置。

任何幫助將不勝感激。請溫柔我對Ajax很陌生,我寧願理解也不想解決問題。謝謝

+1

如果你'var_dump($ _ POST);' - 什麼都顯示?如果您嘗試手動導航到更新SQL的PHP​​頁面,會發生什麼情況? – Dutchie432

+0

我不能var_Dump帖子,因爲它永遠不會被創建。我測試了javascript.js,其中的函數被調用,但沒有做他們應該做的事情。以及手動導航到PHP頁面的含義是什麼? –

+0

@KrijnvanderBurg你仍然需要這個問題的幫助? – meda

回答

1

你真的把你的搜索字符串發佈到PHP類嗎?

這不是它是如何工作的,你需要創建該類的一個實例並使用它。

search.php

創建該類的單獨的PHP文件,並已將其列入你可以有一個簡單的類看起來像下面:

search_engine.php

<?php 
class SearchEngine{ 

    private $conn; 

    function __construct($conn){ 
     $this->conn = $conn; 
    } 

    function get_search_results($search_string){ 
     $query = 'SELECT * FROM country WHERE name LIKE :search'; 
     $result = $this->conn->prepare($query); 
     $result->execute(array(':search'=>'%'.$search_string.'%')); 
     $result_array = $result->fetchAll(); 

     return $result_array; 
    } 
} 
?> 

search.php

if (isset($_POST["query"])) { 
    $search_string = $_POST["query"]; 
    if(strlen($search_string) >= 1 && $search_string !== ' ') { 
     include 'search_engine.php' 
     $engine = new SearchEngine($conn); 
     $results = $engine->get_search_results($search_string); 
     foreach($results as $result){ 
      //do something 
     } 
    } 
}