0

我编写了一个简单的 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

4 回答 4

1

要么坚持使用 GET 方法,然后使用你的服务器mod_rewrite功能来制作一个更好看的 url,例如:/page1

或者

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

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

显然,然后使用 $_POST 而不是 $_GET 访问这些值。

于 2013-08-09T13:41:19.283 回答
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>
于 2013-08-09T13:46:18.197 回答
0

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

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

阿贾克斯

索引.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>

包括.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>

或者您可以使用友好的 URL(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>

更多关于友好的 url谷歌搜索

于 2013-08-09T13:42:01.400 回答
0

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

于 2013-08-09T13:42:19.183 回答