Как сделать так, чтобы один и тот же файл входил в два разных файла, расположенных в разных каталогах, для перенаправления по одному и тому же конечному пути? - PullRequest
0 голосов
/ 12 января 2019

У меня есть файл logout.php, который находится в корневом каталоге и выглядит так

<?php
if(isset($_POST['logout'])){
    session_destroy();
    header('location: ../index.php');
}
?>
<form method="POST">
    <button name="logout" class="logout">Logout</button>
</form>

Эта кнопка включена в header.php, а header.php - это то, что на самом деле вызывает проблему, проблема выглядит так:

Есть два заголовочных файла, которые находятся в двух разных каталогах, один в корневой папке, а другой в подпапке /users/, и если вы видели код, вы уже можете предполагать, что кнопка выхода из системы выполняет свою функцию правильно каждый раз, когда вы находитесь в каталоге /users/, например. localhost/rootdirectory/users/dashboard.php но каждый раз, когда вы посещаете корневую папку и пытаетесь выйти из нее, она перенаправляет вас на один каталог вверх, ведя вас прямо на страницу индекса WAMP (в моем случае).

Теперь вы должны задаться вопросом, зачем мне использовать два разных заголовка, поэтому вот объяснение этому:

Содержимое внутри header.php одинаково в обоих файлах, но у меня есть его дубликат, потому что я нашел его единственным решением той же проблемы, что и у меня, когда я создавал header.php или точнее сразу после того, как я создал подпапку /users/ и попытался включить /rootfolder/header.php в /rootfolder/users/index.php.

То, что произошло здесь, похоже на то, что происходит сейчас с моей кнопкой выхода из системы, и основная причина, по которой я задаю этот вопрос, заключается в том, что я не могу создавать дубликаты каждый раз, когда сталкиваюсь с проблемой такого типа.

Когда я попытался включить /rootfolder/header.php в /rootfolder/users/index.php, я потерял связь с каждым файлом, связанным внутри заголовка, включая style.css

Прямо сейчас мы находимся в /rootfolder/users/index.php

<?php
    include '../header.php';
    include '../footer.php';
?>

и вот как /rootfolder/header.php выглядит

<?php
    session_start();
    //we link the connection file
    include "pagesetup/config.php";
    //we populate the database with tables and default data
    include "pagesetup/createtables.php";
    //we store the page title inside of a variable
    $get_title = mysqli_query($mysqli, "SELECT title FROM pageinfo");
    while($row = $get_title->fetch_assoc()){
        $page_title = $row['title'];
    }    
    //we unset the login and register sessions which are used to display the outcome
    //of the login/register attempt
    unset($_SESSION['login']);
    unset($_SESSION['register']);
?>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/style.css" />
        <script type="text/javascript" src="js/javascript.js"></script>
        <title>
            <?php echo $page_title;?>
        </title>
    </head...

В этой ситуации моя страница указателя выглядит следующим образом, и у меня нет доступа к любому другому файлу, связанному с ним (включая самый важный config.php) enter image description here

И единственный способ применить файл style.css к /rootfolder/users/index.php - это скопировать header.php внутри /rootfolder/users/ и затем изменить его пути следующим образом

<?php
    session_start();
    //log in protection
    if(!isset($_SESSION['loggedin'])){
        header('location:../index.php');
    }
    //we link the connection file
    include "../pagesetup/config.php";
    //we populate the database with tables and default data
    include "../pagesetup/createtables.php";
    //we store the page title inside of a variable
    $get_title = mysqli_query($mysqli, "SELECT title FROM pageinfo");
    while($row = $get_title->fetch_assoc()){
        $page_title = $row['title'];
    }    
    //we unset the login and register sessions which are used to display the outcome
    //of the login/register attempt
    unset($_SESSION['login']);
    unset($_SESSION['register']);
?>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="../css/style.css" />
        <script type="text/javascript" src="../js/javascript.js"></script>
        <title>
            <?php echo $page_title;?>
        </title>
    </head...

и затем конечно изменить путь в /rootfolder/users/index.php тоже

<?php
    include 'header.php';
    include '../footer.php';
?>

Этот вопрос может быть немного не по теме, но я не смог найти правильный способ его задать, поэтому, если вы понимаете мою проблему и имеете что-то, что поможет мне научиться работать с каталогами, я был бы более чем рад услышать это.

Мир!

1 Ответ

0 голосов
/ 13 января 2019

Давайте упростим это:
Проверьте, существует ли сеанс, удалите его, если он есть, затем перенаправьте на другую страницу.

<?php
   session_start();
   session_destroy();
   exit(header("Location: ../index.php"));
?>

Сохраните этот файл как отдельный скрипт "logout.php", и вместо использования кнопки просто укажите ссылку <a href="logout.php">logout</a> на любой / всех соответствующих страницах. Если вы действительно не хотите иметь кнопку ...


Добавлено:

  1. Есть ли на страницах правильное действие в форме?
    Код, который вы показываете для вашего logout.php файл включает в себя <form method="POST">: есть нет action="logout.php" чтобы отправить вас в этот (отдельный) файл. остальной код, который вы показываете, является <head></head> областью страниц), который не отображает HTML формы вашей кнопки.
  2. Обе страницы должны отправлять пользователя (одинаково, отдельно) logoff.php файл.
    Исходя из вашего вопроса, у вас есть вывод logoff.php собирается в 2 разных местах. Если вы отправите оба в один и тот же файл, тогда вам нужно только позаботиться о том, чтобы ваш logoff.php скрипт имел правильный путь к Location: ../index. Если index.php и logoff.php находятся в каталог того же уровня, тогда правильный перенаправленный путь будет: Location: index.php.

Таким образом, если посетитель вашего сайта нажимает на кнопку выхода (кнопка или ссылка), он должен быть отправлен в отдельный скрипт logoff.php. Этот скрипт, в свою очередь, «перенаправляет» (или отправляет) их на страницу index.php.
Поскольку эти две страницы находятся в разных каталогах, вам придется использовать другой путь для отправки пользователя в сценарий logoff.php. Пример:

  • Ссылка для localhost/rootdirectory/users/dashboard.php одна директория выше root, ссылка должна быть ../logout.php.
  • Ссылка на корневом уровне должна быть logout.php.
  • Ссылка на перенаправление внутри logout.php остается постоянной как index.php.
...