0

私はコメントシステムを持っているので、送信ボタンが押されると、コメントがデータベースに送信され、ページのコメントリストに追加されます。

コメント.php

    <div id="comments" itemscope itemtype="http://schema.org/UserComments">
                              <?php do { ?>
            <div class="comment shadow effect">
                    <p class="left tip" title="<?php echo $row_getComments['comment_author'];?> Said">
                     <img class="avatar" src="<?php echo $row_getComments['avatarurl'];?>" /></p>
                          <p class="body right" itemprop="creator"><?php echo $row_getComments['comment_entry'];?></p>

                    <div class="details small">
                        <span class="blue"><?php echo timeBetween($row_getComments['communt_date'],time());?></span> · <a class="red" href="#" onclick="$(this).delete_comment(<?php echo $row_getComments['comment_id'];?>); return false;">Remove</a>
                    </div>
                </div>
                            <?php } while ($row_getComments = mysql_fetch_assoc($getComments)); ?>
                            </div>

    //Add Comment//
                            <div class="add_comment">
            <div class="write shadow comment">
                <p class="left">
                    <img class="avatar" src="#" />
                </p>

                <form method="POST" name="addcomment">
<p class="textarea right"><input type="hidden" name="username" value="<?php echo $_SESSION['username'];?>" />
                    <textarea class="left" cols="40" rows="5" name="post_entry"></textarea>
        <input class="left" value="SEND" type="submit" />
                   </p> </form>

            </div>
            <a onclick="$(this).add_comment(<?php echo $row_getSinglePost['post_id'];?>);return false;" class="right effect shadow" href="#">Add Comment</a>
        </div>

ajax.js - これが情報の送受信方法です。送信ボタンがグレー表示されているため、機能することはわかっています

 jQuery.fn.add_comment = function (page_id) {
var that = $(this);

that.hide(10, function () {
    that.prev().show();
});

that.parent().find('input[type=submit]').click(function () {
    var value = $(this).prev().val();
    if (value.length < 3) {
        $(this).prev().addClass('error');
        return false;
    } else {
        var input = $(this);
        input.prev().attr('disabled', true);
        input.attr('disabled', true);
        $.post("ajax.php", {
            post_id: page_id,
            comment: value
        }, function (data) {
            if (data.error) {
                alert("Your Comment Can Not Be Posted");
            } else {
                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>');
                input.prev().val('');
            }
            input.prev().attr('disabled', false);
            input.attr('disabled', false);
        },'json');

    }
    return false;
});

};

ajax.php

require_once('connections/Main.php');
$username = $_SESSION['username'];
mysql_select_db($database_Main);
function getavatar($username){
    $result = mysql_query("SELECT profile_pic FROM `users` WHERE `username` = '$username' LIMIT 1");
    $row = mysql_fetch_row($result);
    return $row[0];
}
    if(isset($_POST['post_id']) and isset($_POST['comment'])){
        $post_id = intval($_POST['post_id']);
        $comment = mysql_escape_string($_POST['comment']);
        $time = time();
        $insertcom = mysql_query("INSERT INTO `blog_comments` (`author`, `post_num`, `comment_entry`, `communt_date`) VALUES ($username, '{$post_id}', '{$comment}', '{$time}')");
        if($insertcom){
            $id = mysql_insert_id();
            exit(json_encode(array(
                'id' => $id,
                'avatar' => getavatar($username),
                'time' => timeBetween($time, time()),
                'comment' => $comment,
            )));
        }
    }

また、クエリが機能しなかったと言う場合、これをエラーチェックしてエラーを送信するにはどうすればよいですか?

4

2 に答える 2

3
  1. ラファエルが言ったように、終了の代わりにエコーを使用してください。しかし、die() や exit() などを使用する必要はありません。きれいなコードは、die() や exit() を使用する必要はありません。
  2. 配列内で $comment の後ろにコンマを使用しましたが、コンマの後にエントリがありません (私のコードでは、'error' => false次のようになります。
  3. mysql_affected_rows がゼロより大きいかどうかを尋ねると、挿入が成功したかどうかを確認できます ( http://www.php.net/manual/en/function.mysql-affected-rows.php )。mysql_affected_rows は、INSERT、UPDATE、および DELETE によって影響を受けた行を返します。

コード:

if($insertcom){
    //Check if INSERT was successfully
    if(mysql_affected_rows() > 0) {
        $id = mysql_insert_id();
        echo(json_encode(array(
            'id' => $id,
            'avatar' => getavatar($username),
            'time' => timeBetween($time, time()),
            'comment' => $comment, //here is the ,
            //Added line to state if error
            'error' => false
        )));
    } else {
        //Echo to return error when INSERT was unsuccessful
        echo(json_encode(array('error' => true)));
    }
}
于 2012-07-14T15:51:13.560 に答える
0

exit(json.decode...) の代わりに echo() を使用します

また、このエコーの後に die() を挿入します。

于 2012-07-14T15:38:06.163 に答える