网站的加为好友的功能是怎么制作的我用的是asp

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
孙寒群

网站  2026-10-01 22:48:02   199

网站的加为好友的功能是怎么制作的我用的是asp

做加好友,别先想着按钮长什么样。按钮只是个表单,真正要设计的是关系怎么落库。经典ASP里我一般用一张 friends 表,字段至少这几个:id 自动编号,user_id 发起人,friend_id 接收人,status 状态,add_time 申请时间。status 用 0 表示申请中,1 表示已通过,2 表示拒绝。如果要做黑名单,再加个 3,或者单独一张表。表上给 user_id+friend_id 建唯一索引,防止同一对人重复插入。注意是单向记录还是双向记录。图省事可以只存一条,查询时用 or 两边都查;但好友列表要分页、排序时,我更喜欢同意后存两条,A 到 B 一条,B 到 A 一条,查起来就是 where user_id=当前用户 and status=1。

接下来是加好友的入口。用户资料页放一个表单,提交到 add_friend.asp,隐藏域里放对方 userid。服务端先判断 Session("userid") 有没有值,没登录就跳登录。再判断 friendid 是不是数字,不能是自己。然后查库:select id,user_id,friend_id,status from friends where (user_id=我 and friend_id=对方) or (user_id=对方 and friend_id=我)。如果查到了,分几种情况。status=1 说明已经是好友,直接提示。status=0 且 user_id 是我,说明我已经申请过,别重复发。status=0 且 user_id 是对方,说明对方先申请了我,提示我去请求列表处理。status=2 的话,可以更新这条记录重新申请,也可以删掉重插。没查到就 insert 一条 status=0。

给一段核心代码,VBScript 写法:

<%
  Dim conn, rs, myId, friendId, sql
  myId = Session("userid")
  friendId = Request.Form("friendid")
  If Len(myId) = 0 Then
   Response.Write "请先登录"
   Response.End
  End If
  If Not IsNumeric(friendId) Then
   Response.Write "参数错误"
   Response.End
  End If
  friendId = CLng(friendId)
  If friendId = CLng(myId) Then
   Response.Write "不能加自己"
   Response.End
  End If

Set conn = Server.CreateObject("ADODB.Connection")
  conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=你的库;User ID=sa;Password=你的密码;"
  sql = "select id,user_id,friend_id,status from friends where (user_id=" & myId & " and friend_id=" & friendId & ") or (user_id=" & friendId & " and friend_id=" & myId & ")"
  Set rs = conn.Execute(sql)
  If Not rs.EOF Then
   If CLng(rs("status")) = 1 Then
   Response.Write "你们已经是好友"
   ElseIf CLng(rs("status")) = 0 Then
   If CLng(rs("user_id")) = CLng(myId) Then
   Response.Write "你已经申请过了"
   Else
   Response.Write "对方已经申请加你,去好友请求里处理"
   End If
   ElseIf CLng(rs("status")) = 2 Then
   conn.Execute "update friends set user_id=" & myId & ",friend_id=" & friendId & ",status=0,add_time=getdate() where id=" & rs("id")
   Response.Write "申请已发送"
   End If
  Else
   conn.Execute "insert into friends(user_id,friend_id,status,add_time) values(" & myId & "," & friendId & ",0,getdate())"
   Response.Write "申请已发送"
  End If
  rs.Close
  conn.Close
  Set rs = Nothing
  Set conn = Nothing
  %>

这段是为了看清流程,真实项目别直接拼 SQL,用 ADODB.Command 加参数,至少把数字变量强制 CLng。Access 数据库把 getdate() 换成 now()。

对方那边