2014-03-25 29 views
0

我與選擇框改變了代碼以下:多重選擇框來搜索數據庫

<html> 

<head> 
<script type="text/javascript"> 

function loadXMLDoc() { 
var xmlhttp; 
if (window.XMLHttpRequest) { 
// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
} else {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.frm.modelSelection.innerHTML=xmlhttp.responseText; 
    } 
} 

var makevalue=document.frm.makeSelection.value; 

xmlhttp.open("GET","http://www.autodeal.co.za/newsite/model-selection?ajaxmake="+‌​makevalue,true); 
xmlhttp.send(); 
} 

</script> 
</head> 

<body> 

<?php 

$dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb"; 

// Throws an error if the database cannot be found 
if (!file_exists($dbName)) { 
    die("Could not find database file."); 
} 

// Connects to the database 
// Assumes there is no username or password 
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', ''); 

?> 

<form action="index.php?option=com_content&view=article&id=99" method="post" name="frm"> 

<select name="makeSelection" onchange="loadXMLDoc()"> 

<?php 
//Loads the Makes from the database into a dropdown 
$resultMake = odbc_exec($conn, "SELECT DISTINCT Make FROM Vehicle ORDER BY Make") or die (odbc_errormsg()); 
while ($rowMake = odbc_fetch_array($resultMake)) { 
    echo "<option value='$rowMake[Make]'>$rowMake[Make]</option>"; 

} 

?> 
</select><br /> 

    <select name="modelSelection"> 

    </select><br /> 

    <select name="yearSelection"> 
     <option>2004</option> 
     <option>2005</option> 
     <option>2006</option> 
     <option>2007</option> 
     <option>2008</option> 
     <option>2009</option> 
     <option>2010</option> 
     <option>2011</option> 
     <option>2012</option> 
     <option>2013</option> 
     <option>2014</option> 
    </select><br /> 

    <select name="priceSelection"> 
     <option>< 5000</option> 
     <option>5000 - 20 000</option> 
     <option>20 000 - 50 000</option> 
     <option>50 000 - 100 000</option> 
     <option>100 000 - 200 000</option> 
     <option>200 000 - 300 000</option> 
     <option>300 000 - 400 000</option> 
     <option>400 000 - 500 000</option> 
     <option>50 000 - 1 000 000</option> 
     <option>> 1 000 000</option> 
    </select> 

<input type="submit" name="submit" value="Go"> 
</form> 

</body> 
</html> 

嗨,

我已經更新了代碼,以反映下面的答案,但現在,當您進行第一次選擇時,模型選擇框將保持爲空。

modelSelection.php

<?php 
     $dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb"; 

     // Throws an error if the database cannot be found 
     if (!file_exists($dbName)) { 
      die("Could not find database file."); 
     } 

     $conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', ''); 
     //loads the models based on the makes selection into a dependant dropdown 
     if (isset($_REQUEST['ajaxmake'])) { 

      $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg()); 

       while ($rowModel = odbc_fetch_array($resultModel)) { 

        echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>"; 
        die(); //I'm not sure where to put this because I assume this is the reason why this selection must be first 
       } 

     } 

?> 
+0

首先,你應該刪除這個'die();'並嘗試。如果您的選擇仍然不是第一,還有其他方法可以實現。 –

+0

看看我是否刪除它?剩下的選擇框中的選項被轉儲到「模型」選擇框中。 – Deon

回答

1

據我所看到的,問題是,你正在裝載一個選擇按鈕內部的整個請求響應文本。我查看了您的請求響應,並且它正在響應加載模型的整個頁面,所以基本上它會獲取所有選項並將它們加載到模型選擇框上,因爲您將整個頁面插入到模型選擇框中。

你有多種選擇在這裏: 您可以創建只加載模型的選項頁面,所以有它只有這部分的文件:

  $dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb"; 

      // Throws an error if the database cannot be found 
      if (!file_exists($dbName)) { 
       die("Could not find database file."); 
      } 

      $conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', ''); 
      //loads the models based on the makes selection into a dependant dropdown 
      if (isset($_REQUEST['ajaxmake'])) { 

       $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg()); 

        while ($rowModel = odbc_fetch_array($resultModel)) { 

         echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>"; 
        } 

      } 

和更改您通過AJAX調用頁面指向該頁面:

xmlhttp.open("GET","newpage.php?ajaxmake="+ makevalue,true); 

另一種選擇,並具有功能,宜生你的工作之一,我建議你的是尋找到一些JavaScript庫,如jQuery

如果包括jQuery庫,增加選擇的名字作爲ID = 「makeSelection」 和id = 「modelSelection」 你可以寫一個JavaScript函數是這樣的:

jQuery(document).ready(function(){ 
    jQuery("#makeSelection").change(function(){ 
     jQuery("#modelSelection").load("?ajaxmake="+ makevalue + #modelSelection option"); 
    }); 
}); 

BTW!請注意,您的sql查詢中可能存在巨大的安全問題,因爲人們可以通過ajaxmake變量來攻擊您,並截斷/刪除您的表或任何東西。我建議您清理和驗證來自請求的數據,特別是如果您在互聯網上發佈一些敏感數據(如數據庫表)!如果你想了解更多關於SQL注入的知識(如何調用這個安全問題):How can I prevent SQL injection in PHP?

+0

好吧,我去了你的第一個選擇。我現在在一個單獨的文件中有模型選擇代碼塊。我該如何去調用'xmlhttp.open(「GET」,「modelSelection.php?ajaxmake =」+ makevalue,true);'我在哪裏做?我已經嘗試將其添加到頁面的頭部。這是行不通的。不應該有select函數調用嗎? – Deon

+0

你基本上按照和你一樣的方式進行操作,而不是調用當前頁面,而是調用新頁面,該頁面只顯示一小段包含模型選項的HTML,插入模型中的選擇與您正在做的相同它現在。 –

+0

請參閱我的原始問題編輯的代碼... – Deon

0

我不知道爲什麼你納入你的Ajax處理文件的HTML。通常你只保留一個只包含php代碼的.php文件,然後你就可以確定沒有包含HTML或腳本代碼(目前在你的頁面中正在發生)。

其一,試圖改變自己的model下拉代碼:

<?php 
      //loads the models based on the makes selection into a dependant dropdown 
      if (isset($_REQUEST['ajaxmake'])) { 

       echo "<select name='modelSelection'>"; //select tag placed here 
       $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg()); 

        while ($rowModel = odbc_fetch_array($resultModel)) { 

         echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>"; 
        } 

        echo "</select><br>"; 
        die(); //<-- the die placed here will not execute the rest of 
          //the code and also all the options will be populated 

      } 
    ?> 
+0

嗨,上面的代碼建議停止在模型選擇框中顯示的年份和價格選項選項,但是在做出選擇後,「製作」選項仍會出現在模型選擇框中。 – Deon

+0

@deon4110您的代碼中有太多的地方需要避開以便不打印html和腳本(如果您使用開發人員工具查看,您的選擇框中包含'

  • 11. 使用一個搜索框搜索多個數據庫列
  • 12. 使用Android搜索對話框搜索多個數據庫列
  • 13. 如何使多個複選框搜索值的數據庫和
  • 14. 帶複選框的多重搜索
  • 15. 搜索根據列表框選擇
  • 16. 在選擇框中搜索
  • 17. 搜索框中選擇
  • 18. 如何根據數據庫中的csv重新填充/重新選擇/自動選擇多個選擇框值?
  • 19. 自動選擇數據庫和列以及搜索數據
  • 20. 按複選框選擇的標準在sqlite數據庫中搜索
  • 21. 全文搜索Heroku,數據庫和或索引選擇?
  • 22. 如何在從數據庫搜索時選中複選框
  • 23. 選擇多個數據庫
  • 24. 基於組合框選擇從數據庫中檢索數據
  • 25. 數據表通過選擇輸入搜索+刪除實際搜索框
  • 26. 用戶界面來搜索數據庫
  • 27. PHP腳本來搜索MySQL數據庫
  • 28. 數據庫訪問搜索文本框
  • 29. 使用組合框搜索數據庫
  • 30. PHP搜索MySQL數據庫框架