不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
PowerEasy® SiteWeaver™ CMS 6.5点券、有效期兑换多扣修正
编辑:dnawo 日期:2008-02-18
假设资金与点券的兑换比率是1:1,当输入资金1.9兑换点券时,提示的是"成功将1.9元资金兑换成1点券",查看资金余额你会发现被扣了1.9,而点券只增加了1,也就是说,其中0.9元被多扣了!积分与点券的兑换也存在同样的问题!在User\User_Exchange_Code.asp中找到相关函数SaveExchange内容如下:
注意其中的蓝色部分,都是直接减去输入的值,没有考虑到输入的值可能不是兑换比率的倍数,所以才出现了上述多扣现象,解决的方法是减去输入的值后还应加上相除的余数部分,修改后的代码如下:
同样有效期兑换也存在同样的问题,修改User\User_Exchange_Code.asp的SaveValid函数如下:
本次修改的版本为:PowerEasy® SiteWeaver™ CMS 6.5 Build 0128
复制内容到剪贴板
程序代码

Sub SaveExchange()
If UserSetting(18) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换" & PointName & "!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetPoint
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If ChangeType = 1 Then
GetPoint = Fix(ChangeMoney / MoneyExchangePoint)
rsUser("Balance") = rsUser("Balance") - ChangeMoney
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney, 4, "", 0, 2, 0, 0, "用于兑换 " & GetPoint & " " & PointUnit & PointName, Now())
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeMoney & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeMoney & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
Else
GetPoint = Fix(ChangeExp / UserExpExchangePoint)
rsUser("UserExp") = rsUser("UserExp") - ChangeExp
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeExp & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeExp & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
End If
rsUser.Update
rsUser.Close
Set rsUser = Nothing
End Sub
If UserSetting(18) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换" & PointName & "!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetPoint
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If ChangeType = 1 Then
GetPoint = Fix(ChangeMoney / MoneyExchangePoint)
rsUser("Balance") = rsUser("Balance") - ChangeMoney
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney, 4, "", 0, 2, 0, 0, "用于兑换 " & GetPoint & " " & PointUnit & PointName, Now())
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeMoney & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeMoney & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
Else
GetPoint = Fix(ChangeExp / UserExpExchangePoint)
rsUser("UserExp") = rsUser("UserExp") - ChangeExp
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeExp & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeExp & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
End If
rsUser.Update
rsUser.Close
Set rsUser = Nothing
End Sub
注意其中的蓝色部分,都是直接减去输入的值,没有考虑到输入的值可能不是兑换比率的倍数,所以才出现了上述多扣现象,解决的方法是减去输入的值后还应加上相除的余数部分,修改后的代码如下:
复制内容到剪贴板
程序代码

Sub SaveExchange()
If UserSetting(18) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换" & PointName & "!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetPoint, ChangeMoney2, ChangeExp2
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If ChangeType = 1 Then
GetPoint = Fix(ChangeMoney / MoneyExchangePoint)
ChangeMoney2 = GetPoint * MoneyExchangePoint
rsUser("Balance") = rsUser("Balance") - ChangeMoney2
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney2, 4, "", 0, 2, 0, 0, "用于兑换 " & GetPoint & " " & PointUnit & PointName, Now())
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeMoney2 & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeMoney2 & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
Else
GetPoint = Fix(ChangeExp / UserExpExchangePoint)
ChangeExp2 = GetPoint * UserExpExchangePoint
rsUser("UserExp") = rsUser("UserExp") - ChangeExp2
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeExp2 & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeExp2 & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
End If
rsUser.Update
rsUser.Close
Set rsUser = Nothing
End Sub
If UserSetting(18) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换" & PointName & "!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetPoint, ChangeMoney2, ChangeExp2
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangePoint) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 " & PointUnit & PointName & "!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If ChangeType = 1 Then
GetPoint = Fix(ChangeMoney / MoneyExchangePoint)
ChangeMoney2 = GetPoint * MoneyExchangePoint
rsUser("Balance") = rsUser("Balance") - ChangeMoney2
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney2, 4, "", 0, 2, 0, 0, "用于兑换 " & GetPoint & " " & PointUnit & PointName, Now())
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeMoney2 & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeMoney2 & " 元资金兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
Else
GetPoint = Fix(ChangeExp / UserExpExchangePoint)
ChangeExp2 = GetPoint * UserExpExchangePoint
rsUser("UserExp") = rsUser("UserExp") - ChangeExp2
rsUser("UserPoint") = rsUser("UserPoint") + GetPoint
Call AddConsumeLog("System", 0, UserName, 0, GetPoint, 1, "将 " & ChangeExp2 & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName)
Call WriteSuccessMsg("成功将 " & ChangeExp2 & " 分积分兑换成 " & GetPoint & " " & PointUnit & PointName & " !", ComeUrl)
End If
rsUser.Update
rsUser.Close
Set rsUser = Nothing
End Sub
同样有效期兑换也存在同样的问题,修改User\User_Exchange_Code.asp的SaveValid函数如下:
复制内容到剪贴板
程序代码

Sub SaveValid()
If UserSetting(19) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换有效期!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetValidDay, ChangeMoney2, ChangeExp2
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangeValidDay) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 天有效期!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangeValidDay) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 天有效期!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If rsUser("ValidNum") = -1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>您的有效期为“无限期”,无需兑换有效期。"
Else
If ChangeType = 1 Then
GetValidDay = Fix(ChangeMoney / MoneyExchangeValidDay)
ChangeMoney2 = GetValidDay * MoneyExchangeValidDay
rsUser("Balance") = rsUser("Balance") - ChangeMoney2
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney2, 4, "", 0, 2, 0, 0, "用于兑换 " & GetValidDay & " 天有效期", Now())
Else
GetValidDay = Fix(ChangeExp / UserExpExchangeValidDay)
ChangeExp2 = GetValidDay * UserExpExchangeValidDay
rsUser("UserExp") = rsUser("UserExp") - ChangeExp2
End If
If ValidDays > 0 Then
If rsUser("ValidUnit") = 1 Then
rsUser("ValidNum") = rsUser("ValidNum") + GetValidDay
rsUser.Update
Else
rsUser("ValidNum") = ValidNumToValidDays(rsUser("ValidNum"), rsUser("ValidUnit"), rsUser("BeginTime")) + GetValidDay
rsUser("ValidUnit") = 1
rsUser.Update
Call AddRechargeLog("System", UserName, 0, 0, 0, "兑换有效期时更改有效期计费单位")
End If
Else
rsUser("BeginTime") = Now()
rsUser("ValidNum") = GetValidDay
rsUser("ValidUnit") = 1
rsUser.Update
Call AddRechargeLog("System", UserName, 0, 0, 0, "兑换有效期时将原来过期的有效期重新计算")
End If
If ChangeType = 1 Then
Call AddRechargeLog("System", UserName, GetValidDay, 1, 1, "将 " & ChangeMoney2 & " 元资金兑换成 " & GetValidDay & " 天有效期")
Call WriteSuccessMsg("成功将 " & ChangeMoney2 & " 元资金兑换成 " & GetValidDay & " 天有效期!", ComeUrl)
Else
Call AddRechargeLog("System", UserName, GetValidDay, 1, 1, "将 " & ChangeExp2 & " 分积分兑换成 " & GetValidDay & " 天有效期")
Call WriteSuccessMsg("成功将 " & ChangeExp2 & " 分积分兑换成 " & GetValidDay & " 天有效期!", ComeUrl)
End If
End If
rsUser.Close
Set rsUser = Nothing
End Sub
If UserSetting(19) = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>不允许进行自助兑换有效期!</li>"
Exit Sub
End If
Dim rsUser, sqlUser
Dim ChangeType, ChangeMoney, ChangeExp, GetValidDay, ChangeMoney2, ChangeExp2
ChangeType = Abs(PE_CLng(Trim(Request("ChangeType"))))
ChangeMoney = Abs(PE_CDbl(Trim(Request("ChangeMoney"))))
ChangeExp = Abs(PE_CLng(Trim(Request("ChangeExp"))))
If ChangeType = 1 Then '使用货币
If ChangeMoney = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要兑换的资金数!</li>"
Else
If ChangeMoney > Balance Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数大于您的资金余额!</li>"
Else
If Fix(ChangeMoney / MoneyExchangeValidDay) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的资金数不足以兑换 1 天有效期!</li>"
End If
End If
End If
Else '使用积分
If ChangeExp = 0 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>请输入要减去的积分数!</li>"
Else
If ChangeExp > UserExp Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数大于您的可用积分!</li>"
Else
If Fix(ChangeExp / UserExpExchangeValidDay) < 1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>输入的积分数不足以兑换 1 天有效期!</li>"
End If
End If
End If
End If
If FoundErr = True Then
Exit Sub
End If
Set rsUser = Server.CreateObject("Adodb.RecordSet")
sqlUser = "select * from PE_User where UserID=" & UserID
rsUser.Open sqlUser, Conn, 1, 3
If rsUser("ValidNum") = -1 Then
FoundErr = True
ErrMsg = ErrMsg & "<li>您的有效期为“无限期”,无需兑换有效期。"
Else
If ChangeType = 1 Then
GetValidDay = Fix(ChangeMoney / MoneyExchangeValidDay)
ChangeMoney2 = GetValidDay * MoneyExchangeValidDay
rsUser("Balance") = rsUser("Balance") - ChangeMoney2
Call AddBankrollItem("System", UserName, ClientID, ChangeMoney2, 4, "", 0, 2, 0, 0, "用于兑换 " & GetValidDay & " 天有效期", Now())
Else
GetValidDay = Fix(ChangeExp / UserExpExchangeValidDay)
ChangeExp2 = GetValidDay * UserExpExchangeValidDay
rsUser("UserExp") = rsUser("UserExp") - ChangeExp2
End If
If ValidDays > 0 Then
If rsUser("ValidUnit") = 1 Then
rsUser("ValidNum") = rsUser("ValidNum") + GetValidDay
rsUser.Update
Else
rsUser("ValidNum") = ValidNumToValidDays(rsUser("ValidNum"), rsUser("ValidUnit"), rsUser("BeginTime")) + GetValidDay
rsUser("ValidUnit") = 1
rsUser.Update
Call AddRechargeLog("System", UserName, 0, 0, 0, "兑换有效期时更改有效期计费单位")
End If
Else
rsUser("BeginTime") = Now()
rsUser("ValidNum") = GetValidDay
rsUser("ValidUnit") = 1
rsUser.Update
Call AddRechargeLog("System", UserName, 0, 0, 0, "兑换有效期时将原来过期的有效期重新计算")
End If
If ChangeType = 1 Then
Call AddRechargeLog("System", UserName, GetValidDay, 1, 1, "将 " & ChangeMoney2 & " 元资金兑换成 " & GetValidDay & " 天有效期")
Call WriteSuccessMsg("成功将 " & ChangeMoney2 & " 元资金兑换成 " & GetValidDay & " 天有效期!", ComeUrl)
Else
Call AddRechargeLog("System", UserName, GetValidDay, 1, 1, "将 " & ChangeExp2 & " 分积分兑换成 " & GetValidDay & " 天有效期")
Call WriteSuccessMsg("成功将 " & ChangeExp2 & " 分积分兑换成 " & GetValidDay & " 天有效期!", ComeUrl)
End If
End If
rsUser.Close
Set rsUser = Nothing
End Sub
本次修改的版本为:PowerEasy® SiteWeaver™ CMS 6.5 Build 0128






评论: 0 | 引用: 0 | 查看次数: 5228
发表评论
请登录后再发表评论!