Ваши варианты:
- Придерживайтесь GET, но нажимайте скрипт / функцию перенаправления, сохраняйте значение в $ _SESSION и перенаправляйте обратно на страницу без данных в URL.
- ПОЧТА форма
- Используйте куки вместо $ _SESSION (blech)
[править]
Разумный общий код - должен работать практически на любой странице
<?
session_start();
if ( count ( $_GET ) )
{
$_SESSION['__get'] = $_GET;
header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
exit();
}
elseif ( array_key_exists( '__get', $_SESSION ) && count( $_SESSION['__get'] ) )
{
$_GET = $_SESSION['__get'];
$_SESSION['__get'] = array();
}
var_dump ( $_GET );
Примечание: переменная var_dump внизу будет показывать $ _GET на странице, которая не имеет параметров URL.
Примечание: это один выстрел. вторая перезагрузка скрипта покажет, что $ _GET очищен. Если вы не хотите этого, удалите $_SESSION['__get'] = array();
в блоке elseif
.
[править]
Еще лучший код с функциями и областью поиска GET для каждой страницы (используя $_SERVER['PHP_SELF']
)
Тип содержимого: text / plain предназначен для облегчения чтения var_dump, ничего более.
<?
// no-get.php
session_start();
header( 'content-type: text/plain' );
noGet();
var_dump( $_GET );
forgetNoGetPage();
var_dump( $_GET );
/**
* noGet - saves $_GET values to $_SESSION and redirects to same page
* @requires Session to be started
*/
function noGet()
{
// check count to see if there are fresh variables being passed to the script
// if there are, we overwrite any existing page variables in the session
// if we didn't do this, we could never pass new variables on the url to our scripts
if ( count ( $_GET ) )
{
$_SESSION['__get'][$_SERVER['PHP_SELF']] = $_GET;
header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
exit();
}
elseif (
array_key_exists( '__get', $_SESSION ) &&
array_key_exists( $_SERVER['PHP_SELF'], $_SESSION['__get'] ) &&
count( $_SESSION['__get'][$_SERVER['PHP_SELF']] )
)
{
$_GET = $_SESSION['__get'][$_SERVER['PHP_SELF']];
}
}
/**
* forgetNoGetPage - removes a page's $_GET values from the session and optionally redirects to the current page.
* @param String The page to remove entries for
* @param Bool Redirect after remove?
*/
function forgetNoGetPage( $page = null, $redirect = false )
{
if ( $page === null )
{
$page = $_SERVER['PHP_SELF'];
}
unset( $_SESSION['__get'][$page] );
if ( $redirect )
{
header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
}
}