保存到数据库的简单表单

时间:2013-09-12 作者:Damainman

我正在使用一个第三方服务,该服务对我的数据库进行清理,以查找特定表中的新条目。然而,我找不到一个简单的表单插件,它可以将数据提交到wordpress数据库中的一个表中,而不会影响wordpress的任何功能。原因是我的托管提供商只允许我使用一个数据库。

我需要在wordpress中使用一个表单:

捕获最终用户提交的姓名、电话、电子邮件,保存到数据库中,将用户重定向到确认页面没有什么详细说明,虽然在wordpress管理中看到结果会很好,但这并不一定是必需的,因为我可以使用myphpadmin。

总而言之:

我需要一个简单的html/php表单,在这里我可以通过wordpress管理通过页面的html/代码视图将表单html粘贴到页面上。当用户提交表单时,它会将表单保存到wordpress数据库,然后将用户重定向到“谢谢”页面。

2 个回复
SO网友:gmazzap

据我所知,您的数据库中已有该表。

我不知道你是如何给它命名的,但最好的做法(对我来说是一个必须做的练习)是用相同的wordpress表前缀命名,这是在wp-config.php.

你也没有说这个表是如何构造的,但我猜它是这样的:

ID (integer,primary,autoincrement) | name (varchar) | phone (varchar) | email (varchar)
您可以添加打印表单的快捷码。在您的functions.php 添加:

add_action(\'init\', function() {
  add_shortcode(\'userform\', \'print_user_form\');
});

function print_user_form() {
  echo \'<form method="POST">\';
  wp_nonce_field(\'user_info\', \'user_info_nonce\', true, true);
  ?>

  All your form inputs (name, email, phone) goes here.  

<?php
  submit_button(\'Send Data\');
  echo \'</form>\';
}
现在只需在wp dashboard中创建一篇文章或一个页面,然后简单地添加[userform]: 表单在页面中神奇地显示为printend。

如您所见,我没有将action属性添加到表单中,表单通过这种方式将post数据发送到同一页面。

现在您必须保存数据。在早期挂钩上添加操作,查找$_POST, 检查nonce并保存数据:

add_action(\'template_redirect\', function() {
   if ( ( is_single() || is_page() ) &&
        isset($_POST[user_info_nonce]) &&
        wp_verify_nonce($_POST[user_info_nonce], \'user_info\')
    ) {
      // you should do the validation before save data in db.
      // I will not write the validation function, is out of scope of this answer
      $pass_validation = validate_user_data($_POST);
      if ( $pass_validation ) {
        $data = array(
          \'name\' => $_POST[\'name\'],
          \'email\' => $_POST[\'email\'],
          \'phone\' => $_POST[\'phone\'],
        );
        global $wpdb;
        // if you have followed my suggestion to name your table using wordpress prefix
        $table_name = $wpdb->prefix . \'my_custom_table\';
        // next line will insert the data
        $wpdb->insert($table_name, $data, \'%s\'); 
        // if you want to retrieve the ID value for the just inserted row use
        $rowid = $wpdb->insert_id;
        // after we insert we have to redirect user
        // I sugest you to cretae another page and title it "Thank You"
        // if you do so:
        $redirect_page = get_page_by_title(\'Thank You\') ? : get_queried_object();
        // previous line if page titled \'Thank You\' is not found set the current page
        // as the redirection page. Next line get the url of redirect page:
        $redirect_url = get_permalink( $redirect_page );
        // now redirect
        wp_safe_redirect( $redirect_url );
        // and stop php
        exit();
      }
   }
});
代码很粗糙,但应该是一个有效的起点。内联注释可以帮助您理解工作流。

请务必阅读文档:

SO网友:Eivar Armero

有一件事需要考虑,NAME 是一个保留的wordpress字,如果您使用名为name的字段,则在提交表单时,您将获得404 未找到错误。

结束

相关推荐

按自定义元过滤Archive.php

我正在尝试按自定义元查询筛选存档页。我试过使用query_posts($args) 在循环之前,但它不返回任何内容。有什么想法吗?以下是我目前掌握的情况:<?php //$wolfName = $_GET[\'wolfName\']; $archiveArgs = array( \'meta_key\' => \'wolf\', \