0

我有一个包含库存商品的数据库和一个网页,允许您在数据库中搜索商品类型或特定商品编号。结果将返回并显示在搜索表单下的表格中。

目前,我通过将 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

1 回答 1

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>-tag)。

否则,您再次删除 css 以显示它们。

这样做的缺点是,缩减的结果只显示给用户,但是为了在服务器站点上再次使用缩减的版本,您需要再次将结果映射到复选框或隐藏字段并再次发送。

于 2013-04-25T13:14:43.917 回答