【问题标题】:Load more when scroll to bottom from database using GET variables- PHP/ Mysqli使用 GET 变量从数据库滚动到底部时加载更多 - PHP/Mysqli
【发布时间】:2017-07-17 00:00:17
【问题描述】:

我想在我的网页上加载前 10 个结果,然后使用加载更多按钮在同一页面上使用 AJAX 加载下一个 10 个结果。我的网页可以有两种类型的 URL。

1.  www.example.com/list.php?name=ABC&area=All
2.  www.example.com/list.php?name=ABC&area=BCD

如果有人手动键入 URL 并且名称和区域不匹配意味着名称或区域与数据库结果不匹配,那么他/她将被重定向到 error404.php。

脚本:

<script type="text/javascript">
    var track_page = 1;
    load_contents(track_page);

    $("#load_more_button").click(function (e) { 
        track_page++; 
        load_contents(track_page);
    });

    function load_contents(track_page){
        $('.animation_image').show();

        $.post( 'fetch_pages.php', {'page': track_page}, function(data){

            if(data.trim().length == 0){
                $("#load_more_button").text("You have reached end of the record!").prop("disabled", true);
            }

            $("#results").append(data);

            $('.animation_image').hide();
        });
    }
</script>

list.php

$_SESSION['name']=$_GET['name'];
$_SESSION['area']=$_GET['area'];

<div class="wrapper">
    <div id="results"></div>

    <button id="load_more_button"><img src="ajax-loader.gif"  class="animation_image" style="float:left;"> Load More</button>
</div>

Fetch_pages.php

include("db.php");
$item_per_page = 10;
$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);

$position = (($page_number-1) * $item_per_page);
$sort="id";
if(isset($_GET['sort'])&&($_GET['sort'])=='ASC'){
    $sort="price ASC";
}
elseif(isset($_GET['sort'])&&($_GET['sort'])=='DESC'){
    $sort="price DESC";
}
if($_SESSION['area']=='All'){
    $stmt = $mysqli->prepare("SELECT * from table where name= ? ORDER BY $sort LIMIT ?,?");
    $stmt->bind_param("sdd", $_SESSION['name'], $position, $item_per_page);
}
else{
    $stmt = $mysqli->prepare("SELECT * from table where name= ? AND area= ? ORDER BY $sort LIMIT ?,?");
    $stmt->bind_param("ssdd", $_SESSION['name'], $_SESSION['area'], $position, $item_per_page);
}
    $stmt->execute();
    $i=1;
    $res = $stmt->get_result();
    while($row4=mysqli_fetch_array($res)){
       ---------------
       ---------------
}

如果 URL 中没有可用的 GET 变量,上述脚本可以正常工作。但是如果我想根据 $_GET 变量加载页面内容,它会给出一个错误,即 $_GET 变量未定义。我需要在哪里定义这些变量。我也尝试在 fetch_pages.php 和 list.php 上定义 S_SESSION 变量,但它仍然给出错误。

最好的方法是什么?谢谢....

【问题讨论】:

    标签: javascript php jquery mysql


    【解决方案1】:

    在 php 中使用 $_POST 而不是 $_GET 或在 javascript 中通过 $.get() 发送。目前,您的 javascript 将数据作为 post 变量发送,因为调用方法 $.post() 将数据发送回服务器。

    【讨论】:

    • 在 javascript 中将 $.post() 更改为 $.get()。
    • 好的。改回来。然后在你的 php 中,在出错的那一行,使用 $_REQUEST 而不是 $_GET。这在两种情况下都适用。
    • 注意:未定义索引:第 18 行 C:\wamp\www\mysites\fetch_pages.php 中的区域
    • 这是因为 $_SESSION['area'] 尚未在 fetch_pages.php 中设置。您可以设置它,也可以在阅读之前使用 isset() 检查它是否存在。
    • 当我在 fetch_pages.php 中将 $_SESSION 更改为 $_REQUEST 并且在 bind_param 中我相应地更改时,会发生此错误......
    【解决方案2】:

    您没有在 javascript 中传递 GET 变量,您必须在 $.post 调用中提供 namearea 变量。

    您还使用了$.post,这使得变量可以通过 PHP 中的$_POST 使用。

    【讨论】:

    • 我没有足够的jquery知识...你能在这里输入正确的代码吗??
    【解决方案3】:

    像这样更改您的 list.php 以使用 postget 访问数据

    <?php
    $_SESSION['name']=$_REQUEST['name'];
    $_SESSION['area']=$_REQUEST['area'];
    ?>
    <div class="wrapper">
        <div id="results"></div>
    
        <button id="load_more_button"><img src="ajax-loader.gif"  class="animation_image" style="float:left;"> Load More</button>
    

    编辑

    如果你不必使用会话试试这个:

    <script type="text/javascript">
        var track_page = 1;
        load_contents(track_page);
    
        $("#load_more_button").click(function (e) { 
            track_page++; 
            load_contents(track_page);
        });
    
        function load_contents(track_page){
            $('.animation_image').show();
    
            $.post( 'fetch_pages.php', {'page': track_page,'name' : '<?=$_GET['name']?>',area:'<?=$_GET['area']?>'}, function(data){
    
                if(data.trim().length == 0){
                    $("#load_more_button").text("You have reached end of the record!").prop("disabled", true);
                }
    
                $("#results").append(data);
    
                $('.animation_image').hide();
            });
        }
    </script>
    

    Fetch_pages.php 中将 $_SESSION 更改为 $_POST

    【讨论】:

    • 我还检查了将直接值分配给 $_SESSION 而不是 GET、POST 和 REQUEST...。在这种情况下也不起作用...
    • 您开始会话了吗? session_start() 在您的文件中
    • 我之前没有启动过...但是即使在开始会话之后它也没有任何效果...
    • 我也试过在 fetch_pages.php 中将 $_SESSION 改成 $_REQUEST .....没有任何效果...
    • 有什么方法可以将我的 get 变量传递到脚本中,以便它可以用作 fetch_pages.php 中的 post 变量....??
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多