#php #wordpress
#php #wordpress
Вопрос:
В моем WordPress версии 5.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') {
save_data();
}
Однако данные сохраняются дважды с помощью приведенного выше кода.
Я попытался определить отправленную форму и сохранить данные с помощью приведенного ниже:
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);
Комментарии:
1. можете ли вы попробовать распечатать данные POST перед вызовом save_data() и посмотреть, что вы получаете в post?
2. Да, я получаю входные значения.
3. итак, вы получаете только одно из значений отправки или оба из них?
4. также не могли бы вы показать свой метод save_data?
5. Обновлен исходный вопрос.
Ответ №1:
Самый простой способ, на мой взгляд, — добавить скрытое поле ввода в формы с чем-то, что поможет вам его идентифицировать. Затем, когда будет отправлена одна из этих форм, будет указано только ее скрытое поле.
Пример: <input type="hidden" name="formn" value="1">
и тогда у $_POST['formn']
вас будет ‘1’.
Комментарии:
1. Не является ли
if($_SERVER['REQUEST_METHOD'] == 'POST')
более правильным способом проверить, отправлена ли вся форма, чем(isset($_POST['formn']))
проверка только одного поля ввода?2. Честно говоря, я не верю, что использование
$_SERVER['REQUEST_METHOD'] == 'POST'
является более правильным, чем любой другой способ проверить это. Но моя цель состояла в том, чтобы использовать это единственное поле, чтобы выбрать, какая из форм была отправлена, а не проверять, была ли отправлена какая-либо из них. Разве это не то, что вы ищете?
Ответ №2:
Ознакомьтесь со следующим кодом.
Шаблон страницы, содержащий две формы и один и тот же шаблон страницы, используется для обработки метода отправки формы.
Возможно, вы захотите изменить имя поля ввода ‘name’ и добавить к нему префикс, чтобы сделать его уникальным. (‘my_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
ton type=»submit» name=»submittwo»> Отправить
Ответ №3:
Вы должны использовать ядро 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' );