我正在使用AJAX,PHP和MySQL。在下面我的PHP代码:
if(isset($_GET['postTextComment'])){
// The text of the comment
$htpc = htmlspecialchars($_GET['postTextComment'];);
// ID of post, where comment was written on (comes from hidden input field in HTML)
$postid = $_GET['pid'];
// ID of the user written the comment
$myid = getUID();
// CHECK IF COMMENT IS A STRING
if(is_string($htmlpostcomment)){
// CHECK IF POST ID IS A NUMBER
if(is_numeric($postid)){
// CHECK IF POST IS EMPTY
if($htmlpostcomment == "") {
$errors = "Write something! Nyaaa~";
// OR OVER 3K LETTERS
} elseif($htmlpostcomment > 3000) {
$errors = "Too long! Nyaaa~";
} else {
$insertion = $mysql->prepare("INSERT INTO home_posts_comments (uid,pid,html,timestamp) VALUES (?,?,?,?)");
$insertion->bind_param('ssss', $myid, $postid, $htpc, $posted_on);
$insertion->execute();
echo $htpc;
}
} else {
$errors = "NYAAAA!~~~~~";
}
} else {
$errors = "NYAAAA!~~~~~";
}
}
我在检查,如果通过HTML中的输入字段发送的文本是一个字符串,那么评论最终应显示的帖子的ID是否为数字。还有一些关于空输入的其他验证等。
现在我的AJAX:
$(document).on('click', '[data-action="post-comment"]', function(e) {
// Stored id of the post, where comment should show up lately
var postcomment_where = $(this).data('storeid');
// Value of the comment-input field
var commentLength = $('#posting-comment-data input[data-storeid="'+postcomment_where+'"]').val();
/* (...Some validations...) */
var data = $('#posting-comment-data[data-storeid="'+postcomment_where+'"]').serialize();
$.ajax({
data: data,
type: "get",
url: "/assets/templates/functions/home/post_comment.php",
beforeSend: function(data){
/* (...Show loader...) */
},
success: function(data){
/* (...Hide loader, append post in post section...) */
},
error: function(data){
/* (...Show some error...) */
}
});
}
相同的checkt仅用于前端,以便为用户提供更高的响应能力。
最后我的HTML,这是我正在努力的事情:
<form id="posting-comment-data" data-storeid="(...ID of post...)" onsubmit="return false;">
<!--- Comment text input field --->
<input type="text" placeholder="Comment this..." name="postTextComment" id="postTextComment" data-storeid="(...ID of post...)">
<!--- Stored ID of the post, where the comment shall show up lately --->
<input type="hidden" name="pid" value="(...ID of post...)" autocomplete="off">
<!--- Submit Button --->
<button type="button" id="post-button-comment-(...ID of post...)" class="cs-button-send" data-storeid="(...ID of post...)" style="display:none;" data-action="post-comment">
Submit comment
</button>
</form>
现在的biiiig问题是,人们可以只为每个提示器打开开发人员工具,并在隐藏的输入字段中更改帖子的ID,以便评论显示在不同的帖子上。我一直在努力解决这个问题,但似乎我没有找到一个好的解决方案。
数据库中的表包含唯一的帖子ID,用户ID,文本和时间戳的行。
答案 0 :(得分:1)
用户是否需要登录才能发表评论?如果是,您可以将其保存在服务器会话变量中。用户无法更改。
用户加载页面后,设置会话变量。然后在ajax提交上通过$_SESSION['someid']
访问该数据,然后更新数据库。