我已经为此工作了几个星期,但没有成功。我已经解决了代码中的一个又一个问题,但似乎没有一个更正可以解决我的核心问题。表单没有向数据库中插入任何内容,我也不知道为什么。我的所有数据都在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();
});
});
请帮我找出我错在哪里?
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;