繁体   English   中英

PHP使用$ _GET按照从URL检索的顺序加载更多结果

[英]PHP Load more results in the order as retrieved from the url using $_GET

我试图获取所有已加载的项目(单击“加载更多”后),然后根据之前提交的过滤器设置进行整理。 我使用GET提交表单时,所有设置都显示在url上

由于某种原因,提交表单并单击加载更多后,我无法使用GET从URL中检索设置。.知道为什么吗?

该查询对所有结果进行排序:

<div class="main_page">
    <?php

    $res = mysql_query("SELECT * FROM posts WHERE ".$search_query." ".$lowest_price." ".$highest_price." ".$ad_order." ".$limit."");

    if($res && mysql_num_rows($res) > 0){
        while($row = mysql_fetch_assoc($res)){
            $date = $row['date']; 
        }
        echo '<div class="ad_display" id="'.$date.'">blabla</div>';
    }

在loadmore.php中,有完全相同的div,但它的排序方式如下:

$res = mysql_query("SELECT * FROM posts WHERE `date` < '".mysql_real_escape_string($_GET['id'])."' ORDER BY `date` DESC LIMIT 10");

当然还有加载更多按钮脚本:

<script type="text/javascript">
   $(document).ready(function(){
    $(".load_more").click(function (){
        $('.load_more').html('<img src="images/ajax-loader.gif" />');
        $.ajax({
            url: "loadmore.php?id=" + $(".ad_display:last").attr("id"),
            success: function(html){
            if(html){
                $(".main_page").append(html);
                $('.load_more').html('Load More');
            }else{
                $('.load_more').replaceWith('No more posts');
            }
        }
    });
    });
});
</script>

<button class="load_more">Load More</button>

任何帮助深表感谢!

更新:

if(isset($_GET['search'])){
    $searchq = $_GET['search'];
    $searchq = sanitize(preg_replace("#[^0-9a-z]#i","",$searchq));
    $search_query = "AND (title LIKE '%".$searchq."%' OR description LIKE '%".$searchq."%')";
}
$res = mysql_query("SELECT * FROM posts WHERE `date` < '".mysql_real_escape_string($_GET['id'])."' ORDER BY `date` DESC LIMIT 10");

loadmore.php的上一行中,您只有一个静态的静态声明语句: ORDER BY date DESC

您提供的代码不说清楚,但我相信$ad_order包含您所使用的主网页上订购您想要中使用排序loadmore.php 但是,这是根据查询字符串计算得出的,因此您需要将值传递到loadmore.php并在其中复制代码。 例如,如果您的主页包含以下内容:

// main-page.php?order1=X&order2=Y

$ad_order = "Some kind of computation with the values from the query string";

然后,您还需要在loadmore.php包含该代码,并且需要修改两个脚本,如下所示...

// loadmore.php

$ad_order = "The same computation with values from the query string";

$res = mysql_query("SELECT * FROM posts WHERE `date` < '".mysql_real_escape_string($_GET['id'])."' " . $ad_order . " LIMIT 10")

...和这个...

// Loading function in JavaScript

<script type="text/javascript">
    $(document).ready(function(){
        $(".load_more").click(function (){
            $('.load_more').html('<img src="images/ajax-loader.gif" />');
            $.ajax({
                url: "loadmore.php?order1=<?=$_GET['order1'];?>&order2=<?=$_GET['order2'];?>&id=" + $(".ad_display:last").attr("id"),
            }
        });
    });
});
</script>

这是该解决方案应该是什么样一个通用的例子-有没有足够的细节在你的问题对我来说是精确的,所以你需要改变变量名和$ad_order代码,使其与你的脚本工作。

而且,正如Second Rikudo所说,您的代码容易受到SQL注入的攻击。 您应该阅读链接的文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM