PHP - 搜索结果不是分页

时间:2016-11-10 22:22:39

标签: php mysql search pagination

如果在数据库中找到的项目超过10个,我正在尝试将搜索结果分页。出于某种原因,即使代码识别出有超过10个项目并为后续页面创建链接,所有搜索结果仅列在第一页上。有人能帮忙吗?代码如下:

for($i = 0; $i < $terms_count; $i++)
{
    $search_terms_array[$i] = trim($search_terms_array[$i]);
    ${"query".$i} = $this->mysqli_link->query("SELECT prod_id, prod_tags FROM table WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'");
    if(${"query".$i}->num_rows < 1)
    {
        $zerocount++;
    }
    else
    {
        $rows = array();
        while($row = ${"query".$i}->fetch_array())
        {
            $rows[] = $row;
        }
        foreach($rows as $row)
        {
            $search_id_results[] = $row['prod_id'];
        }
    }
}
if($zerocount == $terms_count)
{
    echo $this->err_handle->fetch_error_text("search_terms_0_results");
    return;
}
else
{
    $search_results = array_values(array_unique($search_id_results));
    $search_results_count = count($search_results);
    $search_page_count = ceil($search_results_count / 10);
    $search_page_first_result = ($search_page - 1) * 10;
    echo '<p>Go to page: ';
    for($i = 1; $i <= $search_page_count; $i++)
    {
        if($i == $search_page)
        {
            echo "&nbsp;<strong>" . $i . "</strong>";
        }
        else
        {
            echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>';
        }
    }
    echo '</p><p>&nbsp;</p><p>&nbsp;</p>';
    for($i = 0; $i < $search_results_count; $i++)
    {
        $query = $this->mysqli_link->query("SELECT * FROM table WHERE prod_id='" . $search_results[$i] . "' LIMIT " . $search_page_first_result . ", 10");
        while($row = $query->fetch_array())
        {
        echo "<h4><a href=\"index.php?section=products&amp;subsection=" . $row['prod_category'] . "&amp;prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h4></a><p><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\" width=\"150\" height=\"200\" /></p><p>Price: £" . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p><input type=\"number\" name=\"prod_qty\" maxlength=\"2\" /><input type=\"submit\" name=\"add_to_basket\" value=\"Add To Basket\" /></form></p><p>&nbsp;</p><p>&nbsp;</p>";
        }
    }
    echo '<p>Go to page: ';
    for($i = 1; $i <= $search_page_count; $i++)
    {
        if($i == $search_page)
        {
            echo "&nbsp;<strong>" . $i . "</strong>";
        }
        else
        {
            echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>';
        }
    }
    echo '</p><p>&nbsp;</p><p>&nbsp;</p>';
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决这个问题的方法,现在完整的功能如下:

public function product_search($search_terms, $search_page, $search_flag_check)
{
    if($search_flag_check == "invalid")
    {
        echo $this->err_handle->fetch_error_text("invalid_ns_term");
        return;
    }
    if($search_terms == "")
    {
        echo $this->err_handle->fetch_error_text("no_search_string");
        return;
    }
    $search_terms = htmlspecialchars($search_terms);
    $search_terms = $this->mysqli_link->real_escape_string(filter_var($search_terms, FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_FLAG_NO_ENCODE_QUOTES));
    $search_terms_array = explode(" ", $search_terms);
    $terms_count = count($search_terms_array);
    $zerocount = 0;
    $search_id_results = array();
    for($i = 0; $i < $terms_count; $i++)
    {
        $search_terms_array[$i] = trim($search_terms_array[$i]);
        ${"query".$i} = $this->mysqli_link->query("SELECT prod_id, prod_tags FROM table WHERE prod_tags LIKE '%" . $search_terms_array[$i] . "%'");
        if(${"query".$i}->num_rows < 1)
        {
            $zerocount++;
        }
        else
        {
            $rows = array();
            while($row = ${"query".$i}->fetch_array())
            {
                $rows[] = $row;
            }
            foreach($rows as $row)
            {
                $search_id_results[] = $row['prod_id'];
            }
        }
    }
    if($zerocount == $terms_count)
    {
        echo $this->err_handle->fetch_error_text("search_terms_0_results");
        return;
    }
    else
    {
        $search_results = array_values(array_unique($search_id_results));
        $search_results_count = count($search_results);
        $search_page_count = ceil($search_results_count / 10);
        $search_page_first_result = ($search_page - 1) * 10;
        $search_page_results_limit = 10;
        if($search_page_first_result < 1)
        {
            $search_page_first_result = 1;
        }
        echo '<p>Go to page: ';
        for($i = 1; $i <= $search_page_count; $i++)
        {
            if($i == $search_page)
            {
                echo "&nbsp;<strong>" . $i . "</strong>";
            }
            else
            {
                echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>';
            }
        }
        echo '</p><p>&nbsp;</p><p>&nbsp;</p>';
        $search_page_upper_limit = $search_page_first_result + 9;
        if(array_key_exists($search_page_upper_limit, $search_results))
        {
            $search_results_limit = $search_page_first_result + $search_page_results_limit;
        }
        else
        {
            end($search_results);
            $search_results_limit = key($search_results);
            reset($search_results);
        }
        for($i = $search_page_first_result; $i <= $search_results_limit; $i++)
        {
            $query2 = $this->mysqli_link->query("SELECT * FROM table WHERE prod_id='" . $search_results[$i] . "'");
            $row = $query2->fetch_array();

            echo "<h4><a href=\"index.php?section=products&amp;subsection=" . $row['prod_category'] . "&amp;prodid=" . $row['prod_id'] . "\">" . $row['prod_name'] . "</h4></a><p><img src=\"includes/images/product_images/" . $row['prod_category'] . "/" . $row['prod_pic_filename'] . "\" alt=\"\" width=\"150\" height=\"200\" /></p><p>Price: £" . $row['prod_price'] . "</p><p>" . $row['prod_code'] . "</p><input type=\"number\" name=\"prod_qty\" maxlength=\"2\" /><input type=\"submit\" name=\"add_to_basket\" value=\"Add To Basket\" /></form></p><p>&nbsp;</p><p>&nbsp;</p>";

        }
        echo '<p>Go to page: ';
        for($i = 1; $i <= $search_page_count; $i++)
        {
            if($i == $search_page)
            {
                echo "&nbsp;<strong>" . $i . "</strong>";
            }
            else
            {
                echo '&nbsp;<a href="index.php?section=products&amp;action=search&amp;page=' . $i . '">' . $i . '</a>';
            }
        }
        echo '</p><p>&nbsp;</p><p>&nbsp;</p>';
    }
}

我花了一点思考,我即将放弃,但后来我考虑使用数组键来计算每个搜索页面的限制,并在相关的PHP数组函数上进行一些谷歌搜索后,它们全部落到了位置很好。 我知道代码现在可能不是很整洁,可能有一些方法可以优化/改进它,但是暂时它可以完成这项任务。