Как использовать PHP-включения без изменения URL-адреса?

Я написал простую 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-адрес в адресной строке?


person Harry12345    schedule 09.08.2013    source источник
comment
как насчет Javascript ??   -  person egig    schedule 09.08.2013
comment
Я на самом деле не знаю никакого Javascript, поэтому, если это не легко, я просто не буду беспокоиться   -  person Harry12345    schedule 09.08.2013


Ответы (4)


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>
person Laurence Frost    schedule 09.08.2013
comment
Ура, это именно то, что я хотел, и это такое простое решение, не требующее Javascript или Ajax! - person Harry12345; 09.08.2013

Либо придерживайтесь метода GET, либо используйте функциональность вашего сервера mod_rewrite, чтобы сделать более привлекательным URL-адрес, например: /page1

OR

Используйте метод POST и отправьте аргументы через элементы формы. Пример:

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

Получите доступ к значениям, используя $_POST вместо $_GET, очевидно.

person Cups    schedule 09.08.2013

вы можете создать 3 разных div на своей странице, затем, когда вы нажимаете на одну из этих кнопок, вы скрываете или показываете div на javascript. Вам нужно установить идентификаторы для каждого div, чтобы они правильно назывались

person Fernando Menzzano    schedule 09.08.2013

Вам нужно сделать новый запрос для обработки php-кода. Если проблема только с URL-адресом:

Вы можете сделать запрос ajax/iframe, чтобы сохранить тот же адрес:

Аякс

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>

включает.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 (mod_rewrite в apache2):

<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-адресе гуглить

person rogeriolino    schedule 09.08.2013