Wordpress插件表单在每次浏览器刷新时提交到数据库

时间:2017-06-03 06:32:07

标签: wordpress

我正在开发一个wordpress插件,后端工作正如我所需,但我面临前端问题,我创建了一个短代码页面,我发布了几个值到下一页但是当我刷新下一个它发送值到数据库一次又一次。我想阻止它,这是功能:

function technician_checklist_report_generated(){
global $current_user;
global $wpdb;  
$submit="";

if($_POST['customerid']!=""){
    $crow = $wpdb->get_row( 'SELECT customer_id, firstname, lastname, createdon, marina, vesselmodel, vesselname, vesselyear
                               FROM wp_yacht_customers 
                               WHERE customer_id= '.$_POST['customerid']
                             );

}

if($crow->customer_id!=""){


$table = 'wp_yatch_vessel_config_checklist';
array_pop($_POST); // delete last element in post array (submit)
$data = $_POST;
$format;

$wpdb->insert( $table, $data, $format );
}

require(dirname(__FILE__) .'/view/technician-start-reporting.php');
}

add_shortcode('technician-start-reporting', 
'technician_checklist_report_generated');

当我到达技术人员开始报告页面时,它会在浏览器刷新时一次又一次地向MySQL发送数据。

有没有其他方法可以转到另一个页面,因为我使用了wp_redirect并显示错误"标头已经发送...:

1 个答案:

答案 0 :(得分:0)

在将内容发送到浏览器之前,您只能使用wp_redirect

您可以挂钩之前的操作,例如wp_loaded(这将在发送标头之前触发),而不是处理模板[insite shortcode]中的表单。

<?php
add_action( 'wp_loaded', 'wpv_process_form' );
function wpv_process_form(){
    if( isset( $_POST['customerid'] ) ):
        // process form, and then
        wp_redirect( get_permalink( $pid ) ); // redirect to desired page id
        exit();
    endif;
}

这样你也可以减少查询次数。