数据库中未插入AJAX联系人表单小部件插件数据

时间:2020-12-15 作者:its_ds_ 21

我已经为此工作了几个星期,但没有成功。我已经解决了代码中的一个又一个问题,但似乎没有一个更正可以解决我的核心问题。表单没有向数据库中插入任何内容,我也不知道为什么。我的所有数据都在ajax调用中传递,但它不会插入数据库中的数据。

我是ajax和WordPress插件的新手,所以我可能遗漏了一些明显的东西。请帮我知道我哪里做错了。提前谢谢。

我的小部件表单插件代码

public function widget( $args, $instance ) {


    if ( ! isset( $args[\'widget_id\'] ) ) {

        $args[\'widget_id\'] = $this->id;
        
        }

        $title = ( ! empty( $instance[\'title\'] ) ) ? $instance[\'title\'] : __( \'Contact\' );

        $title = apply_filters( \'widget_title\', $title, $instance, $this->id_base );
        
        
         ?>
    <?php
        if ( $title ) {
           echo \'<h2 class="widget-title">\'.$args[\'before_title\'] . $title . $args[\'after_title\'].\'</h2>\';
          
        }
       ?>

    <form  class="form-group" method="POST" id="form" action="">
        <label>Name</label><br>
        <input class="form-control" type="text" id="name" name="name" ><br>
        <label>Mobile</label><br>
        <input type="text" class="form-control" id="mobileno" name="mobileno" required><br>
        <label>Email</label><br>
        <input class="form-control"  type="email" id="email" name="email" ><br>
        <label>Message</label><br>
        <textarea class="form-control" id="message" name="message"  maxlength="10" onKeyPress="lengthcheck()"></textarea><br><br>
        <button  class="btn btn-warning" type="submit" id="submit">Send Message</button>
    </form>
<?php } 


这是我的排队方法:

add_action( \'wp_enqueue_scripts\', \'vs_con_enqueue_scripts\' );

function vs_con_enqueue_scripts(){
 wp_register_script( 
   \'ajaxHandle\', 
   plugins_url(\'valid.js\', __FILE__), 
   array(\'jquery\'), 
   false, 
   true 
 );
 wp_enqueue_script( \'ajaxHandle\');
 wp_localize_script( 
   \'ajaxHandle\', 
   \'ajax_object\', 
   array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) 
 );
 wp_enqueue_style( \'bootstrap-style\',\'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\' );

}


add_action( "wp_ajax_contact", "vs_contact_form" );
add_action( "wp_ajax_nopriv_contact", "vs_contact_form" );


function vs_contact_form(){
 
   global $wpdb;

       $name = $_POST["name"];
       $email = $_POST["email"];
       $mobileno = $_POST["mobileno"];
       $message = $_POST["message"];
      
       
       $tablename = $wpdb->prefix.\'contactdetails\';
       //method 1 (Two Methods Works Prefect) Perform 1 or 2 whatever you want
// $insert_row = $wpdb->insert( 
       //   $tablename, 
       //     array( 
       //         \'name\' => $name, 
       //         \'email\' => $email, 
       //         \'mobileno\' => $mobileno,
       //         \'message\' => $message 
       //     ),
       //     array(
       //       \'%s\',
       //       \'%s\',
       //       \'%s\',
       //       \'%s\'
       //     )
       //   );
           // if row inserted in table
       $qry="INSERT INTO $tablename (name,email,mobileno,message) VALUES (\'$name\',\'$email\',\'$mobileno\',\'$message\')"; 
       $insert_row=$wpdb->query($qry);  //method 2

        if($insert_row)
        {
           echo json_encode(array(\'res\'=>true, \'message\'=>__(\'Message Sent Successfully\')));
       }else{
          echo json_encode(array(\'res\'=>false, \'message\'=>__(\'Something went wrong. Please try again later.\')));
       }
       
       wp_die();
}

这是我的表单提交jquery ajax调用函数

valid.js

jQuery(document).ready(function($){
    $(\'form#form\').on(\'submit\', function(e){
       e.preventDefault();
       var name =jQuery(\'#name\').val();
       var email = jQuery(\'#email\').val();
       var mobileno = jQuery(\'#mobileno\').val();
       var message = jQuery(\'#message\').val();
      
       var text;
       if(name.length < 5){
         text = "Please Enter valid Name";
        alert(text);
         return false;
       }
       if(isNaN(mobileno) || mobileno.length != 10){
         text = "Please Enter valid mobileno Number";
         alert(text);
         return false;
       }
       if(email.indexOf("@") == -1 || email.length < 6){
         text = "Please Enter valid Email";
         alert(text);
         return false;
       }
      var data = {
       action:\'contact\',
       name: name,
       email: email,
       mobileno: mobileno,
       message: message
      }; 
       $.ajax({
          type:"POST",
          dataType:\'json\',
          url: ajax_object.ajaxurl,
          data :data,
          encode:true,
         success: function(data){
            if (data.res == true){
                alert(data.message);    // success message
            }
            else{
              alert(data.message); 
            }
         }  
        });
         $(\'#form\')[0].reset();
       });

   
      });

请帮我找出我错在哪里?

1 个回复
SO网友:Bunty

感谢您提供表架构。

代码和表中也存在一些问题。

Issue 1

在“中”;vs\\u contact\\u form“;函数,参数错误。更改以下行

$messsage = $_POST["messsage"];

$messsage = $_POST["message"];

Issue 2

在相同的函数中,在数组下面更改。(数组键应与表列名匹配)

array( 
    \'name\' => $name, 
    \'email\' => $email, 
    \'mobileno\' => $mobileno,
    \'messsage\' => $messsage 
)

array( 
    \'name\' => $name, 
    \'email\' => $email, 
    \'mobileno\' => $mobileno,
    \'message\' => $messsage 
)

Issue 3

这是桌子的问题。表的数据类型长度不正确。请删除表并使用以下查询创建新表

CREATE TABLE `wp_contactdetails` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `mobileno` varchar(255) NOT NULL,
  `message` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


ALTER TABLE `wp_contactdetails` ADD PRIMARY KEY (`id`);


ALTER TABLE `wp_contactdetails` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; COMMIT;