插件AJAX保存到定制表

时间:2013-06-12 作者:jgravois

我正在学习如何在我正在编写的新插件的管理中使用AJAX。在PHP中,我有以下函数:

function ppmhnh_add_location(){
    global $wpdb;
    $values = array();
    parse_str($_POST[\'form\'], $values);
    $sql = "INSERT INTO ppm_hoopsandhits_locations VALUES (\'{$values[\'locale\']}\', \'{$values[\'locale_city\']}\', \'{$values[\'locale_state\']}\')";
    $wpdb->query($sql); 
    echo "Added successfully!";
    die();
}
add_action(\'wp_ajax_ppmhnh_new_location\',\'ppmhnh_add_location\');
javascript使用以下内容:

$(\'#newLocation\').submit(function(e){
        $(\'#wait-gif\').show();
        $(\'#btnAddLocation\').attr(\'disabled\', true);
        data = {
            action: \'ppmhnh_new_location\',
            form: $(this).serialize()
        };

        $.post( ajaxurl, data, function(response){
            alert(response);
            $(\'#wait-gif\').hide();
            $(\'#btnAddLocation\').attr(\'disabled\', false);
            location.reload();
        });
        return false;
    });
如果我在响应中回显$sql,则得到正确的sql语句

INSERT INTO ppm_hoopsandhits_locations VALUES (\'100 Midtown\', \'Atlanta\', \'GA\')
但是,没有向表中添加任何内容。

此外,我更希望只刷新管理页面的一部分,其中表显示表的所有值,而不是整个页面,但我还没有弄清楚这一点。

感谢您的帮助!

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

请使用可用的API-因为你在你的问题中有它,我可以在一秒钟内取下你的整个网站。(我在Data Sanitization and Validation - 最后一节与您特别相关)。

至于它没有插入数据,你应该检查一下WP_DEBUG 并打印$wpdb->query( $sql ) 回应。但无论如何,最好(安全和整洁)执行以下操作:

$wpdb->insert(  
    \'ppm_hoopsandhits_locations\', 
    array( 
      \'locale\' => $values[\'locale\'], 
      \'locale_city\' => $values[\'locale_city\']
      \'locale_state\' => $values[\'locale_state\']
    ), 
    array( \'%s\', \'%s\', \'%s\' )  
); 
其中,“locale”、“locale\\u city”等是列的名称。

此外,如果这是公开发布的,则应在表名前面加上$wpdb->prefix 这样,当同一数据库中存在多个wordpress安装时就不会出现问题。

结束

相关推荐

如何使用AJAX加载WordPress侧边栏

我在我的网站上使用响应式设计。一切都很好,只是在手机上,我的网站太长了。对于一个移动屏幕来说,内容太多了——侧边栏占用了太多的垂直空间,其中包含了很多小部件,如流行帖子、最近的评论等。为了使网站更小,如果从小屏幕查看,我希望侧边栏完全不加载。我不想将display:hidden应用于侧栏容器。那太愚蠢了。因此,最有效的方法是使用AJAX加载侧栏,如果视口宽度小于800px,则将其排除。谁能告诉我这是否可能?如果可以做到这一点,请给出一些示例和一些教程的链接。我在google上搜索了很多,但只找到了一个教程