我正在学习如何在我正在编写的新插件的管理中使用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\')
但是,没有向表中添加任何内容。
此外,我更希望只刷新管理页面的一部分,其中表显示表的所有值,而不是整个页面,但我还没有弄清楚这一点。
感谢您的帮助!
最合适的回答,由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安装时就不会出现问题。