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-а.