使用 admin_post 挂钩自定义 HTML 表单提交错误

Posted

技术标签:

【中文标题】使用 admin_post 挂钩自定义 HTML 表单提交错误【英文标题】:Custom HTML form submission error using admin_post hook 【发布时间】:2021-11-08 18:56:59 【问题描述】:

我有一个 html 表单,我使用 elementor 上的 HTML 代码 sn-p 插入了该表单。我想将它连接到我的 wordpress 数据库。我已经研究了 wpdb-> insert 函数,但无法让它工作。我正在使用 wp-admin 的操作挂钩。

<html
  <body>
    <form action="https://www.example.com/wp-admin/admin-post.php" method="post" name="myform">
      <!-- ####################################################### --><br><br>
      <h3>Option1 </h3>
      <input type="radio" name="a" id="1" value="1" /> None of the time &nbsp;&nbsp;
      <input type="radio" name="a" id="1" value="2" /> Rarely&nbsp;&nbsp;
      <input type="radio" name="a" id="1" value="3" /> Some of the Time&nbsp;&nbsp;
      <input type="radio" name="a" id="1" value="4" /> Often&nbsp;&nbsp;
      <input type="radio" name="a" id="1" value="5" /> All of the Time&nbsp;&nbsp;

      <br /><br />
      <!-- #############################################################-->
      <h3> Option2 </h3>
      <input type="radio" name="p" id="High" value="1" /> None of the time&nbsp;&nbsp;
      <input type="radio" name="p" id="Medium" value="2" /> Rarely&nbsp;&nbsp;
      <input type="radio" name="p" id="Low" value="3" /> Some of the Time&nbsp;&nbsp;
      <input type="radio" name="p" id="Medium" value="4" /> Often&nbsp;&nbsp;
      <input type="radio" name="p" id="Medium" value="5" /> All of the Time&nbsp;&nbsp;<br /><br />
      <!-- ########################################################## -->

      <input type="hidden" name="action" value="compass_data">

      <br />
      <br />
      
      <h3><span id="msg"></span></h3>
    </form>
    <input type="submit" value="SUBMIT" name="submit" onclick="setTimeout(validate, 1500)" />
    <br /><br />

    <script>
/* Some functions here*/
    </script>
  </body>
</html>

上面的JS有一个变量需要存入数据库。我正在使用 PHP 代码 sn-p 插件来放置以下 PHP 代码。我的问题是我应该把这个 PHP 代码放在 functions.php 还是 PHP sn-p 的什么位置?

add_action('admin_post_compass_data','storedata_compass',11);
add_action('admin_post_nopriv_compass_data','storedata_compass',11);

function storedata_compass()
    if(isset($_POST['SUBMIT']))
      global $wpdb;
      $user = wp_get_current_user();
      $userId = $user->ID;
      $user_data = get_userdata($user_id);
        $data = array('Student Id' => $userId, 'First Name' => $user_data -> user_firstname, 'Email' => $user_data -> user_email, 'Group Id' =>             2, 'Intro Selection' => 'DBTEST',   'End Selection' => 'test2');
        $format = array('%d', '%s', '%s', '%d', '%s', '%s');
    
    $wpdb->insert( 'wpqc_compass', $data, $format);
    

【问题讨论】:

我现在用过 admin-post.php 【参考方案1】:

您的 php 代码在您设置 $tablename 的位置有点损坏

It should be $tablename = $wpdb->prefix . 'compass'

而不是$tablename = $wpdb-&gt; 'compass';

但是,当您尝试运行该 php 代码时,您应该会遇到错误。但是你应该把它添加到functions.php中。

你也不应该只听$_POST['submit'],因为如果你有任何其他表单,它有一个名为“提交”的按钮,它也会触发这个 php 脚本。

【讨论】:

我现在正在使用 admin_post 动作挂钩与数据库进行交互,但仍然没有用。

以上是关于使用 admin_post 挂钩自定义 HTML 表单提交错误的主要内容,如果未能解决你的问题,请参考以下文章

在组件内部定义自定义挂钩是不是有任何问题?

如何在reactjs挂钩中创建自定义挂钩?

关闭模式后刷新使用自定义挂钩获取的数据

使用自定义挂钩时的重新渲染问题

如何在自定义挂钩上使用 useCallback?

如何仅在 React 自定义挂钩中获取数据一次?