$wpdb->INSERT在自定义表格中仅插入f字符

时间:2019-06-05 作者:Patrice Poliquin

我做了一个快速$wpdb->insert 使用AJAX函数添加内容的函数。

目标是将表单数据插入到表中。

下面是我调用ajax的Javascript函数:

$(".modal__form").submit(function(e){

            e.preventDefault();

            $.post(

                ajaxurl,
                {
                    \'action\': \'add_to_newsletter\',
                    \'param\': $(this).serialize()
                },
                function(response){

                    if(response == \'success\') {

                        $(\'.modal__form\').hide();
                        $(\'.modal__box .text__success\').show();
                    }
                }
            );

        });
标题中的表单数据可以打印为:

action: add_to_newsletter
param: firstname=FIRSTNAME&lastname=LASTNAME&email=EMAIL%40DOMAIN.COM&type=TYPE
在我的函数中,我有:

function add_to_newsletter() {

    global $wpdb;

    $table = $wpdb->prefix.\'newsletter\';
    $param = $_POST[\'param\'];

    if($wpdb->insert($table, array(

        \'firstname\' => $param[\'firstname\'],
        \'lastname\' => $param[\'lastname\'],
        \'email\' => $param[\'email\'],
        \'ip\' => $_SERVER[\'REMOTE_ADDR\']

        ),
        array( \'%s\', \'%s\', \'%s\', \'%s\')
    )) {

        var_dump($wpdb);
        echo \'success\';

    }
    else {

        $wpdb->print_error();
    }



    die();
}
add_action( \'wp_ajax_add_to_newsletter\', \'add_to_newsletter\' );
add_action( \'wp_ajax_nopriv_add_to_newsletter\', \'add_to_newsletter\' );
问题是,我在发布时只在数据库中找到奇怪的东西。

这是var_dump() 回来

"INSERT INTO \'actz_newsletter\' (\'firstname\', \'lastname\', \'email\', \'ip\') VALUES (\'f\', \'f\', \'f\', \'::1\')"
有人想过类似的事情吗?我对我的研究一无所知。

1 个回复
最合适的回答,由SO网友:nmr 整理而成

$_POST[\'param\'] 是字符串,不能将其视为数组。这就是为什么f 插入字符。

您有两个选项,在javascript中将数据准备为数组,或者在PHP端将字符串解析为数组。

第二个选项的示例代码:

$table = $wpdb->prefix.\'newsletter\';

// \'firstname=FIRSTNAME&lastname=LASTNAME&email=EMAIL%40DOMAIN.COM&type=TYPE\'
$input = explode( \'&\', $_POST[\'param\'] );
$param = array_reduce( $input, function( &$carry, $item ) {
            $parts = explode(\'=\', $item);
            $carry[ $parts[0] ] = urldecode( $parts[1] );
            return $carry;
        }, 
        array()
);

相关推荐

使用php变量使用WPDB搜索数据库

我正在尝试为我的网站数据库做一个基本的搜索功能。我想使用Wordpress和WPDB搜索自定义数据库表中的文本内容。出于某种原因,搜索没有从数据库返回任何内容,但我也没有收到任何错误消息。这是我的代码:第页。php:<form class=\"searchCV_form\" role=\"form\" action=\"\"> <div> <input type=\"text\" id=\"search_text\" name=\"