Вы можете использовать сеанс для хранения данных POST.
В настоящее время я использую код, как показано ниже. При загрузке первой страницы проверяются данные $ _POST. Если он содержит определенные значения уже в базе данных, он перенаправляет страницу на эти значения.
// This could be part of the same script as below, or a different script.
session_start();
if($_POST['my_value'] && valueExistsInMyDb($_POST['my_value'])) { // check my db to see if this is an existing value
$id = getIdOfMyValue($_POST['my_value']); // e.g. '4'
$_SESSION['POST'] = $_POST; // take ALL post data and save it in the session variable
header("location: your.php?myvalue=" . $id); // redirect to bookmarkable target page where $_GET variable matches what was posted.
exit(); // ensure no other code is executed in this script after header is issued.
}
Тогда ваш другой файл (или, может быть, даже и тот же файл) может это сделать:
// your.php?myvalue=4
if(isset($_SESSION) && array_key_exists('POST',$_SESSION)) {
$_POST = $_SESSION['POST']; // creates or overwrites your $_POST array with data from the session. The rest of your script won't be able to tell that it's not a real $_POST, which may or may not be what you want.
unset($_SESSION['POST']); // you probably want to remove the data from the session.
}
// now your myvalue=4 is stored in GET, and you can handle the rest of the POST data as you like
Я не знаю, если это лучшее решение, но до сих пор, кажется, работает для меня до сих пор. Я только что написал код несколько дней назад и еще не тестировал все аспекты.
Другой вариант - использовать HTML5 для изменения адресной строки. Не требуется перенаправление. Но недостатком является то, что, по-видимому, могут использовать только «современные браузеры Webkit».
перенаправить и отправить сразу? – vbrmnd