2016-02-26 53 views
0

我想找到一種方法,在每個Web部分的根目錄中放置一個頁面,以容納我打電話給的所有數據庫查詢。一個功能頁面上的多個AJAX功能

我使用了一個小腳本.....

<script type="text/javascript"> 
    $(function() { 
    var availableTags = <?php include('fn-search-em.php'); ?>; 
    $("#quick-add").autocomplete({ 
     source: availableTags, 
      autoFocus:true 
    }); 
    }); 
</script> 

....做到這一點顯示爲用戶鍵入搜索SQL。與此類似....

$sql = "SELECT * FROM stock_c_colours WHERE current_c_status = 'current' AND deleted = 'no'"; 
$result = mysqli_query($conn, $sql); 

$results_list = array(); 
while($row = mysqli_fetch_array($result)) 
{ 
    $colour_id = $row['id']; 
    $range_name = $row['range_name']; 
    $range_colour = $row['colour']; 
    $colour_code = $row['code']; 
    $p1 = $row['piece_size_1']; 
    $p2 = $row['piece_size_2']; 

    if($p1 > 1){ 
     $p_mark = 'x'; 
    } 
    else { 
     $p_mark = ''; 
    } 

    $results_list[] = $range_name.' ('.$range_colour.' '.$colour_code.' '.$p1.$p_mark.$p2.') ID:'.$colour_id; 
} 
echo json_encode($results_list); 

回聲在一個JSON陣列迴文本框,瞧,一個列表的形式列出。然而,我目前正在使用的網站有大約20個搜索框,這些搜索框分散在各處(用戶請求),這是否意味着我必須有20個單獨的php功能頁面,每個頁面都有自己的查詢,或者可以單頁面被使用?

我懷疑java需要修改一點點以在多個查詢的頁面上調用特定的函數,但是我對Java不太好,所以一些幫助將不勝感激。

我最初嘗試在Java腳本中添加?action =到PHP地址的末尾,希望另一端的GET能夠將PHP結尾分成幾部分,但沒有運氣。

回答

1

您需要將<?php include('fn-search-em.php'); ?>;更改爲<?php $action = 'mode1'; include('fn-search-em.php'); ?>;

然後在您的fn-search-em.php文件中,使用$action變量來確定您創建的是哪種MySQL查詢。

例如:

if ($action == 'mode1') 
    $sql = "SELECT * FROM stock_c_colours WHERE current_c_status = 'current' AND deleted = 'no'"; 
else 
    $sql = "SELECT * FROM stock_c_colours WHERE current_c_status = 'mode1' AND deleted = 'no'"; 
+0

謝謝。由於純粹的簡單性和對當前代碼的最小修改,選擇此答案。我真的需要加快一些基本的Java :( – Stephen

+0

這可能是一個非常愚蠢的問題,但我會更好(因爲他們只是微小的SQL查詢,只是把整個查詢放入availableTags變量?然後,我可以一起刪除sep PHP頁面,只需按需要編寫查詢即可。 – Stephen

+0

Hey Stephen,您絕對不希望將SQL查詢直接包含到您的JavaScript代碼中,因爲這會打開您的代碼任何執行任何SQL查詢的人都可以在沒有您的授權的情況下執行任務。您必須確保您的SQL查詢得到了服務器端的生成,並且任何字符串值都會被接受幷包含到您的SQL查詢中(通過JavaScript從客戶端獲得)使用PHP中的[mysql_real_escape_string](http://php.net/manual/en/function.mysql-real-escape-string.php)函數。 – Steven

1

你可以通過創建一個PHP文件與switch語句來控制什麼是你的Ajax調用期間執行的代碼做到這一點:

JS:

$.ajax({url: 'ajax.php', method: 'POST', async:true, data: 'ari=1&'+formData,complete: function(xhr){ var availableTags = JSON.parse(xhr.responseText);}}); 

PHP:

<?php 
    switch($_REQUEST['ari']){ 
     case 1: 
      $sql = "SELECT * FROM stock_c_colours WHERE current_c_status = 'current' AND deleted = 'no'"; 
      $result = mysqli_query($conn, $sql); 

      $results_list = array(); 
      while($row = mysqli_fetch_array($result)){ 
      $colour_id = $row['id']; 
      $range_name = $row['range_name']; 
      $range_colour = $row['colour']; 
      $colour_code = $row['code']; 
      $p1 = $row['piece_size_1']; 
      $p2 = $row['piece_size_2']; 

      if($p1 > 1){$p_mark = 'x';} 
      else { $p_mark = ''; } 
      $results_list[] = $range_name.' ('.$range_colour.' '.$colour_code.' '.$p1.$p_mark.$p2.') ID:'.$colour_id; 
      } 
      echo json_encode($results_list); 
     break; 
     case 2: 
      // another SQL Query can go here and will only get run if ARI == 2 
     break; 
    } 
?> 

這允許您將多個AJAX處理程序保存在同一個文件中,只需在您調用PHP文件時傳遞所需處理程序的索引或不發生任何事情。