如何使用PHP包括而不更改URL?

时间:2013-08-09 13:32:50

标签: php html php-include

我写了一个简单的php页面,当你点击其中一个链接时,它包含一个不同的php文件,从而改变了内容。下面是我到目前为止的代码,唯一的问题是,每次单击链接时,URL都会更改为index.php?page = page1,这看起来不太好。

<html>
<head>
<title> PHP Includes </title>
</head>
<body>
<h1> This is the home page </h1>
<ul>
    <li><a href="includes.php?page=page1">Page1</a> </li>
    <li><a href="includes.php?page=page2">Page2</a></li>
    <li><a href="includes.php?page=page3">Page3</a></li>
 </ul>
</body>
</html>


<div style='width:300px; height: 200px; border: 1px solid #000;'>

<?php
error_reporting(E_ALL ^ E_NOTICE);

$page = $_GET['page'];
$pages = array('page1', 'page2', 'page3');
if (!empty($page)) {
    if(in_array($page,$pages)) {
        $page .= '.php';
        include($page);
    }
    else {
        echo 'Page not found. Return
        <a href="includes.php">home</a>';
    }
}
else {
    include('page1.php');
}
?>
</div>

我想知道是否有办法做同样的事情(只是更改内容),而不更改地址栏中的URL?

4 个答案:

答案 0 :(得分:1)

坚持使用GET方法,并使用您的服务器mod_rewrite功能来制作更好看的网址,例如:/page1

OR

使用POST方法并通过表单元素发送参数。例如:

<form action= '' method = POST>
<select name=page>
<option value=page1>Page 1</option>
</option>
<input type=submit />
</form>

显然,使用$ _POST代替$ _GET访问值。

答案 1 :(得分:1)

PHP正在重新加载自己的页面,并引用了要添加的内容。 $ _GET方法是执行此操作的自然方法,但还有两个其他选项需要考虑。

1)使用会话变量来引用要加载的页面。 2)使用AJAX,以便永远不会重新加载页面。相反,您可以通过AJAX将新内容加载到页面中。

如果你想进入会话变量路由,那么这样的事情就可以了。

<?php
  session_start();

  if($_GET['page'])
  {
    // set session variable
    $_SESSION['page'] = $_GET['page'];
    // redirect to hide URL change
    header('Location: includes.php');
  }
?>

<html>
<head>
<title> PHP Includes </title>
</head>
<body>
<h1> This is the home page </h1>
<ul>
    <li><a href="includes.php?page=page1">Page1</a> </li>
    <li><a href="includes.php?page=page2">Page2</a></li>
    <li><a href="includes.php?page=page3">Page3</a></li>
 </ul>
</body>
</html>


<div style='width:300px; height: 200px; border: 1px solid #000;'>

<?php
error_reporting(E_ALL ^ E_NOTICE);

$page = $_SESSION['page'];
$pages = array('page1', 'page2', 'page3');
if (!empty($page)) {
    if(in_array($page,$pages)) {
        $page .= '.php';
        include($page);
    }
    else {
        echo 'Page not found. Return
        <a href="includes.php">home</a>';
    }
}
else {
    include('page1.php');
}
?>
</div>

答案 2 :(得分:0)

你需要提出一个新的请求来处理php代码。如果问题仅与URL地址有关:

您可以发出ajax / iframe请求以保持相同的地址:

<强>的Ajax

的index.php

<html>
<head>
    <title> PHP Includes </title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script type="text/javascript">
        function loadContent(page) {
            $.ajax({
                url: "includes.php?page=" + page,
                complete: function(response) {
                    $('#content').html(response);
                }
            });
        }
    </script>
</head>
<body>
    <h1> This is the home page </h1>
    <ul>
        <li><a href="javascript:loadContent('page1')">Page1</a></li>
        <li><a href="javascript:loadContent('page2')">Page2</a></li>
        <li><a href="javascript:loadContent('page3')">Page3</a></li>
    </ul>
    <div id="content" style='width:300px; height: 200px; border: 1px solid #000;'></div>
    <script type="text/javascript">
        // loading default page
        loadContent('page1');
    </script>
</body>
</html>

includes.php

<?php
error_reporting(E_ALL ^ E_NOTICE);

$page = $_GET['page'];
$pages = array('page1', 'page2', 'page3');
if (!empty($page)) {
    if(in_array($page,$pages)) {
        $page .= '.php';
        include($page);
    } else {
        echo 'Page not found.
    }
} else {
    include('page1.php');
}
?>

iframe(不使用javascript)

<li><a href="includes.php?page=page1" target="iframe_id">Page1</a></li>

或者您可以使用友好网址(apache2中的mod_rewrite):

<li><a href="includes/page1">Page1</a></li>
<li><a href="includes/page2">Page2</a></li>
<li><a href="includes/page3">Page3</a></li>

有关友好网址的更多信息googling

答案 3 :(得分:0)

您可以在页面上创建3个不同的div,然后,当您单击其中一个按钮时,您可以在javascript上隐藏ore show divs。您需要为每个div设置ID才能正确调用它们