Php Wordpress。每个表单提交上的表单特定功能,以避免再次重复表单提交

Php Wordpress。每个表单提交上的表单特定功能,以避免再次重复表单提交,php,wordpress,Php,Wordpress,在我的WordPress v5.5.3中,我有两个表单,在一个页面中具有相同的输入字段: <form id="one" method="post"> <input name="name" type="text" value="My Name"> <input name="movie" type="hidden"

在我的WordPress v5.5.3中,我有两个表单,在一个页面中具有相同的输入字段:

<form id="one" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="1">
    <button type="submit" name="submitone">Submit</button>
</form>

<form id="two" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="2">
    <button type="submit" name="submittwo">Submit</button>
</form>
但是,使用上述代码将数据保存两次。 我已尝试识别提交的表格,并将数据保存在以下位置:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['submitone'])) {
        save_data();
        }
    }
这不起作用,也不保存表单数据。 如何识别提交的表单并保存数据

编辑1
save_data()下面方法:

// input variables
$name = filter_input(INPUT_POST, 'name');
$movie = filter_input(INPUT_POST, 'movie');

// Table
global $wpdb;
$tablename = $wpdb->prefix . 'names';

// Name ID
$default_row = $wpdb->get_row("SELECT * FROM $tablename ORDER BY id DESC LIMIT 1");
    if ($default_row != null) {
        $id = $default_row->id + 1;
    } else {
        $id = 1;
    }

// Names 
$data = array(
'id' => $id,
'name' => $name,
'movie' => $movie,
);

// INSERT DATA INTO THE TABLE
$new_name = $wpdb->insert($tablename, $data);

在我看来,最简单的方法就是在表单中添加隐藏的输入字段,这些字段可以帮助您识别它。然后,当提交其中一个表单时,只会给出它的隐藏字段


示例:
,然后在
$\u POST['formn']
中,您将获得“1”。

我认为最简单的方法是向表单中添加隐藏的输入字段,并添加有助于您识别它的内容。然后,当提交其中一个表单时,只会给出它的隐藏字段


示例:
然后在
$\u POST['formn']
中,您将获得“1”。

检查以下代码

包含两个表单和相同页面模板的页面模板用于处理表单Post方法

您可能需要更改输入字段名“name”,并为其添加前缀以使其唯一。(“我的名字”在这个代码示例中)。Wordpress将表单输入中的某些字段名视为保留关键字。如果您使用任何保留名称,WordPress的行为都很奇怪

<?php
/**
 * Template Name: Form Template
 * Author: Meera Datey 
 * Template Post Type: post, page
 */

// Handle POST Submission here. 
if(isset($_POST['submitone'])) {

    print_r('First Form submitted');
    $my_name = $_POST['my_name'];
    // This should have input name  from first form
    print_r($my_name);
    save_data();
}
if(isset($_POST['submittwo'])) {
    print_r('Second Form submitted');
    $my_name = $_POST['my_name'];
    // This should have input name  from second form
    print_r($my_name);
    //save_data();
}

?>


<!-- This is a GET Request -->

<form  method="post" action="<?php the_permalink(); ?>">
    <input name="my_name" type="text" value="My Name">
    <button type="submit" name="submitone">Submit</button>
</form>

<form  method="post" action="<?php the_permalink(); ?>">
    <input name="my_name" type="text" value="My Name">
    <but


检查以下代码

包含两个表单和相同页面模板的页面模板用于处理表单Post方法

您可能需要更改输入字段名“name”,并为其添加前缀以使其唯一。(“我的名字”在这个代码示例中)。Wordpress将表单输入中的某些字段名视为保留关键字。如果您使用任何保留名称,WordPress的行为都很奇怪

<?php
/**
 * Template Name: Form Template
 * Author: Meera Datey 
 * Template Post Type: post, page
 */

// Handle POST Submission here. 
if(isset($_POST['submitone'])) {

    print_r('First Form submitted');
    $my_name = $_POST['my_name'];
    // This should have input name  from first form
    print_r($my_name);
    save_data();
}
if(isset($_POST['submittwo'])) {
    print_r('Second Form submitted');
    $my_name = $_POST['my_name'];
    // This should have input name  from second form
    print_r($my_name);
    //save_data();
}

?>


<!-- This is a GET Request -->

<form  method="post" action="<?php the_permalink(); ?>">
    <input name="my_name" type="text" value="My Name">
    <button type="submit" name="submitone">Submit</button>
</form>

<form  method="post" action="<?php the_permalink(); ?>">
    <input name="my_name" type="text" value="My Name">
    <but


您应该使用wordpress核心:

<form id="one" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="1">
    <input type="hidden" name="action" value="submitone">
    <button type="submit" name="submitone">Submit</button>
</form>

<form id="one" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="1">
    <input type="hidden" name="action" value="submitone">
    <button type="submit" name="submittwo">Submit</button>
</form>

function submitone_handle_form_submit() {
    // here $_POST

}

// Use your hidden "action" field value when adding the actions
add_action( 'admin_post_nopriv_submitone', 'submitone_handle_form_submit' );
add_action( 'admin_post_submitone', 'submitone_handle_form_submit' );

function submittwo_handle_form_submit() {
    // here $_POST

}

// Use your hidden "action" field value when adding the actions
add_action( 'admin_post_nopriv_submittwo', 'submittwo_handle_form_submit' );
add_action( 'admin_post_submittwo', 'submittwo_handle_form_submit' );

提交
提交
函数submittone\u handle\u form\u submit(){
//这里是邮政局
}
//添加操作时使用隐藏的“操作”字段值
添加操作('admin\u post\u nopriv\u submitone'、'submitone\u handle\u form\u submit');
添加操作('admin'u post'u submitone','submitone'u handle'u form'u submit');
函数提交双句柄表单提交(){
//这里是邮政局
}
//添加操作时使用隐藏的“操作”字段值
添加操作('admin\u post\u nopriv\u submittwo'、'submittwo\u handle\u form\u submit');
添加操作('admin\u post\u submittwo'、'submittwo\u handle\u form\u submit');

您应该使用wordpress核心:

<form id="one" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="1">
    <input type="hidden" name="action" value="submitone">
    <button type="submit" name="submitone">Submit</button>
</form>

<form id="one" method="post">
    <input name="name" type="text" value="My Name">
    <input name="movie" type="hidden" value="1">
    <input type="hidden" name="action" value="submitone">
    <button type="submit" name="submittwo">Submit</button>
</form>

function submitone_handle_form_submit() {
    // here $_POST

}

// Use your hidden "action" field value when adding the actions
add_action( 'admin_post_nopriv_submitone', 'submitone_handle_form_submit' );
add_action( 'admin_post_submitone', 'submitone_handle_form_submit' );

function submittwo_handle_form_submit() {
    // here $_POST

}

// Use your hidden "action" field value when adding the actions
add_action( 'admin_post_nopriv_submittwo', 'submittwo_handle_form_submit' );
add_action( 'admin_post_submittwo', 'submittwo_handle_form_submit' );

提交
提交
函数submittone\u handle\u form\u submit(){
//这里是邮政局
}
//添加操作时使用隐藏的“操作”字段值
添加操作('admin\u post\u nopriv\u submitone'、'submitone\u handle\u form\u submit');
添加操作('admin'u post'u submitone','submitone'u handle'u form'u submit');
函数提交双句柄表单提交(){
//这里是邮政局
}
//添加操作时使用隐藏的“操作”字段值
添加操作('admin\u post\u nopriv\u submittwo'、'submittwo\u handle\u form\u submit');
添加操作('admin\u post\u submittwo'、'submittwo\u handle\u form\u submit');

在调用save_data()之前,您是否可以尝试打印POST数据,看看您从POST中得到了什么?是的,我得到了输入值。那么,您是只得到一个提交值还是两个提交值?还可以显示您的save_data方法吗?更新了原始问题。在调用save_data()之前,您是否可以尝试打印POST数据看看你在帖子中得到了什么?是的,我得到了输入值。那么你是只得到一个提交值还是两个提交值?你也可以显示你的保存数据方法吗?更新了原来的问题。
if($\u SERVER['REQUEST\u method']='post')
是不是比
(isset)更正确的检查整个表单是否提交的方法($\u POST['formn'])
哪个只检查一个输入字段?老实说,我不相信使用
$\u服务器['REQUEST\u METHOD']=='POST'
比任何其他检查方法都更正确。但我的观点是使用这一字段来选择提交了哪一个表单,而不是检查其中是否有任何表单。这不是您正在寻找的吗?
if($\u SERVER['REQUEST\u METHOD']='POST')
检查是否提交了整个表单的正确方法比
(isset($\u POST['formn'])
只检查一个输入字段更正确?老实说,我不相信使用
$\u服务器['REQUEST\u METHOD']=='POST'
比任何其他检查方法都更正确。但我的观点是使用这一字段来选择提交了哪一个表单,而不是检查是否有任何表单。这不是您要查找的吗?