[英]Form AJAX PHP doesn't send POST datas to WordPress Database
数周以来,我一直在寻找解决社区和教程中问题的方法,但找不到答案。
我已经创建了一个表单来注册订阅者,以便订阅我的 WordPress 数据库的时事通讯。 仅使用 PHP 将 POST 数据发送到数据库。 但是,我想将该表单与 ajax 一起使用,以阻止页面刷新。 现在,不再向数据库发送数据,我不明白为什么。
使用下面的代码,我在控制台中获得以下信息:
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<div class="col s12 m6 newsletter">
<div id="form_output"></div>
<form id="newsletter" class="newsletter__form">
<div>
<input value="" type="text" name="first_name" id="first_name" placeholder="Prénom" autocomplete="given-name">
<input value="" type="text" name="last_name" id="last_name" placeholder="Nom" autocomplete="family-name">
<input value="" type="email" name="email" id="email" placeholder="Email">
</div>
<button class="newsletter__button" type="submit">Je m'abonne</button>
<input type="hidden" name="register" value="newsletter" />
</form>
</div>
$('#newsletter').on('submit', function(event) {
event.preventDefault();
var datas = $(this).serialize();
console.log(datas);
$.ajax({
type: "POST",
url: ajaxurl,
data: datas,
// data: {
// action: 'ajax_newsletter'
// },
success: function(data, result) {
console.log(result + ' ' + data);
$("#form_output").html('Ok');
},
error: function(data, result, error) {
console.log(result + ' ' + data + ' ' + error);
$("#form_output").html('Erreur');
},
});
});
<?php
function eglise_scripts()
{
wp_enqueue_style(
'eglise-style-css',
get_theme_file_uri('/public/css/style.css'),
[],
'1.0.0'
);
wp_enqueue_script(
'eglise-js',
get_theme_file_uri('/public/js/app.js'),
[],
'1.0.0',
true
);
wp_localize_script(
'eglise-js',
'ajaxurl',
admin_url( 'admin-ajax.php' )
);
}
add_action('wp_enqueue_scripts', 'eglise_scripts');
add_action('wp_ajax_nopriv_ajax_newsletter', 'ajax_newsletter');
add_action('wp_ajax_ajax_newsletter', 'ajax_newsletter');
function ajax_newsletter()
{
global $wpdb;
$users = $wpdb->prefix . 'users';
if (isset($_POST['register']) && $_POST['register'] == 'newsletter') {
$first_name = $wpdb->escape(trim($_POST['first_name']));
$last_name = $wpdb->escape(trim($_POST['last_name']));
$email = $wpdb->escape(trim($_POST['email']));
if (empty($email) || empty($first_name) || empty($last_name)) {
echo 'Merci de compléter les champs.';
} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'Addresse email invalide.';
} else if (email_exists($email)) {
echo 'Email déjà existant. ';
} else {
// create columns firstname and lastname
$row_firstname = $wpdb->get_results("SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'wp_users'
AND column_name = 'first_name'
");
$row_lastname = $wpdb->get_results("SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'wp_users'
AND column_name = 'last_name'
");
if (empty($row_firstname)) {
$wpdb->query("ALTER TABLE $users ADD first_name VARCHAR(255) NOT NULL");
} elseif (empty($row_lastname)) {
$wpdb->query("ALTER TABLE $users ADD last_name VARCHAR(255) NOT NULL");
}
// insert user
$newUser = $wpdb->INSERT($users, [
'first_name' => apply_filters('pre_user_first_name', $first_name),
'last_name' => apply_filters('pre_user_last_name', $last_name),
'user_email' => apply_filters('pre_user_user_email', $email),
'user_registered' => current_time('mysql')
]);
if (is_wp_error($newUser)) {
echo 'Une erreur s\'est produite.';
} else {
echo 'Vous êtes désormais inscrit';
}
}
}
wp_die();
}
如果我更改我的 js 文件data: datas
datas into data: { action: 'ajax_newsletter'}
,我会在控制台中获得以下信息:
在我的 wp_users 数据库中,没有添加任何内容。
如果是这样,我在我的function ajax_newsletter()
中评论以下条件:
//if (isset($_POST['register']) && $_POST['register'] == 'newsletter') {
// if (empty($email) || empty($first_name) || empty($last_name)) {
// echo 'Merci de compléter les champs.';
// } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// echo 'Addresse email invalide.';
// } else if (email_exists($email)) {
// echo 'Email déjà existant. ';
// } else {
控制台告诉:
在我的 wp_users db 中添加了一个新的空行,仅完成了“id”和“当前创建日期和时间”。
--
你知道我做错了什么吗? 提前感谢您的帮助!
您需要一个“操作”字段才能使 WordPress AJAX 工作。
但是您还需要为您的 function 提供单独的字段。
进行“时事通讯”操作,例如wp_ajax 示例
例子:
$('#newsletter').on('submit', function(event) {
event.preventDefault();
var first_name = jQuery('#first_name').val();
var last_name = jQuery('#last_name').val();
var email = jQuery('#email').val();
var newsletter = jQuery("input[name=newsletter]").val();
$.ajax({
type: "POST",
url: ajaxurl,
data: {
name: name,
action: 'newsletter',
first_name: first_name,
last_name: last_name,
email: email,
newsletter : newsletter },
success: function(data, result) {
console.log(result + ' ' + data);
$("#form_output").html('Ok');
},
error: function(data, result, error) {
console.log(result + ' ' + data + ' ' + error);
$("#form_output").html('Erreur');
},
});
});
然后它应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.