我制作了自定义插件并完成了crud操作,在管理页面中显示所有数据,使用了ajax和jquery。数据已成功删除,但未插入或更新。数据成功通过ajax,但未插入。还有,如果输入块为空,我会放置一些数据并更新它,我会看到什么。它得到了第一行数据
错误-https://prnt.sc/wnzqjr
用于插入数据的ajax
jQuery(\'.ins_btn\').click(function(){
var id = jQuery(this).attr(\'data-id\');
var question = jQuery(\'#question\').val();
var answer = jQuery(\'#answer\').val();
// alert(id);
$.ajax({
url: \'<?php echo admin_url(\'admin-ajax.php\');?>\',
type: \'POST\',
data:{
action: \'insert_records\',
insert_record : id,
insert_question: question,
insert_answer: answer
},
success: function( data ){
alert("Records are successfully insert");
location.reload();
}
});
});
插入查询
function insert_records(){
global $wpdb;
$id = $_POST[\'insert_record\'];
$question = $_POST[\'insert_question\'];
$answer = $_POST[\'insert_answer\'];
$db_inserted = $wpdb->insert( $wpdb->prefix.\'faqq\',
array( \'ID\' => $id,
\'question\' => $question,
\'answer\' => $answer)
);
}
add_action( "wp_ajax_insert_records", "insert_records" );
add_action( "wp_ajax_nopriv_insert_records", "insert_records" );
用于更新数据的ajax
jQuery(\'.upd_btn\').click(function(){
var id = jQuery(this).attr(\'data-id\');
var question = jQuery(\'#question\').val();
var answer = jQuery(\'#answer\').val();
alert(question);
$.ajax({
url: \'<?php echo admin_url(\'admin-ajax.php\');?>\',
type: \'POST\',
data:{
action: \'update_records\',
update_record : id,
update_question : question,
update_answer : answer
},
success: function( data ){
alert("Records are successfully updated");
location.reload();
}
});
});
更新查询
function update_records(){
global $wpdb;
// $table_name = $wpdb->prefix.\'faqq\';
$id = $_POST[\'update_record\'];
$question = $_POST[\'update_question\'];
$answer = $_POST[\'update_answer\'];
$db_updated = $wpdb->update( $wpdb->prefix.\'faqq\',
array(\'question\' => $question,
\'answer\' => $answer, array( \'ID\' => $id ) )
);
}
这是html代码
<form method="POST" action="" >
<table>
<td><?php echo $print->id ?></td>
<td>
<input type="text" name="question" id="question" value="<?php echo $print->question ?>" ></td>
<td>
<input type="text" name="answer" id="answer" value="<?php echo $print->answer ?>" > </td>
<td>
<input type="button" value="Insert" id="insert" data-id = "<?php echo $print->id ?>" name="insert" class="ins_btn">
</td>
<td>
<input type="button" value="Update" id="update" data-id = "<?php echo $print->id ?>" name="update" class="upd_btn">
</td>
<td>
<input type="button" value="Delete" id="delete" data-id = "<?php echo $print->id ?>" name="delete" class="del_btn">
</td>
</table>
</form>
以下是一些错误。1) 通过ajax更新数据时出错-
https://prnt.sc/wnymkx,
https://prnt.sc/wnyos5,
https://prnt.sc/wnyuhk
最合适的回答,由SO网友:Sally CJ 整理而成
我发现有一个内部服务器错误(请参阅screenshot) 当您试图更新数据库中的记录时,错误可能是因为您incorrectly called $wpdb->update()
它的语法为-,请注意,前三个参数($table
, $data
和$where
) 是否需要:
wpdb::update( string $table, array $data, array $where, array|string $format = null, array|string $where_format = null )
但在代码中,您没有设置
third parameter (
$where
):
// In update_records():
$db_updated = $wpdb->update( $wpdb->prefix.\'faqq\',
array( \'question\' => $question,
\'answer\' => $answer, array( \'ID\' => $id ) )
);
我猜
array( \'ID\' => $id )
是
$where
部分,但您可能输入了一个错误,导致该部分成为第二个参数的一部分。
因此,修复这个问题,您的代码就会正常工作。示例:
$db_updated = $wpdb->update( $wpdb->prefix.\'faqq\',
array( \'question\' => $question,
\'answer\' => $answer,
),
array( \'ID\' => $id )
);
至于你的
insert_records()
函数,它看起来很好,所以在向数据库表插入新记录时应该不会出现问题。
此外,您还应该(稍后)进行数据清理和调用wp_die()
结束AJAX请求并修复问题,如图所示here.
SO网友:vishal
我在ajax和jquery中为ajax和jquery中的更新函数编写了错误的代码(之前)-
jQuery(\'.upd_btn\').click(function(){
var id = jQuery(this).attr(\'data-id\');
var question = jQuery(\'#question\').val();
var answer = jQuery(\'#answer\').val();
$.ajax({
url: \'<?php echo admin_url(\'admin-ajax.php\');?>\',
type: \'POST\',
data:{
action: \'update_records\',
update_record : id,
update_question : question,
update_answer : answer
},
success: function( data ){
// alert("Records are successfully updated");
// location.reload();
}
});
});
之后,我做错了,我得到了问题(“#问题”)和答案(“#答案”)列的相同id。所以我得到了所有行的第一行数据
jQuery(\'.upd_btn\').click(function(){
var id = jQuery(this).attr(\'data-id\');
var question = jQuery(this).closest(\'table\').find(\'.question\').val();
var answer = jQuery(this).closest(\'table\').find(\'.answer\').val();
$.ajax({
url: \'<?php echo admin_url(\'admin-ajax.php\');?>\',
type: \'POST\',
data:{
action : \'update_records\',
update_record : id,
update_question : question,
update_answer : answer
},
success: function( data ){
// alert("Records are successfully updated");
}
});
});
所以我更改了id值,得到了每个字段的类,并使用了最近的函数。