如何验证,帖子上写的评论是否真的被写入该帖子?

时间:2018-02-21 14:49:22

标签: php jquery html mysql ajax

我正在使用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,文本和时间戳的行。

1 个答案:

答案 0 :(得分:1)

用户是否需要登录才能发表评论?如果是,您可以将其保存在服务器会话变量中。用户无法更改。

用户加载页面后,设置会话变量。然后在ajax提交上通过$_SESSION['someid']访问该数据,然后更新数据库。