如何处理表格提交?


13

我是Wordpress的新手,因此遇到了一些问题。

用例场景如下:

  1. 向用户显示申请表格,以在他的学校开设俱乐部。
  2. 用户填写表格并点击“提交”按钮。
  3. 该表格需要验证。
  4. 如果验证成功,则数据将存储在club_detailsdb的自定义表中,并向用户显示一些消息(例如:感谢提交。您的应用程序将发送给管理员以供批准。)否则,将向用户显示适当的错误消息。
  5. 管理员进入Wordpress管理面板以批准俱乐部的待处理请求。(数据是从db中提取的,并显示给管理员)。

我已经完成以下工作:

  • 1)我已经使用Wordpress HTML编辑器创建了一个申请表/页面。
  • 对于3)我有一个validation.js包含验证码的javascript文件()。
  • 对于4)我有一个php文件(club-functions.php),该文件具有storeInDB()将应用程序详细信息存储在db中的自定义表中的功能。
  • for 5)我创建了自己的插件文件夹,并添加了一个php文件(club.php),该文件在WordPress管理面板上向管理员显示应用程序详细信息。

我被困在以下位置:如何处理表单提交。我应该在哪里放置调用javascript的validate函数并随后调用该storeInDB()函数的代码。

请提供一些有关如何实现此目标的建议,这种方法是否有效?非常感谢。

Answers:


13

您应该使用wp_ajaxwp_ajax_nopriv函数。

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

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

这样,默认情况下(没有JavaScript),表单将被提交到admin-ajax.php。您可以使用JavaScript使用AJAX使其工作。

接下来是将使用提交的数据的功能。在表单内部,wp_nonce_field输入带有名称操作的和隐藏输入。我的动作值为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);
}

感谢ifdion的回复。我正在“ Wordpress HTML编辑器”中创建表单。那么,将php代码包含在表单中是否很好,因为我将不得不安装“ Exec-PHP”插件,我认为这太过分了?请分享您的想法。
Pooja 2012年


那样有用吗?
ifdion 2012年

1
有没有一个好的方法,但没有admin-ajax.php?
塔希尔·亚辛

1
@TheWPNovice我想它仍然在/wp-admin/目录中。请注意,您无需更改或添加该文件中的任何内容。
ifdion

2

首先,让我告诉您javascript验证可以在客户端进行。因此,如果用户禁用js,您将遇到问题。

因此,您还应该在服务器端验证输入值。

考虑到这一点:

可以从表单所在的页面直接调用js代码。onsubmit属性是调用它的常用方法。

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

这也可以是您的自定义模板页面或single.php。在这种情况下,99是您要向用户指示的特定页面的ID(如果已批准或有错误)。

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}

感谢peteroak的回复。在哪里可以调用PHP代码来进一步处理表单数据?
Pooja

action属性将指向文件。在该文件中,您可以过滤和验证表单。我将更新我的回复以包含该内容。
pcarvalho 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.