【问题标题】:Getting data from database and use it to complete a form - Wordpress从数据库中获取数据并使用它来完成表格 - Wordpress
【发布时间】:2014-10-23 08:18:23
【问题描述】:

我有以下文件:

主插件文件:

<?php

    /*
    Plugin Name: FixFormData
    Description: If you want to autocomplete a form with existing data, this plugin is for you.
    Version: 1.1
    Author: Stijn Aerts
    Author URI: http://stijnaerts.be
    License: GPL2
    */

    require( plugin_dir_path( __FILE__ ) . 'menu.php');
    require_once( plugin_dir_path( __FILE__ ) . 'getuser.php');


    add_action( 'wp_enqueue_scripts', 'ffd_load_scripts' );

    function ffd_load_scripts()
    {
        wp_register_script('ffd_js_script', WP_PLUGIN_URL.'/FixFormData/js/ffd_js_script.js', array('jquery'));
        wp_localize_script('ffd_js_script', 'myAjax', array(
            'ajaxurl' => admin_url('admin-ajax.php')
            )
        );

        wp_enqueue_script('jquery');
        wp_enqueue_script('ffd_js_script', plugin_dir_url(__FILE__) . 'js/ffd_js_script.js');
    }

getuser.php:

<?php
 function getuser($str)
{
    global $wpdb;

    $myoption =  get_option( 'fixformdata_options' );
    $myoptionValue = maybe_unserialize( $myoption );    

    $result2 = $wpdb->get_row
    (
        $wpdb->prepare
        (
            "SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %d", $str
        )
    );

    if($result2) 
    {
        echo  json_encode( $result2 );
    }
}
?>

ffd_js_script.js:

jQuery(document).ready(function($){
    jQuery('#input_1_2').change(function()
    {
        jQuery.ajax({
            type : 'post',
            dataType : 'json',
            url : myAjax.ajaxurl,
            data : {action: 'getuser', this.value},
            succes: function(response){
                var parsed = JSON.parse(response);
                var arr = [];
                for(var x in parsed){ arr.push(parsed[x]);}
                jQuery('#input_1_3').val(arr[1]);
                jQuery('#input_1_4').val(arr[2]);
            }
        })
    });
});

我该如何正确实施呢?我第一次制作插件,我已经阅读了很多关于它的内容并看到了很多示例,但我未能正确实现。

编辑:

如果我将 sql 语句替换为以下内容:

"SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %s", 1

由于以下代码,我在控制台中获得了结果:

echo  json_encode( $result2 );

所以下面的代码没有正确执行:

succes: function(response){
                var parsed = JSON.parse(response);
                var arr = [];
                for(var x in parsed){ arr.push(parsed[x]);}
                jQuery('#input_1_3').val(arr[1]);
                jQuery('#input_1_4').val(arr[2]);
            }

【问题讨论】:

    标签: php jquery ajax database wordpress


    【解决方案1】:

    好的,你到了那里。 1st 当您本地化脚本时,添加一个 nonce 以获得更好的安全性:

    wp_register_script('ffd_js_script', WP_PLUGIN_URL.'/FixFormData/js/ffd_js_script.js', array('jquery'));
    wp_localize_script('ffd_js_script', 'myAjax', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce'   => wp_create_nonce( 'ajax-nonce' )
        )
    );
    

    然后,你需要将getuser.php放在插件可以看到的地方,所以一定要包含它或者放在插件的主文件中

    function getuser($str)
    {
        global $wpdb;
    
        //verify the nonce
        if ( ! wp_verify_nonce( $_REQUEST['_nonce'], 'ajax-nonce' ) )
            die ( 'Non autorizzato!');
    
        $myoption =  get_option( 'fixformdata_options' );
        $myoptionValue = maybe_unserialize( $myoption );    
    
        $result2 = $wpdb->get_row
        (
        $wpdb->prepare
        (
            "SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %d", $str
        )
        );
    
        if($result2) 
        {
        echo  json_encode( $result2 );
        }
    
        die();
    }
    

    然后,要使函数 getuser 可从 ajax 调用,您需要进行正确的挂钩:

    //ajax hooks
    add_action( 'wp_ajax_nopriv_getuser', 'getuser' );
    add_action( 'wp_ajax_getuser', 'getuser' );
    

    在js中,你也需要传递nonce:

    $.post(myAjax.ajaxurl,
         {
            action : 'getuser',
            _nonce : myAjax.nonce, 
            value : $(this).value
         },
         function( response ) { ... });
    

    其余的js看起来不错,请原谅我的一些错别字,我在这里写的,所以它没有测试。

    【讨论】:

    • 好的,我添加了所有内容,但是我在 JS 中的 ajax 调用仍然有问题:data : {action: 'getuser', this.value},这似乎是错误的
    • 另外,这是后端的代码吗?因为验证随机数让我得到错误“未授权!”。还编辑了我的 OP,似乎有一小部分 JS 不起作用。
    • 您还需要将 nonce 添加到 js 调用中以使其工作,更新我的答案...
    • 你把 wp_ajax 钩子放在哪里了? WP 可能没有看到它们。
    • 还有其他各种无法正常工作的事情(比如忘记在 php 脚本末尾添加 die()),现在一切正常!谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2013-09-02
    • 2016-07-30
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多