Intereting Posts
PHP, отображающий неправильные изображения таксономии Как noindex nofollow пользовательский тип сообщения? Категория Thumbnail Display – Как отображать ТОЛЬКО основную категорию Пользовательский тип архива Добавление кнопки загрузки мультимедиа на страницу профиля пользователя (в соответствии с руководством) Панели параметров темы. Каковы некоторые примеры из рамок или премиум-тем? Суррогатный идентификатор для сообщений, есть ли альтернативное поле в таблице сообщений? Параметры темы WordPress Программно обновлять пользовательские атрибуты WooCommerce Классический, но озадачивающий «Загруженный файл не может быть перемещен» Ошибка возврата по ссылке на пользовательский термин 404 Как создать собственную страницу администратора и настройки тем? Включение XSendFile вызывает 404 для изображений на WordPress Multisite / Network Исключить текущую должность при получении связанной должности в пользовательском типе сообщений и таксономии Как изменить текст: Нажмите «Название события» для описания / регистрации

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 – если нет, увеличьте счетчик, если так что декремент.