【问题标题】:How to load content with PHP $_SERVER['PHP_SELF'] and href如何使用 PHP $_SERVER['PHP_SELF'] 和 href 加载内容
【发布时间】:2014-04-23 03:37:11
【问题描述】:

大家好,我需要一些帮助:

我完全是 php 和 javascript 的菜鸟,我在这里遇到了一个小问题,我正在使用一个在左侧显示列表的网站,然后当我点击一个元素时,它会显示一个子元素然后当我单击子元素时,它会显示一个包含存储在 mysql 数据库中的信息的表,它可以完美运行,但显示的数据有时会显示为 5000 行,因此一直向下滚动 5000 行很烦人,所以我决定对结果进行分页,以便每页仅显示 100 个元素。

现在,当我单击链接以显示接下来的 100 行时,它会将我带到另一个页面,并且左侧的菜单消失了!

我正在使用类似的方法来浏览结果:

$centerPages = "";
$sub1 = $pn - 1;    
$sub2 = $pn - 2;    
$add1 = $pn + 1;    
$add2 = $pn + 2;

if ($pn == 1) {
    $centerPages .= '&nbsp; <span class="pagNumActive">' . $pn . '</span> &nbsp;';
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $add1 . '">' . $add1 . '</a> &nbsp;';

} 
else if ($pn == $lastPage) {
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $sub1 . '">' . $sub1 . '</a> &nbsp;';
    $centerPages .= '&nbsp; <span class="pagNumActive">' . $pn . '</span> &nbsp;';

}
 else if ($pn > 2 && $pn < ($lastPage - 1)) {
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $sub2 . '">' . $sub2 . '</a> &nbsp;';
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $sub1 . '">' . $sub1 . '</a> &nbsp;';
    $centerPages .= '&nbsp; <span class="pagNumActive">' . $pn . '</span> &nbsp;';
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $add1 . '">' . $add1 . '</a> &nbsp;';
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $add2 . '">' . $add2 . '</a> &nbsp;';

} 
else if ($pn > 1 && $pn < $lastPage) {
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $sub1 . '">' . $sub1 . '</a> &nbsp;';
    $centerPages .= '&nbsp; <span class="pagNumActive">' . $pn . '</span> &nbsp;';
    $centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?pn=' . $add1 . '">' . $add1 . '</a> &nbsp;';
}

我的猜测是,因为 next 和 back 链接是 &lt;a href&gt; 标签,它会加载一个显示接下来 100 行的新页面。

我怎样才能防止这种情况发生??

我尝试使用 jquery 添加 preventDefault();对于那些&lt;a href="' . $_SERVER['PHP_SELF'] 标签,它可以工作,但现在这些链接上什么都没有发生xD。

请帮帮我。

提前致谢。

【问题讨论】:

  • 如何处理左侧的链接?它们是您页面的一部分吗?你能做的就是把它们分开。使用框架或 AJAX。因此,当您单击这些链接时,在某些情况下您只返回表格并且只更改表格而不更改左侧的链接。
  • 是的,链接在同一页面中,这就是为什么当我点击下一个链接时它会更改页面并且链接消失,嗯,我必须使用 AJAX 和 jquery ???
  • 是的。似乎您的分页链接只会加载不包括链接的表格。您可以包含您的链接状态,例如您所在的页面,以便您知道在下一页加载时再次显示哪个页面。然后,如果您不想使用,请在所有页面中包含链接。 preventDefault() 将禁用元素的默认操作,这将忽略对它们的点击。

标签: javascript php html css


【解决方案1】:

我希望这个例子对你有所帮助。它不刷新网址。所以你的菜单链接被打开了

你可以像这样创建分页链接

$results = mysqli_query($connecDB,"SELECT COUNT(*) FROM paginate");
$get_total_rows = mysqli_fetch_array($results); //total records

//break total records into pages
$pages = ceil($get_total_rows[0]/$item_per_page);  

//create pagination
$pagination = '';
if($pages > 1)
{
    $pagination .= '<ul class="paginate">';
    for($i = 1; $i<$pages; $i++)
    {
        $pagination .= '<li><a href="#" class="paginate_click" id="'.$i.'-page">'.$i.'</a></li>';
    }
    $pagination .= '</ul>';
}

?>

这里是分页脚本

$(document).ready(function() {
    $("#results").load("fetch_pages.php", {'page':0}, function() {$("#1-page").addClass('active');});  //initial page number to load

    $(".paginate_click").click(function (e) {

        $("#results").prepend('<div class="loading-indication"><img src="ajax-loader.gif" /> Loading...</div>');

        var clicked_id = $(this).attr("id").split("-"); //ID of clicked element, split() to get page number.
        var page_num = parseInt(clicked_id[0]); //clicked_id[0] holds the page number we need

        $('.paginate_click').removeClass('active'); //remove any active class

        //post page number and load returned data into result element
        //notice (page_num-1), subtract 1 to get actual starting point
        $("#results").load("fetch_pages.php", {'page': (page_num-1)}, function(){

        });

        $(this).addClass('active'); //add active class to currently clicked element

        return false; //prevent going to herf link
    });
});

在这里获取页面

<?php
include("config.inc.php"); //include config file

//sanitize post value
$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);

//validate page number is really numaric
if(!is_numeric($page_number)){die('Invalid page number!');}

//get current starting point of records
$position = ($page_number * $item_per_page);

//Limit our results within a specified range.
$results = mysqli_query($connecDB,"SELECT id,name,message FROM paginate ORDER BY id DESC LIMIT $position, $item_per_page");

//output results from database
echo '<ul class="page_result">';
while($row = mysqli_fetch_array($results))
{
    echo '<li id="item_'.$row["id"].'">'.$row["id"].' <span class="page_name">'.$row["name"].'</span><span class="page_message">'.$row["message"].'</span></li>';
}
echo '</ul>';
?>

【讨论】:

  • 谢谢队友,我以前用过,但我仍然不知道如何让想法工作,例如,我有 3 个列表链接: list a list b list c Let´s假装我单击列表 a,然后显示产品,但是当我单击列表 b 链接时,出现相同的列表 a 产品。我是否必须对每个列表项进行查询?
猜你喜欢
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2014-05-06
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多