多次搜索功能returns相同的结果
Search function returns the same result multiple times
我正在尝试在 PHP 中创建搜索功能,但遇到了一个小问题。当我输入一个搜索词时,我得到了预期的结果(单条记录,列出了单个搜索结果),但是当我输入 2 个或更多有效搜索词时,我得到了多次列出的相同记录。有人可以指出我哪里出错了吗?
public function product_search($search_terms)
{
$search_terms = htmlspecialchars($search_terms);
$search_terms = stripslashes($search_terms);
$search_terms_array = explode(" ", $search_terms);
$terms_count = count($search_terms_array);
$zerocount = 0;
for($i = 0; $i < $terms_count; $i++)
{
$search_terms_array = trim($search_terms_array[$i]);
${"query".$i} = $this->mysqli_link->query("SELECT * FROM sjs_product_list WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'");
if(${"query".$i}->num_rows < 1)
{
$zerocount++;
}
else
{
while($row = ${"query".$i}->fetch_array())
{
$rows[] = $row;
}
foreach($rows as $row)
{
echo "<h3><a href=\"index.php?section=products&subsection=" . $row['prod_category'] . "&prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h3></a><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\"/><p>Price: " . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p>";
}
}
}
if($zerocount == $terms_count)
{
echo "<h3>Your search terms returned 0 results. Please try using different search terms.";
}
}
改变
$search_terms_array = trim($search_terms_array[$i]);
到
$search_terms_array[$i] = trim($search_terms_array[$i]);
您只是用第一个元素替换了整个数组。然后当你在此之后使用 $search_terms_array[$i]
时,你只是得到了这个字符串的第 i
个字符。
另一个问题:您没有在每次循环中都清除 $rows
数组。放:
$rows = array();
之前
while ($row = ${"query".$i}->fetch_array())
您在循环内打印整个 $rows
数组,因此每次您也打印前一次迭代的行,即使它们已经打印过。
在您的代码中替换以下两行:-
<?php
$search_key = trim($search_terms_array[$i]);
${"query".$i} = $this->mysqli_link->query("SELECT * FROM sjs_product_list WHERE prod_tags LIKE '%" . $search_key . "%'");
?>
我正在尝试在 PHP 中创建搜索功能,但遇到了一个小问题。当我输入一个搜索词时,我得到了预期的结果(单条记录,列出了单个搜索结果),但是当我输入 2 个或更多有效搜索词时,我得到了多次列出的相同记录。有人可以指出我哪里出错了吗?
public function product_search($search_terms)
{
$search_terms = htmlspecialchars($search_terms);
$search_terms = stripslashes($search_terms);
$search_terms_array = explode(" ", $search_terms);
$terms_count = count($search_terms_array);
$zerocount = 0;
for($i = 0; $i < $terms_count; $i++)
{
$search_terms_array = trim($search_terms_array[$i]);
${"query".$i} = $this->mysqli_link->query("SELECT * FROM sjs_product_list WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'");
if(${"query".$i}->num_rows < 1)
{
$zerocount++;
}
else
{
while($row = ${"query".$i}->fetch_array())
{
$rows[] = $row;
}
foreach($rows as $row)
{
echo "<h3><a href=\"index.php?section=products&subsection=" . $row['prod_category'] . "&prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h3></a><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\"/><p>Price: " . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p>";
}
}
}
if($zerocount == $terms_count)
{
echo "<h3>Your search terms returned 0 results. Please try using different search terms.";
}
}
改变
$search_terms_array = trim($search_terms_array[$i]);
到
$search_terms_array[$i] = trim($search_terms_array[$i]);
您只是用第一个元素替换了整个数组。然后当你在此之后使用 $search_terms_array[$i]
时,你只是得到了这个字符串的第 i
个字符。
另一个问题:您没有在每次循环中都清除 $rows
数组。放:
$rows = array();
之前
while ($row = ${"query".$i}->fetch_array())
您在循环内打印整个 $rows
数组,因此每次您也打印前一次迭代的行,即使它们已经打印过。
在您的代码中替换以下两行:-
<?php
$search_key = trim($search_terms_array[$i]);
${"query".$i} = $this->mysqli_link->query("SELECT * FROM sjs_product_list WHERE prod_tags LIKE '%" . $search_key . "%'");
?>