AJAX запрос некорректно передает данные в Mysql
Прошу помощи с составлением AJAX запроса для обработки записи в БД. Метод jQuery(this).serialize() отправляет строку в обработчик, который пишет данные в БД. Но! Если в поле и соот. в БД внести символы + или - то дальнейшее обновление становится невозможным.
Как правильно экранировать строку jQuery(this).serialize()? В самом скрипте или в обработчике ?
jQuery('#membersRoleForAdmin').submit(ajaxMemberRole);
function ajaxMemberRole(){
var memberRolesData = jQuery(this).serialize();
$.ajaxSetup({cache: false});
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
},
data: memberRolesData,
success:function(data){
$("#success_form").show();
setTimeout(function(){$('#success_form').fadeOut('slow')},1000);
}
});
return false;
}
Обработчик:
function updateMembersRole(){
global $wpdb, $current_user, $wp_roles;
wp_get_current_user();
$this_month_role = $wpdb->get_results(
"
SELECT
orders.order_id AS order_id,
users.ID AS user_id_check,
(select meta_value from wpux_usermeta where user_id = users.ID and meta_key = 'last_name' limit 1) as last_name,
(select meta_value from wpux_usermeta where user_id = users.ID and meta_key = 'wpux_capabilities' limit 1) as current_role,
(select meta_value from wpux_usermeta where user_id = users.ID and meta_key = 'workout_class' limit 1) as workout_class,
orders.director_comment
FROM wpux_orders orders, wpux_users users
WHERE MONTH(date) = 9
AND orders.user_email = users.user_email
AND orders.paid = '1'
AND orders.maraphon_next_month LIKE '%марафон%'
ORDER BY last_name
"
);
if( $this_month_role ) {
foreach ( $this_month_role as $string_report_data ) {
$current_user_id_for_output = $string_report_data->user_id_check;
$current_order_id_for_output = $string_report_data->order_id;
$dataRole1 = 'current_role_id_'.$current_user_id_for_output.'';
$current_role = $_POST[$dataRole1];
$dataRole2 = 'workout_class_id_'.$current_user_id_for_output.'';
$workout_class = $_POST[$dataRole2];
$dataRole3 = 'director_comment_id_'.$current_user_id_for_output.'';
$director_comment = esc_attr(sanitize_text_field($_POST[$dataRole3]));
//POST[$dataRole1]
$wpUser = get_userdata( $current_user_id_for_output );
$wpUser->set_role( $current_role );
//POST[$dataRole2]
if (isset($_POST[$dataRole2])){
update_user_meta( $current_user_id_for_output, 'workout_class', $workout_class );
};
//POST[$dataRole3]
if (!empty($_POST[$dataRole3])){
$wpdb->insert(
'wpux_orders',
array(
'director_comment' => $director_comment
),
array(
'order_id' => $current_order_id_for_output
)
);
};
} //Тело цикла
} //Тело первоначального условия
die();
}
add_action('wp_ajax_updateMembersRole', 'updateMembersRole');Ajax запрос связан с обработчиком через значение скрытого input'a
echo '<input type="hidden" name="action" value="updateMembersRole"/>'; echo '<input type="submit" id="updateuser" class="submit button" value="Записать">';
Вопрос так и не решил, подскажите, пожалуйста, как избавиться от символов + и - в строке?
В вашем коде(обработчике) нет передачи данных в запрос БД из Ajax-а.