Одна и та же страница снова и снова, разный контент, один и тот же URL - PullRequest
1 голос
/ 07 мая 2011

У меня 7 разных страниц.Все страницы одинаковы с точки зрения макета, но различаются с точки зрения содержания.Содержимое предоставляется базой данных, в зависимости от того, на что нажимают пользователи.
Я понял, что вы должны передать переменную, используя URL-адрес, и таким образом определить, какой контент загружать, верно?

Итак, это мой пункт меню:
<a id="menupag" class="item1" href="index.php?page=groups?group1">

Это мой индекс:

<div class="content">
    <?php 
        include_once ('content/'.$_GET['page'].'.php'); 
    ?>
</div>

Но по какой-то причине, когда я нажимаю наВ этом пункте меню появляется следующее сообщение:

Warning: include_once(content/groups?group1.php): failed to open stream: No such file or directory in httpd.www/new/index.php on line 32 

Что мне нужно сделать, чтобы позволить php игнорировать последнюю часть URL-адреса (эта часть используется только для определения того, какие данные должна возвращать база данных)и просто послушать index.php?page=groups?

Ответы [ 3 ]

6 голосов
/ 07 мая 2011

Вы передаете параметры в URL неверным образом:

Вы должны изменить его на:

<a id="menupag" class="item1" href="index.php?page=groups&group=group1">

, чтобы вы имели в $_GET суперглобальные два значения:

$_GET['page'];  // value: groups
$_GET['group']; // value: group1

Однако использование:

include_once ('content/'.$_GET['page'].'.php');

абсолютно небезопасно.Лучшее решение:

$allow = array('groups', 'about', 'users');
$page = in_array($_GET['page'], $allow) ? $_GET['page'] : 'default';

include_once ('content/'.$page.'.php');
4 голосов
/ 07 мая 2011

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

$validPages = array("groups", "home");
if (in_array($_GET['page'], $validPages)
{
    $include = $_GET['page'];
}
else
{
    $include = "home"; //Your default
}

<div class="content">
    <?php 
        include_once ('content/'.$include.'.php'); 
    ?>
</div>

В ответ на ваш вопрос строка запроса выглядит недействительной.Разве это не должно быть index.php?page=groups&group=group1?

Если нет, то вам нужно проверить вопросительный знак, выполнив:

$include = explode('?', $include);
$include = $include[0];
1 голос
/ 07 мая 2011

Не очень хороший способ использования

<a id="menupag" class="item1" href="index.php?page=groups?group1">

Используйте как

<a id="menupag" class="item1" href="index.php?page=groups&varame=group1">

В противном случае

$page = array_shift(explode('?' ,$_GET['page']));

Или

$page = explode('?' ,$_GET['page']);
// use $page[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...