评论点赞只能点赞一次的实现方法

Keywords:

一般评论可以点赞提高互动性。不可以重复点,在评论库里加一个文本型字段,

该字段存储已经提交过“赞”的用户,符号分割,建议逗号分割。

在点赞之前检查用户是否已经在列表中。另外,如果用户没有登录也希望可以点赞

除了使用用户信息还可以储存ip地址,这样一个ip也可以点赞一次,无需登录


下面是我实现的方法,仅供参考。


        //当用户点赞评论的时候发生!
        protected void Unnamed_Click(object sender, EventArgs e)
        {
            bool isagreed = false;
            string username = "";
            try
            {
                username = Convert.ToString(Session["username"]);
            }
            catch (Exception)
            {
            }

            if (username == "")
            {
                string ip;
                if (Context.Request.ServerVariables["HTTP_VIA"] != null) // using proxy 
                {
                    ip = Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); // Return real client IP. 
                }
                else// not using proxy or can't get the Client IP 
                {
                    ip = Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP. 
                }

                username = ip;

            }

            LinkButton btn = (LinkButton)sender;
            Int64 commentID = Convert.ToInt64(btn.CommandArgument);

            //数据库连接字符串
            string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\storage\\users.accdb";
            using (OleDbConnection con = new OleDbConnection(conStr))
            {
                string cmdStr = "SELECT [statis],[agreeUser] FROM [comment] where [id]=" + commentID + "";
                int commentStatis = 0;
                string agreeUser = "";
                //打开连接
                con.Open();
                using (var cmd = new OleDbCommand(cmdStr, con))
                {
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())//
                        {
                            commentStatis = reader.GetInt32(0) + 1;
                            try
                            {
                                agreeUser = reader.GetString(1);
                            }
                            catch (Exception)
                            {
                            }

                            string[] agreeUsers = agreeUser.Split(',');
                            for (int i = 0; i < agreeUsers.Count(); i++)
                            {
                                if (username == agreeUsers[i])
                                {
                                    isagreed = true;//已经点过赞了!
                                    break;
                                }
                            }
                            agreeUser += username + ",";
                        }
                        else
                        {
                            isagreed = true;//数据库读取失败,等同于 点过赞不更新数据库
                            Response.Write("<script>alert('哎呀,出了点状况。数据库出错啦')</script>");
                        }
                    }
                    if (!isagreed)//如果没点过赞
                    {
                        cmd.CommandText = "UPDATE [comment] set [statis]=" + commentStatis + " ,[agreeUser]='" + agreeUser + "' where [id]=" + commentID + "";
                        cmd.ExecuteNonQuery();
                    }


                }

                con.Close();


                //Response.Write("<script>alert('提交成功');location.href=" + Request.Url + ";</script>");

                Response.AddHeader("Refresh", "0");

            }

        }


作者:songshizhao 发表于:2017-02-20T08:17:14 访问量:1671

210.47.0.237

你好