数据不能通过管理页面中的AJAX和jQuery插入和更新?

时间:2021-01-15 作者:vishal

我制作了自定义插件并完成了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

2 个回复
最合适的回答,由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值,得到了每个字段的类,并使用了最近的函数。

相关推荐

使用不起作用的jQuery请求在WP中指定相对文件路径

为什么WP似乎要求我使用整个真实的文件路径,而不是使用相对的文件路径?我知道为了安全起见,最好不要使用真正的文件路径。在我的一个函数中,我指定了。已找到php文件。似乎无论我做什么,我都无法让我的函数指向查找文件。php文件所在的完整目录domain_name/public_html/wp-content/mythemename/assets/php/select-change.php需要查找我的php 文件:jQuery.post("assets/php/select-change.php&q