Php 从数据库获取数据并使用它完成表单-Wordpress

Php 从数据库获取数据并使用它完成表单-Wordpress,php,jquery,ajax,database,wordpress,Php,Jquery,Ajax,Database,Wordpress,我有以下文件: 主插件文件: <?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: GP

我有以下文件:

主插件文件:

<?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');
    }
我如何正确地实现这一点?我第一次做插件的时候,我读了很多关于它的书,看到了很多例子,但是我没有正确地实现它

编辑:

如果我将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]);
            }
好了,你到了。 首先,本地化脚本时,添加一个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();
}
然后,要使functiont 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调用仍然有一些问题:数据:{action:'getuser',this.value},这似乎也有问题,这是后端的代码吗?因为验证nonce会得到错误“未授权!”。还编辑了我的OP,似乎有一小部分JS不起作用。你需要将nonce也添加到JS调用中以使其起作用,更新了我的答案…你把wp_ajax挂钩放在哪里了?WP可能没有看到它们。还有很多其他的事情没有正常工作(比如忘记在php脚本末尾添加die()),现在一切都正常了!谢谢你!
//ajax hooks
add_action( 'wp_ajax_nopriv_getuser', 'getuser' );
add_action( 'wp_ajax_getuser', 'getuser' );
$.post(myAjax.ajaxurl,
     {
        action : 'getuser',
        _nonce : myAjax.nonce, 
        value : $(this).value
     },
     function( response ) { ... });