Foxtable(狐表)用户栏目专家坐堂 → 学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢


  共有3654人关注过本帖树形打印复制链接

主题:学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢  发帖心情 Post By:2021/5/13 10:23:00 [只看该作者]

学习官方每日一练   登录验证后无法进行下一步操作  麻烦老师帮忙看看  谢谢

图片点击可在新窗口打开查看此主题相关图片如下:动画.gif
图片点击可在新窗口打开查看

以下内容是专门发给有点蓝浏览


访问地址:
http://192.168.41.4/login.htm   登录名  张三   密码  666
登录成功后
http://192.168.41.4/Begin.htm?id=773

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 10:28:00 [只看该作者]

这些实例仅提供学习用,先自己分析代码查找问题。

前端使用浏览器开发者工具调试跟踪js的执行
服务端请写日志跟踪代码执行状态,实例提供了日志记录函数,调用即可

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)这些实例仅提供学习用,先自己分析代...  发帖心情 Post By:2021/5/13 11:53:00 [只看该作者]

经过代码逐一按照顺序测试   当前在内部函数NewQuestion  这个代码下红色部分不弹值,导致UsersTestForm表空增了一行数据   当前用户就没有试题可操作了
 麻烦老师帮忙看看是啥原因呢?

'开始新的练习
Dim e As RequestEventArgs = Args(0)
Dim vtext As String = e.PlainText 'ajex传入
MessageBox.Show(vtext)
If vtext > "" Then
    Dim varr() As String = vtext.Split("|")
    If varr.Length = 3 Then
        Dim drU As DataRow = Functions.Execute("CheckToken",varr(0),e) '权限验证
        If drU IsNot Nothing  Then
            Dim qttype As String
            Dim qt As String = e.Cookies("cqt")
MessageBox.Show(e.Cookies("cqt"))
            If qt = 2 Then
                qttype = " and TestType = 5" '属于考试项目
            Else
                qttype = " and TestType <> 5"
            End If

            Dim openid As String = drU("OpenID")
MessageBox.Show(openid)
            If Functions.Execute("UpdateLogonTime",openid) Then '更新用户操作时间
                Dim dt As DataTable = DataTables("UsersTestForm")
                dt.ReplaceFor("IsCompleted",1,"[OpenId] = '" & openid  & "' and IsCompleted = 0" & qttype) '如果其它的练习没有完成,则统一设置为完成
                Dim drnew As DataRow = dt.AddNew
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") '使用专门的类获取编号,避免并发的时候产生重复编号
MessageBox.Show(drnew("TestID"))
                drnew("OpenId") = openid
                drnew("UserNick") = drU("Nickname")
                drnew("TestDate") = Date.Now
                Dim qty As Integer = val(varr(2))
MessageBox.Show(qty)
                If qty = 0 Then qty = 1
                drnew("QuestionQty") = qty '选择的题目数量
                drnew("AnswerQty") = 0
                drnew("AnswerCodeQty") = 0
                drnew("CorrectQty") = 0
                drnew("CorrectRate") = 0 '如果=1准确率默认为100%
                drnew("IsCompleted") = 0
                drnew("CompleteRate") = 0
                '设置选择的练习题型
                Dim drDict As DataRow = DataTables("uSysDictionarys").Find("ItemName='" & varr(1) & "' and GroupName='做题题型'")
                Dim subType As Integer = 0
                If drDict IsNot Nothing Then
                    subType = val(drDict("ItemValue"))
MessageBox.Show(val(drDict("ItemValue")))
                End If
                drnew("TestType") = subType
                dt.Save
                
                '把已经完成的练习移除,避免占用内存
                Dim ids As List(Of String) = dt.GetValues("TestID","IsCompleted = 1")
                dt.RemoveFor("IsCompleted = 1")
                DataTables("UsersCodeAnswerForm").RemoveFor("TestID in ('" & String.Join("','",ids.ToArray)  & "')")
                DataTables("UsersTestForm").RemoveFor("TestID in ('" & String.Join("','",ids.ToArray)  & "')")
                
                '从问题顺序表获取一道题
                Dim sql As String = CExp("exec [upd_GetNextNewQuestionFor] @OpenID='{0}',@SelectTestType={1}",openid ,subType)
                dt = Functions.Execute("Cmd_GetDataTable","Q",sql)
                Dim drQs As DataRow
                If dt.DataRows.Count > 0 Then
                    drQs = dt.DataRows(0)
                    Dim htmJson As String = Functions.Execute("GetNewAnswerHtm",openid ,drQs("QuestionID"),drQs("QuestionType"),drnew) '生成题目html代码
                    e.WriteString(htmJson)
                    Return ""
                End If
            End If
        End If
    End If
End If
e.WriteString("错误: 无法创建新的练习, 请通知官方客服!")

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 12:11:00 [只看该作者]

在跟踪,看是那一句代码的问题。再看看日志提示具体什么错误?

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)在跟踪,看是那一句代码的问题。再看...  发帖心情 Post By:2021/5/13 14:37:00 [只看该作者]

2021-05-13 12:09:56.9745
host=192.168.41.4
path=test\newquestion.htm
HttpMethod=POST
poststring=773|标准题(全部)|10
ip=192.168.41.4


2021-05-13 12:12:50.2688
host=192.168.41.4
path=test\Check.htm
HttpMethod=POST
poststring=773|0
ip=192.168.41.4

2021-05-13 12:12:50.3539
事件/函数: 自定义函数,NewQuestion
调用的目标发生了异常。
   在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.UserFunctions.Execute(String Name, Object[] Args)
未将对象引用设置到对象的实例。
   在 UserCode.AyDTit5gB0RU0SMFJ(Object[] Args)

启用了日志  但是看不大明白这个提示自定义函数NewQuestion 错误在那  

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:05:00 [只看该作者]

哪一句出错?

MessageBox.Show(openid)
            If Functions.Execute("UpdateLogonTime",openid) Then '更新用户操作时间
MessageBox.Show(1)
                Dim dt As DataTable = DataTables("UsersTestForm")
MessageBox.Show(2)
                dt.ReplaceFor("IsCompleted",1,"[OpenId] = '" & openid  & "' and IsCompleted = 0" & qttype) '如果其它的练习没有完成,则统一设置为完成
MessageBox.Show(3)
                Dim drnew As DataRow = dt.AddNew
MessageBox.Show(4)
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") '使用专门的类获取编号,避免并发的时候产生重复编号
MessageBox.Show(drnew("TestID"))

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)哪一句出错?MessageBox.Show(openid...  发帖心情 Post By:2021/5/13 15:23:00 [只看该作者]

            Dim openid As String = drU("OpenID")
MessageBox.Show(drU("OpenID"))
            If Functions.Execute("UpdateLogonTime",openid) Then '更新用户操作时间

                Dim dt As DataTable = DataTables("UsersTestForm")
                dt.ReplaceFor("IsCompleted",1,"[OpenId] = '" & openid  & "' and IsCompleted = 0" & qttype) '如果其它的练习没有完成,则统一设置为完成

                Dim drnew As DataRow = dt.AddNew
MessageBox.Show("12")
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") '使用专门的类获取编号,避免并发的时候产生重复编号
MessageBox.Show("123")
                drnew("OpenId") = openid
MessageBox.Show("1234")
                drnew("UserNick") = drU("Nickname")
                drnew("TestDate") = Date.Now
MessageBox.Show("1235")
                Dim qty As Integer = val(varr(2))
MessageBox.Show(qty)
                If qty = 0 Then qty = 1
                drnew("QuestionQty") = qty '选择的题目数量
                drnew("AnswerQty") = 0
                drnew("AnswerCodeQty") = 0
                drnew("CorrectQty") = 0
                drnew("CorrectRate") = 0 '如果=1准确率默认为100%
                drnew("IsCompleted") = 0
                drnew("CompleteRate") = 0
                '设置选择的练习题型
                Dim drDict As DataRow = DataTables("uSysDictionarys").Find("ItemName='" & varr(1) & "' and GroupName='做题题型'")
                Dim subType As Integer = 0
                If drDict IsNot Nothing Then
                    subType = val(drDict("ItemValue"))
MessageBox.Show(val(drDict("ItemValue")))
                End If
                drnew("TestType") = subType
                dt.Save

红色部分不弹提示  后续的也不弹

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:28:00 [只看该作者]

检查一下全局代码,看看数据库对应的编号表uSysBizCode是否存在

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)检查一下全局代码,看看数据库对应的...  发帖心情 Post By:2021/5/13 15:42:00 [只看该作者]


编号表是存在的 
就是没有数据写入这个UsersTestForm表

此主题相关图片如下:11.png
按此在新窗口浏览图片

此主题相关图片如下:22.png
按此在新窗口浏览图片

以下内容是专门发给有点蓝浏览



麻烦老师帮忙看看   中午折腾了一中午都没有找到原因  谢谢老师的耐心解答!

访问地址:
http://192.168.41.4/login.htm   登录名  张三   密码  666
登录成功后
http://192.168.41.4/Begin.htm?id=773
[此贴子已经被作者于2021/5/13 15:43:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:49:00 [只看该作者]

一样自己调试一下全局代码

另外看看这里弹出什么
                Dim drnew As DataRow = dt.AddNew
MessageBox.Show(_BizCodeBuilder is nothing)
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") 

另外编号里有2条都是UsersTestForm的记录,这个不合理,请删除自己添加的数据

 回到顶部
总数 24 1 2 3 下一页