PHP/MYSQL/jQuery Tiny comments system with multi ajax effects
[Edit] Overview This time, we are making a Simple AJAX Commenting System. It will feature a gravatar integration and demonstrate how to achieve effective communication between jQuery and PHP/MySQL with the help of JSON. See the demo | Download the files [Edit] Display The Comments PHP handles the communication with the MySQL database and generates the markup of the comments. It is also on the receiving end of the AJAX requests and inserts the comment data to the comments table in example i have articles site and when i go to open an article i'm using article.php?id=5 url, now to display the comments for this article you have to use unique id page_id in the comments table and each comment in this article will has 5 as page_id Comments ListWe will use the php comments( $page_id ) funtion to select the comments according to its $page_id value<?php
// your article id
$page_id = 5;
?>
<div class="comments">
<?php
foreach ((array) comments($page_id) as $comment) {
?>
<div class="comment shadow effect">
<p class="left tip" title="<?php echo $comment['username'];?> Said">
<img class="avatar" src="<?php echo get_gravatar($comment['email'],40);?>" />
</p>
<p class="body right">
<?php echo nl2br($comment['comment']);?>
<div class="details small">
<span class="blue"><?php echo timeBetween($comment['time'],time());?></span> · <a class="red" href="#" onclick="$(this).delete_comment(<?php echo $comment['id'];?>); return false;">Remove</a>
</div>
</p>
</div>
<?php
}
?>
</div>To add new comment<div class="add_comment">
<div class="write shadow comment">
<p class="left">
<img class="avatar" src="#" />
</p>
<p class="textarea right">
<textarea class="left" cols="40" rows="5"></textarea>
<input class="left" value="SEND" type="submit" />
</p>
</div>
<a onclick="$(this).add_comment(<?php echo $page_id;?>);return false;" class="right effect shadow" href="#">Add Comment</a>
</div>[Edit] Javascript We will use the jQuery and some plugins such as tipsy (to show the username on avatar hover) and the count down code Function add_comment( page_id )When you click add comment button This function will hide it and when you click send comment will send the comment data to the server via jquery post functionjQuery.fn.add_comment = function (page_id) {
var that = $(this);
// hide the "add comment" button then show the add comment box
that.hide(10, function () {
that.prev().show();
});
// in case of click the send button
that.parent().find('input[type=submit]').click(function () {
//your comment text
var value = $(this).prev().val();
//if your comment is too short
if (value.length < 3) {
//add red shadow on the textarea
$(this).prev().addClass('error');
return false;
} else {
var input = $(this);
//disable textarea and the send button
input.prev().attr('disabled', true);
input.attr('disabled', true);
//send the page_id,comment to the php via ajax
$.post("ajax.php", {
page_id: page_id,
comment: value
}, function (data) {
if (data.error) {
alert("Your Comment Can Not Be Posted");
} else {
//display the new comment (the new comment will be tha last one) you can use .prepend() to make it the first one
that.parent().prev('.comments').append('<div class="comment rounded5"><p class="left"><img class="avatar" src="' + data.avatar + '" /></p><p class="body right small">' + data.comment + '<br /><div class="details small"><span class="blue">' + data.time + '</span> · <a class="red" href="#" onclick="$(this).delete_comment(' + data.id + '); return false;">Remove</a></div></p></div>');
//empty the textarea
input.prev().val('');
}
//enable textarea and send button agian
input.prev().attr('disabled', false);
input.attr('disabled', false);
},'json');
}
return false;
});
};
Function delete_comment( id )jQuery.fn.delete_comment = function (id) {
var that = $(this);
that.hide(1, function () {
//show the count down text and cancel button
that.parent().append('<div class="timer">It will be removed in <span class="countdown red">30</span> seconds · <a class="stop blue" href="#">Cancel</a></div>');
//searh for the countdown class
timer = that.parent().find('.countdown');
//start the count down
timer.show().countDown({
startNumber: 30,
startFontSize: '12px',
endFontSize: '12px',
//when the count down be 1
callBack: function () {
//send the comment id to the server
$.post("ajax.php", {
remove: id
}, function (data) {
//if the server return back done (the comment deleted)
if (data.status == 'done') {
//delete it from the page too
that.parents('.comment').remove();
} else {
$('.stop').click();
}
}, 'json');
}
});
});
//when click cancel button
$('.stop').live('click', function () {
var parent = $(this).parent();
//find the countdown and stop it
parent.find('.countdown').stop();
parent.prev().show(1, function () {
parent.remove()
});
return false;
});
};
[Edit] Save & Remove
this an example of ajax.php page include_once ('php/functions.php');
// if you trying to delete
if(isset($_POST['remove'])){
//make it save
$id = intval($_POST['remove']);
//remove the comment from the database
if(mysql_query("DELETE FROM `comments` WHERE `id` = $id")){
exit(json_encode(array('status' => 'done')));
}
}
if(isset($_POST['page_id']) and isset($_POST['comment'])){
$user_id = 0;//your current user id (use 1 to comment as Billa)
$page_id = intval($_POST['page_id']);
$comment = mysql_escape_string($_POST['comment']);
$time = time();
if(mysql_query("INSERT INTO `comments` (`user_id`, `page_id`, `comment`, `time`) VALUES ($user_id, '{$page_id}', '{$comment}', '{$time}')")){
$id = mysql_insert_id();
$row = single_comment($id);
exit(json_encode(array(
'id' => $id,
'avatar' => ($row['user_id']) ? get_gravatar($row['email'],40) : '#',
'time' => timeBetween($row['time'],time()),
'comment' => $row['comment'],
)));
}
}
Don’t be Afraid to Ask for Help
It’s only human nature to want to hide the fact that we don’t know much about a certain topic. Nobody likes being a n00b! But how are we going to learn without asking? Feel free to use our problems section to ask more seasoned PHP developers questions.
|
© Advanced Web Core. All rights reserved

