PHP / MySQL>单击链接时更新字段

时间:2011-02-03 18:12:05

标签: php javascript mysql ajax

我需要一个简单代码的帮助,当点击我网站上的链接时,它将更新MySQL中的字段(+1)。这是我的评论数据库中的“报告”按钮。

所以我可以看到“报告”评论的次数。重要的是脚本不会重定向或加载新页面,只需回显消息或JS警报。

感谢您的帮助。

6 个答案:

答案 0 :(得分:3)

$sql = "update `table` set `increment` = `increment` + 1 where `link` = '".$link."'";

这只是查询。您应该查看jquery ajax来处理请求

在some.php中你需要一种阅读帖子的方法。

<?php
if(isset($_POST['clicked_row']))
{
    $sql = "UPDATE $row_to_update SET increment = increment + 1 WHERE id = '".$_POST['clicked_row']."'";
    mysql_query($sql);
}
?>

假设您在ajax请求中发送行id,该请求位于jquery帖子的data参数中,您的HTML需要类似于<a href="javascript:increment(row_id);">Add click</a>,因此jquery调用知道要向某些人发送什么行。 PHP

答案 1 :(得分:2)

你可以做什么的概述。我做了一些假设,并使用URL方法而不是POST选择了GET;如果您喜欢使用POST,请编辑品尝。

另一个注意事项 - 您可能希望有一个标志表,以便让您跟踪谁标记了谁,也许让他们添加评论等等......只是一个想法。

这只是为了让您了解如何按照自己的要求行事。我没有测试过代码,所以买家要小心。这只是一个起点。

<强> view.php

这是您拥有最终用户点击以激活标记脚本的链接。在你的标记的某个地方,你会有类似的东西......

<a class="flag" href="flag.php?comment=100">Flag</a>

然后,在view.php内容中,您将拥有尝试jQuery异步javascript请求的click事件代码(在这种情况下为$ .ajax(),可能是$ .get或$ .post,或者像其他库一样MooTools或Prototype)。

该示例演示服务器将在data参数中返回JSON格式的文本,然后对其进行评估以检查服务器响应的内容(成功?失败?部分成功?需要登录吗?)。请参阅http://json.org/

<script type="text/javascript">

$(document).ready(function(){
    $('a.flag').click(function(event){
        $.ajax({
            type: "GET",
            url: $(this).attr('href'),
            data: dataString,
            dataType: "json",
            success: function (data) {
                if (data.error == -1) {
                    // Not logged in, redirect to login page.
                    window.location = 'login.php';
                } else if (data.flagged == 1 && data.count != -1) {
                    // Success! With a count too.
                    alert('Comment flagged ('+data.count+' times flagged).');
                } else {
                    switch(data.error) {
                        case 1:
                            alert('Comment not found');
                        break;
                        case 2:
                            alert('Comment not flagged due to an update error.');
                        break;
                        case 3:
                            alert('Comment flagged but count not returned.');
                        break;
                        default:
                            alert('There was a general error flagging the comment.');
                        break;
                    }
                }
            },
            error: function(){
                alert('Comment not flagged; general send error.');
            }
        });

        // Call these to prevent the a tag from redirecting
        // the browser to the a-tags href url.
        event.preventDefault();
        return false;
    });
});

</script>

<强> flag.php

flag.php是允许您运行mysql查询的服务器页面,当然使用PHP,然后使用一些JSON格式的文本进行响应。页面返回的内容(文本)类似于:

{"flagged":1,"count":15,"error":0}

这将向您的调用页面(在浏览器中)指示评论已被标记,已被标记15次(错误,错误评论),并且没有错误。

这是重要的:这等同于HTML。这种类型的文本是数据,并在响应$ .ajax()函数时被解析回Javascript对象。所以,不要在其周围放置任何HTML,因为那不是你应该做的。有关示例,请参阅http://www.json.org/example.html

<?php

// Need to output JSON headers and try to prevent caching.
session_cache_limiter('nocache');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

// Our JSON array to return
//   - flagged would be 1 = success, 0 = failure
//   - count would return the # flags, with -1 no return #
//   - error code, see comments for description
$json = array('flagged'=>0,'count'=>-1,'error'=>0);

// Your logged in check code goes here 
// you don't want non-logged in people doing this

// Here, however you test to find out if someone is logged in,
// check and return a -1 error to redirect the login.    
if (!$logged_in) {
    // error -1 = not logged in, redirect browser
    $json['error'] = -1;
    exit(echo(json_encode($json)));
}

// Your mysql connection code goes here

$comment = mysql_real_escape_string($_GET['comment']);

if (empty($comment) || !is_numeric($comment)) {
    // error 1 = comment id not found
    $json['error'] = 1;
} else {
    $result = mysql_query("
UPDATE comments 
SET flags = flags+1 
WHERE commentID = $comment
");
    if (!$result) {
        $json['flagged'] = 0;
        // error 2 = update error
        $json['error'] = 2;
    } else {
        $json['flagged'] = 1;
        $count = mysql_query("
SELECT flags 
FROM comments 
WHERE commentID = $comment 
LIMIT 0, 1
");
        if ($count) {
            $query = mysql_fetch_assoc($count);
            $json['count'] = $query['count'];
        } else {
            // error 3 = updated but did not get count
            $json['error'] = 3;
        }
    }
}

echo json_encode($json);

?>

答案 2 :(得分:1)

这真的不简单。

你应该看看这里: http://www.tizag.com/ajaxTutorial/ajax-mysql-database.php

你的sql看起来像这样。

"UPDATE post SET flagcount = flagcount + 1 WHERE postID = {$myPostID}"

答案 3 :(得分:1)

是的,您应该寻找ajax对您的某些PHP脚本发出POST请求,这些脚本会升级数据库中的答案。在jquery中有这样的东西吗?

$('a').click(function(event) {
    $.ajax({
       type: "POST",
       url: "some.php", // page where insertion to database should have made
       data: "name=John",
       success: function(msg){
         alert("Counter updated" );
       }
     });
 });

答案 4 :(得分:0)

使用jQuery发送AJAX请求:

$.post('yourScript.php', {commentID: yourCommentId});

第二个参数是请求数据。改变它以满足您的需求。如果要在请求完成后执行JavaScript函数:

$.post('yourScript.php', {commentID: yourCommentId}, function(data) {

});

答案 5 :(得分:0)

我可以使用表单吗?

<form method="post" action="report.php">
  <input type="hidden" name="report">
  <input type="submit" name="submit" value="report">
</form>

然后在report.php文件中查询?