我是编程的新手,请您帮助了解如何设计问题解答系统,尤其是我陷入了一个我想不通的步骤:
假设有两个人:A和B。A向B发送了多个不同的消息。B应该能够分别回答每个消息。然后,A可以看到对特定问题B的回答。换句话说,它应该是某种形式的消息链。
我可能知道如何构建所有内容,但是,我无法弄清楚如何跟踪特定消息(例如已答复)。当然,我可以使用前端工具,例如数据属性(等)来附加每条消息的ID(从数据库中检索时),然后能够理解已回答的消息,但是我不喜欢这个想法,因为它可以由用户操纵和修改。
对于像您这样的经验丰富的软件开发人员来说,这听起来很愚蠢,但是我尝试着考虑所有问题,希望您能提供帮助。
答案 0 :(得分:0)
您不可避免地要给用户一个选择。 (以下是一些消息,您要回复吗?)。
不可能阻止用户完全控制他们在HTTP响应中发送的内容。他们可以告诉您他们要回复的消息。他们可以编辑回复以声明要回复其他邮件。他们可以编辑回复以声明根本不回复邮件。
您只需编写服务器端代码即可解决此问题。
HTTP请求是否指示用户正在响应消息?如果是这样,它是有效的消息ID吗?如果是这样,那么用户首先可以阅读的消息的消息ID是吗?回复是否针对发送该消息的用户?
如果任何答案为“否”,则您的代码可以完全拒绝它(向用户显示错误),忽略尝试将其答复并将其视为新消息的尝试,或者您认为合适的其他选择。
答案 1 :(得分:0)
我会这样做:
请求中的一组参数:
要查看整个对话,请执行以下操作:
https://example.com/?chatid=some_id
A问一个问题:
https://example.com/?chatid=some_id&user=A&message_type=question&message=the_question
B回答了一个问题:
https://example.com/?chatid=some_id&user=A&message_type=answer&question_id=some_question_id&message=the_question
A扩展了一些先前提出的问题:
https://example.com/?chatid=some_id&user=A&message_type=answer&question_id=some_question_id&question_id=some_question&message=the_question
仅显示一个特定问题:
B回答了一个问题:
https://example.com/?chatid=some_id&question_id=some_question_id&show=instance
同样,这是应该做的: 1. A进入根页面,并立即与B分配一个聊天对象。 -如果只有一些用户可以询问而只有一些用户可以答复,那么您应该在代码中进行检查。 -B也必须获得相同的聊天对象,该聊天对象可能会在另一个无人参与聊天的特殊页面中列出。 -当a进入索引并被分配了一个聊天对象时,生成初始日志寄存器。您应该在数据库或JSON或XML文件中保存所有输入。除非它会变得很大,否则建议您使用用户的输入消息创建一个数组,并将其转换为JSON并将其保存在文件夹中。否则使用一些数据库,例如MYSQL。 -没有问题或答案的页面应显示一种输入问题的格式。 2. A输入一个或多个问题。 3. B读取一个或多个问题。 4. B回答一个或多个问题。 5. A提出另一个问题,或扩大提出的问题。
如果您根本不想使用javascript,则可以使用iframe解决问题:将显示问题的页面放在每隔几秒钟会更新一次的iframe中,然后将页面的格式设置为在主页或其他页面中回答问题。但是,我建议您使用javascript:不要执行iframe的事情,只需加载页面,然后使用javascript更新页面的各个部分。您只需要从相同的PHP程序输出JSON文本,而不是HTML文本。因此,例如,让我们说通常的事情是您的PHP程序最终会这样做:
echo $webpage;
其中$ webpage是您网页的HTML。
相反,您将在JSON中输出包含所有问题和答案的数组(应该类似于$chat = array([0] => ('question' = ([0] = 'question original', [1] = 'question expansion 1', [2] = 'question expansion 2'), 'answer' = ([0] = 'answer to question original', [1] = 'answer to question expansion 1', [2] = 'answer to question expansion 2')), [1] => ('question' = ([0] = 'question original', [1] = 'question expansion 1', [2] = 'question expansion 2'), 'answer' = ([0] = 'answer to question original', [1] = 'answer to question expansion 1', [2] = 'answer to question expansion 2')))
)。
JavaScript会每秒https://example.com/?chatid=some_id&api=true
调用api。
您的PHP将会像这样:
if($_GET['api'] == 'true') {echo json_encode($chat);} else {echo $webpage};
然后使用javascript,您将在用户端检查数据是否已更新,如果未更新,则将更改屏幕上显示的信息以及格式,以便用户可以发送新的回复或新问题。
答案 2 :(得分:0)
您只需要为每个消息分配一个唯一的(跟踪号,字母数字或字符串)。收到传入的答案(或答复)时,寻找匹配的标识符并将响应附加(或链接)到原始消息。如果没有匹配项,则将其退回或发送“潜在风险”报告给管理员以进行跟踪。您甚至可以跟踪来自任何给定用户的风险报告,以便您确定他们是否试图破解您的网站,或者代码中是否经常出现故障。