Enviando publicação para database, redirecionando para paypal

Estou tentando enviar dados do formulário para o database, em seguida, enviar o cliente para o paypal, que usará IPN para enviar uma resposta de volta.

Agora eu tenho o formulário que envia para o database, eu tenho o IPN trabalhando, meu problema é a parte de redirecionamento. Quero que tudo seja feito com o clique de um botão …

O meu formulário apenas se envia de volta para a página atual onde ele valida dados e adiciona ao database. Não consigo usar o header porque os dados já são enviados para o header.

Quais são as minhas opções / soluções. A solução mais simples seria melhor, mas estou aberta a qualquer coisa neste momento.

Para uma tarefa tão simples, você pensaria que haveria uma solução simples …

Aqui está o meu código que imprime o formulário:

function display_form() { ?> 
<form action="" method="post">
no_errors()) { $this->addto_db(); ?>
no_errors()) { $this->prepare_fields('saved'); } else { $this->prepare_fields(); }?>
<?php }

Atualização: Aqui está um exemplo do que estou tentando fazer https://stackoverflow.com/a/6753281/1445460

Solutions Collecting From Web of "Enviando publicação para database, redirecionando para paypal"

Não tenho certeza de como eu encontrei essa questão um ano depois, mas como não é atendida …

Em vez de enviar o formulário e redirect para o Paypal, você pode ter o URL do paypal como ação do seu formulário, mas use o Ajax para salvar os dados do formulário antes que o formulário seja enviado para o Paypal. Você também pode usar a resposta Ajax para preparar o formulário antes da submissão, por exemplo, preenchendo alguns campos ocultos

Aqui está um exemplo:

myform.php :

 
...other form fields...

saveform.php : processa o pedido do Ajax e retorna uma resposta que pode ser usada para manipular o formulário antes da submissão

 < ?php if (!empty($_POST)) { //save $_POST data to the database ... //also, fill some data as response $response = array('my_hidden_field' => 'this is now filled in'); //next line returns the response echo json_encode($response); } 

myform.js : envia dados de formulário para saveform.php antes de enviar para paypal

 $j = jQuery.noConflict(); $j(document).ready(function() { $j('#myform').submit(submit_myform); }); function submit_myform() { if (!myform_is_valid()) { window.location.href = "#myform"; return false;//prevent normal browser submission, to display validation errors } else { $j.ajax({ url: 'saveform.php', type: 'POST', data: $j(this).serialize(), dataType:'json', //data type of Ajax response expected from server success: myform_success //callback to handle Ajax response and submit to Paypal }); return false;//prevent normal browser submission, since the form is submitted in the callback } } function myform_is_valid() { $valid = true; //validate data; if there's a validation error, set $valid=false and display errors on page ... return $valid; } function myform_success(response) { //this is called whenever the ajax request returns a "200 Ok" http header //manipulate the form as you wish $j('#my-hidden-field').val(response.my_hidden_field); //submit the form (to the form's action attribute, ie $paypal_url) document.forms['myform'].submit(); } 

Em vez da chamada jquery.ajax, você também pode usar o menor:

 $j.post('saveform.php',$j('#myform').serialize(),myform_success,"json") 

Na verdade, existe uma solução simples. Eu suponho que você está fazendo o processamento do formulário e tentando redirect no seu modelo? Você precisa ativar uma ação anterior , antes que os headers sejam enviados. exemplo:

 function wpa66284_process_my_form(){ if( isset( $_POST['myform'] ) ){ // process form and redirect } } add_action( 'init', 'wpa66284_process_my_form' ); 
 $j = jQuery.noConflict(); $j(document).ready(function() { $j('#myform').submit(submit_myform); }); function submit_myform() { if (!myform_is_valid()) { window.location.href = "#myform"; return false;//prevent normal browser submission, to display validation errors } else { $j.ajax({ url: 'saveform.php', type: 'POST', data: $j(this).serialize(), dataType:'json', //data type of Ajax response expected from server success: myform_success //callback to handle Ajax response and submit to Paypal }); return false;//prevent normal browser submission, since the form is submitted in the callback } } function myform_is_valid() { $valid = true; //validate data; if there's a validation error, set $valid=false and display errors on page ... return $valid; } function myform_success(response) { //this is called whenever the ajax request returns a "200 Ok" http header //manipulate the form as you wish $j('#my-hidden-field').val(response.my_hidden_field); //submit the form (to the form's action attribute, ie $paypal_url) document.forms['myform'].submit(); 

insira a descrição da imagem aqui