Php 使mysql数据库搜索结果可选
我有一个包含库存项目的数据库和一个允许您在数据库中搜索项目类型或特定项目编号的网页。结果将返回并显示在搜索表单下的表格中 目前,我将mysql查询的结果保存到一个数组中,然后将数组的结果打印到一个表中 如何使结果可选择,然后使用“添加”等按钮,以便仅基于所选项目从数据库检索信息 编辑-Php 使mysql数据库搜索结果可选,php,html,mysql,Php,Html,Mysql,我有一个包含库存项目的数据库和一个允许您在数据库中搜索项目类型或特定项目编号的网页。结果将返回并显示在搜索表单下的表格中 目前,我将mysql查询的结果保存到一个数组中,然后将数组的结果打印到一个表中 如何使结果可选择,然后使用“添加”等按钮,以便仅基于所选项目从数据库检索信息 编辑- <?php require("header.php"); if(isset($_REQUEST['searching'])){ //check if form has been submitted conn
<?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>";
}
}
及
我不确定从哪里开始,但我会尝试复选框方法。好吧,有很多方法可以根据用户的喜好调整搜索 只需要php和html的最基本解决方案是在要用作过滤器的单元格中设置复选框 然后可以使用and连接将新部件添加到旧的mysql命令中。 e、 g.“名称”列的复选框,下一次搜索将仅显示带有选中名称的条目
chWalter
发布后,您可以使用循环遍历checkbox数组并添加如下内容
“像这样的名字。”$\u获得['names'][$i]。“”
请注意,使用带有复选框的组将为您提供一个包含所有激活元素值的数组
当然,您可以修改复选框如何更改以前的请求。。。要删除筛选器,可以对请求字符串使用正则表达式
更好的解决方案是使用javascript。e、 g.您可以使用通过单击表格单元格选中的隐藏复选框
或者您可以使用javascript来过滤元素!使用类和
document.getElementsByClassName['class']
将减轻服务器流量并加快请求速度。为此,我建议为每行(第1行、第2行等)使用一个类,为每列(名称、id等)使用一个类。然后,当单击一个字段时,获取同一列类的所有元素并循环遍历它们
如果它们的内容不匹配,请遍历它们的row类并设置css属性,如“display:none”。。。如果使用表布局,则可以将行类的使用替换为
this.parentNode.style.display="none"
禁用行(
-tag)
否则,您将再次删除css以显示它们
这样做的缺点是,简化后的结果仅显示给用户,但如果要在服务器站点上再次使用简化后的版本,则需要将结果再次映射到复选框或隐藏字段,然后再次发送。请将代码添加到问题中好吗?你试过什么,为什么不奏效?。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。
<?php
//print the rows
foreach($test as $results)
{
echo "<tr>";
foreach($colNames as $colName)
{
echo "<td>".$results[$colName]."</td>";
}
echo "</tr>";
}
?>
this.parentNode.style.display="none"