2013-04-25 31 views
0

我有一個數據庫,其中包含庫存項目和網頁,允許您通過數據庫搜索項目類型或特定項目編號。結果將返回並顯示在搜索表單下的表格中。使mysql數據庫搜索的結果可選

目前我通過將mysql查詢的結果保存到數組中,然後將數組的結果打印到表中來完成此操作。

如何使結果可選,然後有一個按鈕,如'添加',這將允許我只從選定的項目檢索數據庫中的信息。

編輯 -

<?php 
require("header.php"); 
if(isset($_REQUEST['searching'])){ //check if form has been submitted 
connect('final');//connect to DB 
//set the values from search form 
$field = $_POST['field']; 
$query = $_POST['query']; 

    $query = htmlspecialchars($query); // stop HTML characters 
    $query = mysql_real_escape_string($query); //stop SQL injection 

    $data = mysql_query("SELECT * 
    FROM stock 
    WHERE stock.Part_Number IN (SELECT stock.Part_Number 
    FROM stock 
    WHERE upper(stock.$field) LIKE'%$query%')") ;//query the DB with search field in colleumn selected// 

    //$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID LEFT OUTER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ; 

    if($data === FALSE) { 
    $error = 'Query error:'.mysql_error(); 
    echo $error; 
    } 
    else 
    { 

    $test = array(); 
    $colNames = array(); 
    while($results = mysql_fetch_assoc($data)){// puts data from database into array, loops until no more 

    $test[] = $results; 

     } 
    $colNames = array_keys(reset($test)); 


     $anymatches=mysql_num_rows($data); //checks if the querys returned any results 
      if ($anymatches == 0) 
        { 
         echo "Sorry, but we can not find an entry to match your query<br><br>"; 
        } 

    } 

然後在下面在我的HTML表單創建一個表,並有

<?php 
    //print the header 
    foreach($colNames as $colName) 
    { 
     echo "<th>$colName</th>"; 
    } 
?> 

<?php 
    //print the rows 
    foreach($test as $results) 
    { 
     echo "<tr>"; 
     foreach($colNames as $colName) 
     { 
     echo "<td>".$results[$colName]."</td>"; 
     } 
     echo "</tr>"; 
    } 
?>  

我真的不知道從哪裏開始,但我會嘗試複選框的方法。

+4

您能否將您的代碼添加到問題中?你有什麼嘗試,爲什麼它沒有工作? – andrewsi 2013-04-25 12:50:28

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-04-25 19:26:32

回答

0

那麼,有很多方法可以根據用戶的喜好調整搜索。

只需要php和html的最基本的解決方案就是在想要用作過濾器的單元格上具有複選框。

然後,您可以使用連接將新部件添加到舊的mysql-command。 例如「名稱」列的複選框,下一個搜索將只顯示帶有選中名稱的條目。

<input type="checkbox" name="names[]" id="chWalter" value="Walter" /> <label for="chWalter">chWalter</label>

發佈時,你可以通過複選框陣列與一個循環運行,並加入類似

" and name like '".$_GET['names'][$i]."'"

請注意,使用具有複選框的組將爲您提供所有激活元素值的數組。

當然,您可以修改選中的複選框如何更改以前的請求...對於刪除過濾器,您可以在請求字符串上使用正則表達式。

一個更好的解決方案將使用JavaScript。例如你可以使用隱藏的複選框,通過點擊表格單元格進行檢查。

或者你也可以使用javascript來過濾元素!使用類和

document.getElementsByClassName['class']

會減輕你的服務器的流量,並加快請求。爲此,我建議爲每一行(row1,row2等)使用一個類,每列(name,id等)使用一個類。然後當點擊一個字段時,獲取同一列類的所有元素並循環遍歷它們。

如果它們的內容不匹配,請檢查它們的行級並設置一個像「display:none」一樣的css-attribtue ...如果使用表格的佈局可以用一些替代使用的行類像

this.parentNode.style.display="none" 

要禁用行(<tr> - 標籤)。

否則,您再次移除css以顯示它們。

這樣做的缺點是減少的結果只顯示給用戶,但是如果要在服務器站點上再次使用簡化版本,則需要將結果再次映射到複選框或可能隱藏的字段並再次發送。