我写了一个简单的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?
答案 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才能正确调用它们