我创建了一个简单的like系统,用户可以单击like按钮,like计数将增加一。如果他已经喜欢这个按钮,并且他再次喜欢这个按钮,那么它将减少like计数。就像脸书一样。
下面是一个添加或删除like计数的函数。(此代码将从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。如果新用户单击like按钮,则计数将为6。如果他喜欢巴顿,计数将是5。因此,当用户反复单击like按钮时,计数将在5和6之间切换。这就是我们所期望的。
像这样:
问题是,如果用户快速单击按钮。每秒说3-4次,则计数不会在5到6之间切换。有时是8,有时是3。就像这个截图
为什么会这样。
我们甚至不能责怪ajax,因为他们完全是客户端,客户端可以做任何他们想做的事情,不是吗?那么php代码有什么问题呢。。
挖掘了几个小时,但仍然没有解决方案和解决方法:(