当前位置: 首页>>技术教程>>正文


如何处理表单提交?

webfans 技术教程 , 去评论

问题描述

我是wordpress的新手,因此面临一些问题。

用例场景如下:

  1. 向用户显示申请表以在他的学校中开始俱乐部。

  2. 用户填写表格并点击’Submit’按钮。

  3. 表单需要验证。

  4. 如果验证成功,则数据存储在db中的自定义表club_details中,并向用户显示一些消息(例如:感谢您提交。您的应用程序将发送给管理员进行审批。)否则会向用户显示相应的错误消息。

  5. 管理员进入Wordpress管理面板批准俱乐部的待处理请求。 (数据从db获取并显示给管理员)。

我做了以下事情:

  • 1)我使用Wordpress HTML编辑器创建了一个申请表/页面。

  • 3)我有一个具有验证码的javascript文件(validation.js)。

  • 4)我有一个php文件(club-functions.php),它有一个函数storeInDB(),用于将应用程序详细信息存储在db中的自定义表中。

  • 5)我创建了自己的插件文件夹,并添加了一个php文件(club.php),在Wordpress管理面板上向管理员显示应用程序详细信息。

我被困在以下地方:如何处理表单提交。我应该在哪里放置调用javascript验证函数的代码,然后调用storeInDB()函数。

请提供一些关于如何实现这一点的建议,这种方法是否合适?非常感谢提前。

最佳解决思路

您应该使用wp_ajaxwp_ajax_nopriv功能。

首先,您应该将admin ajax url作为提交表单中的action属性值。

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

这样,默认情况下,表单将提交给admin-ajax.php(不含JavaScript)。您可以使用JavaScript使其使用AJAX。

接下来是将使用提交的数据的函数。在表单内部,放置一个wp_nonce_field和一个名为action的隐藏输入。我的行动价值是add_transfer

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

您可以在functions.php或插件文件中放置将处理此表单的函数。如果这是仅适用于登录用户的表单,则可以使用wp_ajax_ +操作名称。对于未登录的用户,请改用wp_ajax_nopriv +操作名称。

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2286.html,转载请务必附带本地址声明。