Я знаю, что этот вопрос задавался много раз, но я всегда находил разные и неудовлетворительные ответы ...
Итак, в последний раз (я надеюсь), как я могу перенаправить на другой? страницы путем отправки HTTP POST запросов?
Это действительно распространенная вещь, например, когда я хочу отправить массив, который не должен существовать после этого запроса, или когда Я хочу заполнить недействительную форму входа в систему старыми данными (поскольку GET слишком небезопасен для таких действий)
- Первый совет, который я обычно нахожу, - это использовать cURL или file_get_contents , но проблема этих методов в том, что они не позволяют использовать относительные URL, поэтому я должен определить константу, содержащую комбинацию $ _ SERVER переменные, которые позволяют мне использовать их в любом случае. Но так как мне нужно отправлять HTTP POST запросы из разных мест на мой веб-сайт, и нет способа автоматически включать файл определения в каждый php на моем веб-сайте, я должен переписать одно и то же определение каждый раз, когда мне нужен относительный путь
- Второй совет использует HTML форму , но он требует ввода данных пользователем и (что менее важно) это не такая удобочитаемая вещь
Я бы хотел что-то вроде header("Location: ..?user=admin")
, но вместо ?user=admin
, который отправляет user => admin в GET , способ отправить user => admin в POST
РЕДАКТИРОВАТЬ: пример
index. php ----- -----> data. php (форма входа) (не отображается, просто php)
, если я допущу ошибку в индексе . php, data. php отправляет обратно правильные данные в индекс . php, чтобы пользователь мог исправить свои неправильные записи, не переписывая все.
Но с Форма в данных. php пользователь будет нажимать отправить еще раз после отправки формы ...
РЕДАКТИРОВАТЬ # 2:
Даже используя cURL Я не могу получить никакого полезного результата
//data.php
<?php
define("URL", "http://" . $_SERVER["HTTP_HOST"] . rtrim(dirname($_SERVER["PHP_SELF"]), "/\\"));
$new = array();
//adding variables to $new
$new['first'] = 1;
$new['second'] = 2;
function head($url)
{
$url = URL . $url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, count($GLOBALS['new'])); //number of POST data
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($GLOBALS['new'])); //POST data
if(!curl_exec($curl)) header("Location: .?error=curl");
curl_close($curl);
header("Location: $url");
}
head(".?result=success");
//index.php
<?= count($_POST); //this should be 1 ($new array)?>
Я всегда получаю вывод: 0 вместо 1 в индексе. php.