Intereting Posts
Переместить одно значение параметра в другой параметр Избегайте регистрации пользователей конкретным поставщиком электронной почты Как программно добавить пользователя в роль? Структурирование каталога продуктов в WordPress Показать сообщения, используя идентификаторы сообщений в массиве Как перенаправить один адрес администратора на другой, когда URL-адрес страницы администратора содержит «/admin.php?page=»? wp_enqueue_script () не работает вообще как включить файл манифеста json в плагин wp Добавление уникальных маркетинговых сообщений между определенными продуктами при использовании изотопа / Бесконечного прокрутки Как вызвать виджет по идентификатору виджета? Кэширование данных плагина RSS Почему некоторые пользовательские файлы javascript работают, но некоторые из них не являются как печатать метки тегов Как получить доступ к данным wp_usermeta сразу после создания нового пользователя Задача TinyMCE Advanced newline

AJAX не работает с базой данных WordPress правильно

Я создал простую систему, в которой пользователь может щелкнуть по кнопке, и подобное число будет увеличиваться на единицу. И если ему уже понравилась кнопка, и ему нравится кнопка снова, тогда она уменьшит счетчик. Как и в facebook, что в facebook.

вот функция, которая добавляет или удаляет счетчик. (этот код будет вызываться из системы wordpress ajax)

function like_process(){ global $wpdb; verify_nonce($_POST['nonce'],"like_system"); $id = intval( $_POST['Post_ID'] ); $like_the_post = intval( $_POST['like_the_post'] ); $userid=get_current_user_id(); $like_count = $wpdb ->get_row( "SELECT likes FROM {$wpdb->prefix}likes_counter WHERE post_id = '$id'" , ARRAY_N ); $like_count=do_if_like_is_less_than_0($like_count); if( $like_count == null ) : $wpdb ->insert ('wp_likes_counter' ,array('post_id' => $id ,'likes' => 1,"ip_address"=>get_client_ip(),"user_id"=>$userid,"like_time"=>time()),array('%d' ,'%d','%s','%d',"%d")); die("added"); else: if($like_the_post==true): $wpdb ->update ('wp_likes_counter' ,array('post_id' => $id ,'likes' => $like_count["0"]+1,"ip_address"=>get_client_ip(),"user_id"=>$userid,"like_time"=>time()),array('post_id' => $id ), array('%d' ,'%d','%s','%d',"%d"),array( '%d')); die("added"); else: $wpdb ->update ('wp_likes_counter' ,array('post_id' => $id ,'likes' => $like_count["0"]-1,"ip_address"=>get_client_ip(),"user_id"=>$userid,"like_time"=>time()),array('post_id' => $id ), array('%d' ,'%d','%s','%d',"%d"),array( '%d' ) ); die("removed"); endif; endif; die('nothing happened!!!'); } 

Предположим, что у нас есть счет 5. Если новый пользователь нажимает кнопку, то счет будет 6. Опять же, если он, как кнопка, будет равен 5. Таким образом, подсчет будет переключаться между 5 и 6, когда пользователь будет нажимать кнопку снова и снова. Это то, что мы ожидаем.

Как это :

введите описание изображения здесь

Проблема. Но если пользователь нажимает кнопку очень быстро. Скажем, 3-4 раза в секунду, тогда счетчик не будет переключаться между 5 и 6. Иногда он уходит 8 через некоторое время. 3. Как этот скриншот введите описание изображения здесь Почему это происходит.

И мы не можем даже обвинять аякс, поскольку они полностью клиентской, и клиент может делать все, что захочет, не так ли? Так что проблема с php-кодом ..

Копается в течение нескольких часов, но до сих пор нет решения, а также обходное решение 🙁

Solutions Collecting From Web of "AJAX не работает с базой данных WordPress правильно"

Я думаю, что ваша проблема здесь:

$like_the_post = intval( $_POST['like_the_post'] );

Вы полагаетесь на вход POST пользователя браузера, чтобы определить, нужно ли увеличивать или уменьшать счет. Когда пользователь быстро нажимает кнопку, вызов AJAX еще не завершил и изменил ввод формы с true на false (или наоборот наоборот). Кроме того, этот подход может быть распущен скриптом, который несколько раз нажимает на ваш сценарий AJAX с этим значением, установленным на «true», чтобы искусственно раздуть «понравилось» на почте.

Поскольку, похоже, вы отслеживаете user_id, когда кто-то нажимает кнопку, я предлагаю изменить код AJAX, чтобы вы сначала проверили, есть ли у пользователя уже запись для этого post_id – если нет, увеличьте счетчик, если так что декремент.