[wp-hackers] Ajax Button Submission Failing - 50% of the time? Comment Voting Plugin Help

BenderisGreat greglancaster71 at gmail.com
Mon Nov 18 06:21:36 UTC 2013


I wrote this code today, and I cant figure why half the time the json
response is a failure.  Its a comment voting plugin, and its my second
plugin I have ever coded.  Could you guys please take a look and if
something stands out as an obvious issue share that with me?  

The idea was to have a reddit.com style voting system.  You can click upvote
or downvote - and if you have already upvoted and click upvote it removed
your vote alrogether.  Same goes for downvote.  The codes record in the
database about 40% of the time from my testing.  The comments I am testing
on ARE threaded, and I thought maybe that played a role but looking at the
comment IDs they all match up so I am unsure what the cause could be.

Here is the entirety of my code:

*CREATE DB CODE: *
function ams_comment_voting_database() 
	{
   	global $wpdb;
  	global $ams_comment_voting;
	$ams_comment_voting = $wpdb->prefix . 'ams_comment_voting';
	
if($wpdb->get_var("show tables like '$ams_comment_voting'") !=
$ams_comment_voting) 
	{

$sql = "CREATE TABLE ". $ams_comment_voting ." (
	id mediumint(9) NOT NULL AUTO_INCREMENT,
	voter_id int(6) NOT NULL,
	comment_id int(6) NOT NULL,
	comment_pid int(6) NOT NULL,
	author_id int(6) NOT NULL,
	vote_value tinyint(1) NOT NULL,
	UNIQUE KEY id (id)
	PRIMARY KEY (voter_id, comment_id) 
);";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
	$wpdb->query($sql);
	}
}

register_activation_hook(__FILE__,'ams_comment_voting_database');



* VOTING FUNCTIONS & SCRIPTS *

<?php //comment voting system
add_action( 'wp_enqueue_scripts', 'amc_comment_vote_ajax' );

function amc_comment_vote_ajax() {
   wp_register_script( "amc_comment_vote",
WP_PLUGIN_URL.'/vote_comm/js/amc_comment_vote.js', array('jquery') );
   wp_localize_script( 'amc_comment_vote', 'anotherAjax', array( 'ajaxurl'
=> admin_url( 'admin-ajax.php' )));        

   wp_enqueue_script( 'jquery' );
   wp_enqueue_script( 'amc_comment_vote' );

}


function ams_comment_vote_count($content) {
	global $wpdb, $comment;
	  
	$comment_ID = get_comment_ID();
	$comment = get_comment($comment_ID);
		$cuid = $comment->comment_ID;
	$vote_up = '<button id="upvote" type="button"
data-comment="'.$comment_ID.'"></button>';
	$vote_down = '<button id="downvote" type="button"
data-comment="'.$comment_ID.'" ></button>';

	$count_votes = $wpdb->get_col( $wpdb->prepare ( "SELECT SUM(vote_value)
FROM ".$wpdb->prefix."ams_comment_voting WHERE comment_id = %d",
$comment_ID));
	foreach ($count_votes as $id => $cID) {
		
	if (!$cID) {
	return '<div id="vote_buttons"><div class="votes">0</div> Votes' . $vote_up
. $vote_down . '<br></div>' . $content;
	}

	return '<div id="vote_buttons"><div class="votes">' . $cID . '</div> Votes'
. $vote_up . $vote_down . '<br></div>' . $content;
	}
}
add_action('comment_text', 'ams_comment_vote_count');


add_action('wp_ajax_amc_comment_vote', 'amc_comment_vote');
add_action('wp_ajax_nopriv_amc_comment_vote', 'amc_comment_vote');
function amc_comment_vote() {
	global $wpdb, $comment, $post, $current_user;
      get_currentuserinfo();
	  
	
	$cID = $_POST['commentid'];
	$voter_id = $current_user->ID;
		$grabFromCID = get_comment($cID);

	$author_id = $grabFromCID->user_id;
	$comment_post_id = $grabFromCID->comment_post_ID;
	$vote_replace = '';

	
	$vote_direction = $_POST['direction'];
		$voteValueArray = array(    'upvote' => 1,        
									'downvote' => -1,
									 );
		if( array_key_exists( $vote_direction, $voteValueArray ) ){
		$vote_value = $voteValueArray[ $vote_direction ];
		} else { $vote_value = 0; }
		

	
$alreadyVotedUp = $wpdb->get_row( $wpdb->prepare ( "SELECT * FROM
".$wpdb->prefix."ams_comment_voting WHERE comment_id = %d AND voter_id =
%d", $cID, $voter_id));

if (isset($alreadyVotedUp)) {
	
	$current_value = $alreadyVotedUp->vote_value;
	$replaceVoteValue ='';
	if ($current_value  === 1 && $vote_value === 1) {
		$replaceVoteValue = 0;
	} elseif ($current_value  === 1 && $vote_value === -1) {
		$replaceVoteValue = -1;
	} elseif ($current_value  === -1 && $vote_value === 1) {
		$replaceVoteValue = 1;
	} elseif ($current_value  === -1 && $vote_value === -1) {
		$replaceVoteValue = 0;
	} elseif ($current_value  === 0 && $vote_value === 1) {
		$replaceVoteValue = 1;
	} elseif ($current_value  === 0 && $vote_value === -1) {
		$replaceVoteValue = -1;
	}

} else {
	$replaceVoteValue = NULL;
}



$tableName = $wpdb->prefix . 'ams_comment_voting';
		
$sql = $wpdb->prepare("INSERT INTO $tableName (`voter_id`, `comment_id`,
`comment_pid`, `author_id`, `vote_value`) VALUES (%d, %d, %d, %d, %d) ON
DUPLICATE KEY UPDATE vote_value = %d", $voter_id, $cID, $comment_post_id,
$author_id, $vote_value, $replaceVoteValue);
	
		
		
$wpdb->query($sql);

		
		$response = array( 'success' => true ); 
		wp_send_json_success($response);
		
		die();

}


*THE JQUERY / AJAX SUBMISSION *

jQuery( document ).ready( function( $ ) { 
	$( 'button#upvote, button#downvote').click( function() { 			
	
	 
	 $(this).css('color', 'red');
	 $upVoteButton = $( 'button#upvote' );
	 
	 $clickedButton = $(event.target);
	 var commentid = $(event.target).attr('data-comment');
	 var direction = $(event.target).attr('id')
	
var data = { 
	'action': 'amc_comment_vote', 
	'commentid': commentid,
	'direction': direction
} 

$.ajax({ 
	type: 'post',
	url: anotherAjax.ajaxurl, 
	data: data,
	success: function ( response ) { 
	if ( ! response.success ) { 

	alert( 'FAIL!' ); 
    }
            else {
	alert( 'Success!' ); 
	$clickedButton.parent().siblings('.votes').html(function(i, val) { return
+val+1 });
	} 
	}
}); 
  }); 
  }); 



--
View this message in context: http://wordpress-hackers.1065353.n5.nabble.com/Ajax-Button-Submission-Failing-50-of-the-time-Comment-Voting-Plugin-Help-tp42870.html
Sent from the Wordpress Hackers mailing list archive at Nabble.com.


More information about the wp-hackers mailing list