Ajax сохраняет данные в базу данных по готовому документу, данные не сохраняются

Я написал плагин, который собирает статистику по документу.

Имейте в виду, что моя таблица базы данных уже создана.

Я добавил следующий код, чтобы сделать код ajax

add_action( 'wp_head', 'zkr_stats_ajax' ); function zkr_stats_ajax(){ ?> <script type='text/javascript' > jQuery(document).ready(function() { //jQuery(window).load(function() { //set data varialbel with values var data = { action: 'action_stats', zkr_filename: '<?php echo $_SERVER['PHP_SELF']; ?>', zkr_ip: '<?php echo $_SERVER['REMOTE_ADDR']; ?>', zkr_referer: '<?php if(isset($_SERVER['HTTP_REFERER'])){ echo $_SERVER['HTTP_REFERER'];}else{ } ?>', zkr_browser: '<?php echo $_SERVER['HTTP_USER_AGENT']; ?>', zkr_method: '<?php echo $_SERVER['REQUEST_METHOD']; ?>' }; var ajaxurl = '<?php admin_url('admin-ajax.php'); ?>'; // set the admin ajax url jQuery.post(ajaxurl, data, function(response) { }); }); </script> <?php } 

Затем есть функция, которая обрабатывает данные, отправляемые из вышеописанного ajax, и сохраняет данные в таблице базы данных mysql.

 add_action('wp_ajax_nopriv_action_stats', 'zkr_stats_update'); //ajax callback function zkr_stats_update(){ global $wpdb; if(isset($_POST)){ $filename = $_POST['zkr_filename']; $ip = $_POST['zkr_ip']; $referer = $_POST['zkr_referer']; $browser = $_POST['zkr_browser']; $method = $_POST['zkr_method']; $table_name = $wpdb->prefix . "zkr_stats"; $row = $wpdb->get_results( "SELECT * FROM ".$table_name." WHERE ip = '$ip' "); if($wpdb->num_rows == 0){ $num = 1; $wpdb->query( $wpdb->prepare( "INSERT INTO ". $wpdb->prefix ."zkr_stats(ip, filename, referer, browser, method, timestamp, number) VALUES('".$ip."', '".$filename."', '".$referer."', '".$browser."', '".$method."', NOW(), '".$num."')" )) or wp_die( 'Could not save data!' ); //insert new data if the current ip was not used before } elseif($wpdb->num_rows == 1){ foreach($row as $rows){ $num = $rows->number + 1; } $wpdb->query( $wpdb->prepare( "UPDATE ".$table_name." SET number = '".$num."' WHERE ip = '".$ip."'" ))or wp_die( 'Could not update data!' ); //update visit data for old ip } } } 

Теперь, когда страница загружается, я вижу в firebug, что данные отправляются через ajax, но ничего не сохраняется.

Только когда я добавляю функцию zkr_stats_update () в заголовок темы, она сохраняет ее, а затем сохраняет два, один пустой и один с данными.

Что я делаю не так?

Спасибо, парни

Solutions Collecting From Web of "Ajax сохраняет данные в базу данных по готовому документу, данные не сохраняются"

То, как вы используете $wpdb->prepare ничего не помогает. Вы должны правильно подготовить значения, а затем добавить их, как с sprintf как %s или %d .

О, и я не верю, что «работаю с WP ajax больше года». В этом случае вы также знаете о крючках nopriv для публичного использования 🙂

 add_action( 'wp_ajax_nopriv_action_stats', ... 

Я думаю, проблема в том, что if(isset($_POST)) возвращает false, и ни один из них не выполняется.

Попробуйте удалить его или даже лучше создать переменную ответа, чтобы вернуться к Ajax, чтобы вы могли проверить ее в Firebug.

 if(isset($_POST)){ $response = 'Post returned true'; // Your database code } else { $response = 'Post returned false'; } echo $response; die(1); 

Хорошо, я решил проблему.

Мне пришлось изменить ajaxurl на MyAjax.ajaxurl

  jQuery.post(MyAjax.ajaxurl, data, function(response) { }); 

В моем php-коде мне пришлось добавить следующее

 function my_scripts_method() { wp_enqueue_script( 'jquery' ); // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php) wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } add_action('wp_enqueue_scripts', 'my_scripts_method'); 

Не делая ничего выше ничего не работало, самой важной частью была часть wp_localize_script

Я надеюсь, что это поможет кому-то еще, когда они застрянут?

Спасибо за помощь всем, даже ты не смог мне полностью помочь 🙂