У меня есть веб-страница. Эта веб-страница перенаправляет пользователя к другой веб-странице, более или менее следующий путь:
<form method="post" action="anotherpage.php" id="myform">
<?php foreach($_GET as $key => $value){
echo "<input type='hidden' name='{$key}' value='{$value}' />";
} ?>
</form>
<script>
document.getElementById('myform').submit();
</script>
Ну, Вы видите, что я делаю передает ПОЛУЧИТЬ параметрические усилители в параметрические усилители POST. Не говорите мне, что это плохо, я знаю, что сам, и это не точно, что я действительно делаю, что важно, то, что я собираю данные от массива и пытаюсь отправить его другой странице по почте. Но если пользователю выключат JavaScript, то он не будет работать. Что я должен знать: Есть ли способ передать параметры POST посредством PHP, таким образом, перенаправление может быть сделано путь PHP (header('Location: anotherpage.php');
), также?
Для меня очень важно передать параметрические усилители по почте. Я не могу использовать $ _SESSION переменная, потому что веб-страница находится на другом домене, таким образом, $ _SESSION переменные отличаются.
Так или иначе мне просто нужен способ передать переменные POST с PHP ^^
Заранее спасибо!
Невозможно сделать это напрямую с сервера, так как данные POST должны отправляться браузером.
Но вы можете выбрать альтернативу:
Пример решения curl, код для запуска в домене 1:
//retrieve GET parameters as a string like arg1=0&arg1=56&argn=zz
$data = $_SERVER['QUERY_STRING'];
// Create a curl handle to domain 2
$ch = curl_init('http://www.domain2.com/target_script.php');
//configure a POST request with some options
curl_setopt($ch, CURLOPT_POST, true);
//put data to send
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//this option avoid retrieving HTTP response headers in answer
curl_setopt($ch, CURLOPT_HEADER, 0);
//we want to get result as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//if servers support is and you want result faster, allow compressed response
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
//execute request
$result = curl_exec($ch);
//show response form domain 2 to client if needed
echo $result;
Вот и все, браузер вашего клиента даже не увидит сервер домена 2, он получит только результат. знайте, хотите ли вы перенаправить клиента на домен, сделайте это с классическим заголовком http.
header('Location: http://www.domain2.com');
Конечно, это демонстрационный код с жестко запрограммированными значениями, и вам осталось 2 пункта:
Надеюсь, теперь это более понятно и поможет вам
Это возможно. В этой ситуации я бы использовал cURL:
$url = 'http://domain.com/get-post.php';
foreach($_GET as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
Нет. Вы не можете сделать перенаправление заголовка с помощью POST. У вас есть 2 варианта,
Вот пример,
<noscript>
<div>
<input type="submit" value="Continue"/>
</div>
</noscript>
Это покажет кнопку продолжения, если Javascript выключен, чтобы пользователь мог нажать на нее для продолжения.
Это можно сделать с помощью php cUrl lib.
Проверьте это http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html
Спасибо, Сураб