O formulário não está inserindo dados no database com o plugin ajax

Eu tenho trabalhado nisso por semanas sem sucesso. Eu descobri o problema após o problema com o código, mas nenhuma das correções parece corrigir o meu problema principal. O formulário não insere nada no database e não sei por quê. Neste exemplo específico, envie os resultados para a seguinte URL: (myurl) /? Dname = kl & age = 56 & action = postlesson. A página inicial é o que carrega. Estou juntando isso de exemplos e tutoriais na web.

Eu sou novo no ajax e nos plugins de wordpress para que eu possa estar faltando alguma coisa óbvia. Por favor, ajude-me a saber onde eu estou indo errado.

Os enqueues:

add_action( 'plugins_loaded', array ( B5F_SO_13498959::get_instance(), 'plugin_setup' ) ); class B5F_SO_13498959 { private $cpt = 'post'; # Adjust the CPT protected static $instance = NULL; public $plugin_url = ''; public function __construct() {} public static function get_instance() { NULL === self::$instance and self::$instance = new self; return self::$instance; } /** * Regular plugin work */ public function plugin_setup() { $this->plugin_url = plugins_url( '/', __FILE__ ); add_shortcode('the_content', array($this, 'show_form')); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) ); add_action( 'wp_ajax_postlesson', array( $this, 'postlesson' ) ); add_action( 'wp_ajax_nopriv_postlesson', array( $this, 'postlesson' ) ); } public function enqueue() { //Include Javascript library wp_enqueue_script('lessonupload', "{$this->plugin_url}demo.js" , array( 'jquery' )); // including ajax script in the plugin Myajax.ajaxurl wp_localize_script( 'lessonupload', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php'))); } 

A forma:

 public function show_form(){ ?> 
<?php }

O jQuery:

 jQuery(document).ready(function($) { $('#postlesson').submit(ajaxSubmit); function ajaxSubmit() { var submitlesson = $(this).serialize(); $.ajax({ type: "POST", url: MyAjax.ajaxurl, data: submitlesson, success: function(data) { $("#feedback").html(data); } }); } return false; }); 

O php:

 public function postlesson(){ global $wpdb; $name = $_POST['dname']; $age = $_POST['age']; if($wpdb->insert('wp_demo',array( 'dname'=>$name, 'age'=>$age ))===FALSE) { echo "error"; } else { echo "success"; } die(); } } 

Solutions Collecting From Web of "O formulário não está inserindo dados no database com o plugin ajax"

Eu nunca descobri como fazer isso com serialize ou formData, mas descobri outras duas maneiras de fazê-lo. O mais fácil é simplesmente pular este passo completamente e na urna ação e js listar o url para um arquivo php como você pode fazer se você não estivesse no wordpress. Então, adicionei essa linha ao topo e funcionou. require_once (‘../../../wp-load.php’); Isso não é aconselhável por causa da carga do servidor e outras razões que não entendi completamente, mas funciona.

O segundo caminho, se você não precisar serializar ou fazer o upload de um arquivo, é fazer isso:

 jQuery(document).ready(function(){ jQuery("#submit").click(function(){ var name = jQuery("#dname").val(); var age = jQuery("#age").val(); var File = jQuery("#myfile").val(); jQuery.ajax({ type: 'POST', // Adding Post method url: MyAjax.ajaxurl, // Including ajax file data: {"action": "postlesson", "dname":name, "age":age, "myfile":File}, // Sending data dname to post_word_count function. success: function(response){ // Show returned data using the function. jQuery("#feedback").html(response); } }); jQuery('[name="age"]').val(''); // sets the field back to empty jQuery('[name="dname"]').val(''); jQuery('[name="myfile"]').val(''); }); }); 

Estou apenas postando isso no caso de alguém tão despreocupado quanto eu procurar. Isso significou mudar a forma também. Eu não tenho esse código pronto, mas essencialmente, acabei de me livrar do campo de envio escondido.

Confira este exemplo. Eu tenho o formulário com um campo (campo de texto) com o botão enviar:

 < ?php global $wpdb; //Declare to interact with the database ?> 

Add New Client

Usando o Ajax para passar esse valor para a página PHP:

  

Este código PHP é usado para verificar se os dados existem no database e se ele existe, então ele sobrescreve. Crie um arquivo chamado add.php e adicione este código:

 < ?php if(!empty($_POST['client_name']) && isset($_POST['client_name'])) { $client_name = $_POST['client_name']; } //global $wpdb; if(isset($client_name) && !empty($client_name)){ $query = $wpdb->get_row("SELECT * FROM `wp_clients` WHERE `client_name`='".$client_name."'"); if (!empty($query->client_id)) { echo 'Client already exists'; }else{ if($client_name != 'None'){ $sql = $wpdb->prepare("INSERT INTO `wp_clients`(`client_name`) VALUES ('".$client_name."')"); if ($wpdb->query($sql)) { echo "New client created successfully"; } else { echo "Error: " . $sql . "
" . $wpdb->error; } }else { echo 'Please enter the client name'; } } } ?>