将帖子提交到数据库,然后重定向到PayPal

时间:2012-09-26 作者:Kirill Fuchs

我正在尝试将表单数据提交到数据库,然后将客户端发送到paypal,paypal将使用IPN返回响应。

现在我有表单提交到数据库,我有IPN工作,我的问题是重定向部分。我希望这一切都可以通过点击一个按钮来完成。。。

我的表单只是提交回当前页面,在那里它验证数据并添加到数据库中。我似乎无法使用标头,因为数据已发送到标头。

我的选择/解决方案是什么。最简单的解决方案是最好的,但我现在对任何事情都持开放态度。

对于这样一个简单的任务,你会认为有一个简单的解决方案。。。

这是我打印表单的代码:

function display_form() { ?>
        <div class="culis-module">
            <form action="<?php echo str_replace( \'%7E\', \'~\', $_SERVER[\'REQUEST_URI\']); ?>" method="post">      
                <div class="clearfix culis-module-body">
                    <?php 
                    if ( $_POST[\'culis_add_listing\'] == \'Y\' && $this->no_errors()) { 
                        $this->addto_db();
                        ?><div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">x</button> <?php _e(\'Thank You, your company will be listed as soon as payment is processed.\')?></div><?php 
                    }

                    if ( $_POST[\'culis_add_listing\'] == \'Y\' && !$this->no_errors()) { 
                        $this->prepare_fields(\'saved\'); 
                    } 
                    else {
                        $this->prepare_fields();
                    }?>
                </div>
                <div class="modal-footer">  
                    <button class="btn btn-primary" type="submit" name="culis_add_listing" value="Y">Submit</button>
                    <button class="btn" type="submit" name="form_reset" value="Y">Clear</button>
                </div>
            </form>
        </div>
    <?php 
    }
更新:下面是我尝试做的一个例子https://stackoverflow.com/a/6753281/1445460

3 个回复
SO网友:adelval

我不知道一年后我是如何遇到这个问题的,但由于这个问题没有答案。。。

您可以使用Paypal url作为表单的操作,而不是自行提交表单然后重定向到Paypal,但在表单提交到Paypal之前,可以使用Ajax保存表单数据。您还可以使用Ajax响应在提交前准备表单,例如填写一些隐藏字段

下面是一个示例:

我的表单。php:

<form id="myform" method="post" action="<?php echo $paypal_url; ?>">
   <input type="text" ...>
   <input type="hidden" name="my-hidden-field" id="my-hidden-field" value="this is hidden"> 
   ...other form fields...
</form>
保存表单。php:处理Ajax请求并返回响应,该响应可用于在提交前操纵表单

<?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);  
  }
我的形式。js:将表单数据提交到saveform。提交至贝宝前的php

$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, i.e $paypal_url)
    document.forms[\'myform\'].submit(); 
}
而不是jquery。ajax调用您也可以使用较短的:

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

SO网友:Milo

事实上,有一个简单的解决方案。我假设您正在进行表单处理并试图在模板中重定向?你需要hook an earlier action, 发送邮件头之前。示例:

function wpa66284_process_my_form(){
    if( isset( $_POST[\'myform\'] ) ){
        // process form and redirect
    }
}
add_action( \'init\', \'wpa66284_process_my_form\' );

SO网友:anita
$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, i.e $paypal_url)
    document.forms[\'myform\'].submit();

enter image description here

结束

相关推荐

Gravity Forms Post method

我有一个简单的表单,用户将填写该表单,它将成为我网站上的一篇帖子。我有两个问题:我正在使用Post title、Post自定义字段元素(对于单行文本)和Post Body元素(对于段落文本)。但是,当我提交测试表单时,只显示标题,没有显示我在自定义字段元素中编写的数据。有没有设置可以让我的帖子中显示字段标题?(也就是说,Name字段实际上会在帖子上显示“Name:用户键入的任何内容”)当我能够在帖子上显示其中一个正文字段时,它只有我键入的信息,而没有标题。可能我没有正确使用post字段,因此任何方向/意见