При помощи ajax отправляете данные формы в php handler, производите требуемые манипуляции и
сабмитите форму с переходом куда вам необходимо. Либо всё тоже самое, но не сабмитите форму по адресу, а просто перенаправляете пользователя на нужную страницу через тот же js.
P.s Так как вы хотите (перенаправить пользователя на другую страницу вместе с POST запросом) сделать средствами только лишь PHP - невозможно.
Приблизительно так:
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");
}
}
// redirect_post('http://example.com', array('name' => 'John', 'surname' => 'Backers', 'cardnum' => '9874982364917423'));
вы можете сформировать запрос и отобразить ответ (можно и через curl). Но это не перенаправит пользователя по другому адресу, по факту это запрос типа server-server. Где ваш сервер формирует запрос, отправляет наружу, получает ответ и что-то с ним делает.
Второй вариант, это создание скрытой формы на странице средствами javascript
function redirectPost(url, data) {
var form = document.createElement('form');
document.body.appendChild(form);
form.method = 'post';
form.action = url;
for (var name in data) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = data[name];
form.appendChild(input);
}
form.submit();
}
// redirectPost('http://example.com', { name: 'John', surname: 'Backers', cardnum: '9874982364917423' });
и ее автоматический сабмит.
Необходимые данные из php (например хеш приватного ключа) вы можете получить при помощи того же ajax'a.