Intereting Posts
проверить соединение с функциями ssh2 в PHP Можете ли вы создать миграцию из существующей таблицы с помощью Doctrine? Cassandra + PHP + Thrift + извлекает плохую производительность нескольких строк Как вызвать метод класса? PHP – Загрузка нескольких изображений Пользовательский php.ini при выполнении php в качестве сценария оболочки Chmod для веб-приложения PHP Проверьте, находится ли пользователь на странице Рабочий пример реализации «Аутентификация на основе токенов» с использованием «JSON Web Token (т.е. JWT)» в PHP и MySQL? Вызов неопределенной функции session_register () Таинственный номер появляется выше HTML-кода, созданного Drupal, при первом посещении страницы Пароль обновления для Laravel проходит проверку, но не обновляет запись date_parse_from_format – временная метка unix Как получить одно значение из результата запроса в php Что такое сокращение PHP для: print var, если var существует

PHP – перенаправление и отправка данных через POST

У меня есть онлайн-шлюз, который требует отправки HTML-формы со скрытыми полями. Мне нужно сделать это с помощью PHP-скрипта без каких-либо HTML-форм (у меня есть данные для скрытых полей в БД)

Для этого отправьте данные через GET:

header('Location: http://www.provider.com/process.jsp?id=12345&name=John'); 

И для отправки данных через POST?

Solutions Collecting From Web of "PHP – перенаправление и отправка данных через POST"

Вы не можете сделать это с помощью PHP.

Как говорили другие, вы можете использовать cURL, но тогда PHP-код становится клиентом, а не браузером.

Если вы должны использовать POST, тогда единственный способ сделать это – создать заполненную форму с помощью PHP и использовать hook.onload для вызова javascript для отправки формы.

C.

вот пример обходного пути.

 function redirect_post($url, array $data) { ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> function closethisasap() { document.forms["redirectpost"].submit(); } </script> </head> <body onload="closethisasap();"> <form name="redirectpost" method="post" action="<? echo $url; ?>"> <?php if ( !is_null($data) ) { foreach ($data as $k => $v) { echo '<input type="hidden" name="' . $k . '" value="' . $v . '"> '; } } ?> </form> </body> </html> <?php exit; } 

Другое решение, если вы хотите избежать зависания и перенаправить браузер, как обычно, и имитировать вызов POST:

сохранить сообщение и сделать временную переадресацию:

 function post_redirect($url) { $_SESSION['post_data'] = $_POST; header('Location: ' . $url); } 

Затем всегда проверяйте переменную post_data :

 if (isset($_SESSION['post_data'])) { $_POST = $_SESSION['post_data']; $_SERVER['REQUEST_METHOD'] = 'POST'; unset($_SESSION['post_data']); } с if (isset($_SESSION['post_data'])) { $_POST = $_SESSION['post_data']; $_SERVER['REQUEST_METHOD'] = 'POST'; unset($_SESSION['post_data']); } 

Там будут некоторые отсутствующие компоненты, такие как apache_request_headers () не будут отображать заголовок содержимого POST и т. Д.

Он будет включать расширение cURL PHP.

 $ch = curl_init('http://www.provider.com/process.jsp'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "id=12345&name=John"); curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // RETURN THE CONTENTS OF THE CALL $resp = curl_exec($ch); 
 /** * Redirect with POST data. * * @param string $url URL. * @param array $post_data POST data. Example: array('foo' => 'var', 'id' => 123) * @param array $headers Optional. Extra headers to send. */ public function redirect_post($url, array $data, array $headers = null) { $params = array( 'http' => array( 'method' => 'POST', 'content' => http_build_query($data) ) ); if (!is_null($headers)) { $params['http']['header'] = ''; foreach ($headers as $k => $v) { $params['http']['header'] .= "$k: $v\n"; } } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if ($fp) { echo @stream_get_contents($fp); die(); } else { // Error throw new Exception("Error loading '$url', $php_errormsg"); } } 

Используйте curl для этого. Google для «curl php post», и вы найдете это: http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html .

Обратите внимание, что вы также можете использовать массив для параметра CURLOPT_POSTFIELDS. Из документов php.net:

Полные данные для отправки в HTTP-режиме «POST». Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь. Это может быть либо передано как строка с urlencoded, как «para1 = val1 & para2 = val2 & …», или как массив с именем поля в качестве ключа и данных поля как значение. Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data.

Альтернативно, установка переменной сеанса перед перенаправлением и проверка ее в целевом URL-адресе может решить эту проблему для меня.

Вы должны открыть сокет на сайт с помощью fsockopen и смоделировать HTTP-Post-Request. Google покажет вам множество фрагментов, как имитировать запрос.

Я боюсь, что вам понадобится CURL для этой задачи. Хороший простой способ сделать это здесь: http://davidwalsh.name/execute-http-post-php-curl

надеюсь, это поможет

Я использовал следующий код для сбора данных POST, который был отправлен из form.php, а затем связал его с URL-адресом, чтобы отправить его BACK в форму для исправлений валидации. Работает как шарм и фактически преобразует данные POST в данные GET.

 foreach($_POST as $key => $value) { $urlArray[] = $key."=".$value; } $urlString = implode("&", $urlArray); echo "Please <a href='form.php?".$urlString."'>go back</a>"; 

Старый пост, но вот как я справился с этим. Используя метод newms87:

 if($action == "redemption") { if($redemptionId != "") { $results = json_decode($rewards->redeemPoints($redemptionId)); if($results->success == true) { $redirectLocation = $GLOBALS['BASE_URL'] . 'rewards.phtml?a=redemptionComplete'; // put results in session and redirect back to same page passing an action paraameter $_SESSION['post_data'] = json_encode($results); header("Location:" . $redirectLocation); exit(); } } } elseif($action == "redemptionComplete") { // if data is in session pull it and unset it. if(isset($_SESSION['post_data'])) { $results = json_decode($_SESSION['post_data']); unset($_SESSION['post_data']); } // if you got here, you completed the redemption and reloaded the confirmation page. So redirect back to rewards.phtml page. else { $redirectLocation = $GLOBALS['BASE_URL'] . 'rewards.phtml'; header("Location:" . $redirectLocation); } } с if($action == "redemption") { if($redemptionId != "") { $results = json_decode($rewards->redeemPoints($redemptionId)); if($results->success == true) { $redirectLocation = $GLOBALS['BASE_URL'] . 'rewards.phtml?a=redemptionComplete'; // put results in session and redirect back to same page passing an action paraameter $_SESSION['post_data'] = json_encode($results); header("Location:" . $redirectLocation); exit(); } } } elseif($action == "redemptionComplete") { // if data is in session pull it and unset it. if(isset($_SESSION['post_data'])) { $results = json_decode($_SESSION['post_data']); unset($_SESSION['post_data']); } // if you got here, you completed the redemption and reloaded the confirmation page. So redirect back to rewards.phtml page. else { $redirectLocation = $GLOBALS['BASE_URL'] . 'rewards.phtml'; header("Location:" . $redirectLocation); } } 

Да, вы можете сделать это на PHP, например, в

Silex или Symfony3

использование подзапроса

 $postParams = array( 'email' => $request->get('email'), 'agree_terms' => $request->get('agree_terms'), ); $subRequest = Request::create('/register', 'POST', $postParams); return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false); 

Обходной путь, который отлично работает:

На исходной странице начните открытие сеанса и назначьте столько значений, сколько захотите. Затем выполните перемещение с помощью «заголовка»:

 <!DOCTYPE html> <html> <head> <?php session_start(); $_SESSION['val1'] = val1; ... $_SESSION['valn'] = valn; header('Location: http//Page-to-redirect-to'); ?> </head> </html> 

И затем, на большой странице:

 <!DOCTYPE html> <?php session_start(); ?> <html> ... <body> <?php if (isset($_SESSION['val1']) && ... && isset($_SESSION['valn'])) { YOUR CODE HERE based on $_SESSION['val1']...$_SESSION['valn'] values } ?> </body> </html> 

Нет необходимости в Javascript или JQuery. Удачи!