如何在将表单提交到自定义页面时保留$_POST数据

时间:2016-07-08 作者:katahdin

我编写了一个插件,其工作是使用用户订阅表单创建自定义页面。表单页的创建方式如下:

$page = [                              
    \'post_type\' => \'page\',             
    \'post_content\' => \'\',              
    \'post_status\' => \'publish\',        
    \'post_title\' => \'Create a new account\', 
    \'post_name\' => \'account new\'        
];                                     
                                       
$page_id = wp_insert_post($page);     
这将在以下位置创建新页面:http://example.com/account-new/ 这将呈现订阅注册表单。我使用相同的过程创建了一个页面,该页面在http://example.com/account-pending/.

在独立于插件的“我的主题”中,表单的开头标记如下所示:

<form method="post" id="new-account-form" action="/account-pending/">
在提交时,我可以在Chrome中看到post数据被发送到帐户挂起页面,但当我使用PHPStorm调试PHP代码时,我发现$_POST object is not set.

这个/account-pending/ 页面包含以下用于处理POST数据的函数:

public function get_account_pending()
{

    if (isset( $_POST[\'my_check_value\'])) {
        $username =       $_POST[\'username\'];
        $password =       $_POST[\'userpass\'];
        $firstname =      $_POST[\'firstname\'];
etc...
我还添加了一个用于捕获post操作的操作

add_action( \'wp\', array( &$this, \'get_account_pending\' ) );
但我还是错过了一些东西。如何找到剥离$\\u POST对象的内容?此时,代码中仅设置以下变量:

$this
$_GET
$_REQUEST
$_SERVER
$GLOBALS
我是否遗漏了正确设置POST数据以在/account-pending/

编辑:

如果我通过cURL命令发送数据,我可以看到$\\u POST数据,如下所示:

curl -X POST \'firstname=myfirst\' -F \'lastname=mylast\' -F \'username=username21\' -F \'usermail=me%40example.com\' -F \'userpass=thisone\' -F \'userpass_again=thisone\' -F \'my_check_value=on\' -F \'billing_address=452+Kennebec+Rd\' -F \'billing_apt=\' -F \'billing_city=Heretown\' -F \'billing_state=ME\' -F \'billing_zip=04444\' -F \'card_type=4\' -F \'card_number=4111111111111111\' -F \'expire_month=07\' -F \'expire_year=23\' http://example.com/account-pending/?XDEBUG_SESSION_START=10663
这似乎表明问题在于wordpress(或PHP)清除$\\u POST变量,或者我的表单没有正确提交数据。

1 个回复
最合适的回答,由SO网友:Stephen Afam-Osemene 整理而成

我不知道为什么你的$\\u POST数据会消失。但是,请考虑使用admin_post/admin_post_nopriv 钩子使用后端的函数处理表单数据。这就是函数的用途。在函数结束时,您可以使用以下命令重定向到帐户挂起页面wp_redirect(home_url(\'/account-pending\')) .

相关推荐

How to secure my php forms

请告诉我如何使用php创建和显示表单的安全建议,我想从安全角度了解我的以下代码是否不受交叉脚本攻击或sql注入或任何形式的攻击或黑客攻击。$form = \'<div class=demessage>\' . esc_html__($message, \"gold\") . \'</div>\' ; $form .= \'<form action=\"\" method=\"post\" name=\"base\">\'; $form .= e