如何在问答系统中设计/实施对特定问题的答案

时间:2019-01-13 16:41:12

标签: php

我是编程的新手,请您帮助了解如何设计问题解答系统,尤其是我陷入了一个我想不通的步骤:

假设有两个人:A和B。A向B发送了多个不同的消息。B应该能够分别回答每个消息。然后,A可以看到对特定问题B的回答。换句话说,它应该是某种形式的消息链。

我可能知道如何构建所有内容,但是,我无法弄清楚如何跟踪特定消息(例如已答复)。当然,我可以使用前端工具,例如数据属性(等)来附加每条消息的ID(从数据库中检索时),然后能够理解已回答的消息,但是我不喜欢这个想法,因为它可以由用户操纵和修改。

对于像您这样的经验丰富的软件开发人员来说,这听起来很愚蠢,但是我尝试着考虑所有问题,希望您能提供帮助。

3 个答案:

答案 0 :(得分:0)

您不可避免地要给用户一个选择。 (以下是一些消息,您要回复吗?)。

不可能阻止用户完全控制他们在HTTP响应中发送的内容。他们可以告诉您他们要回复的消息。他们可以编辑回复以声明要回复其他邮件。他们可以编辑回复以声明根本不回复邮件。

您只需编写服务器端代码即可解决此问题。

HTTP请求是否指示用户正在响应消息?如果是这样,它是有效的消息ID吗?如果是这样,那么用户首先可以阅读的消息的消息ID是吗?回复是否针对发送该消息的用户?

如果任何答案为“否”,则您的代码可以完全拒绝它(向用户显示错误),忽略尝试将其答复并将其视为新消息的尝试,或者您认为合适的其他选择。

答案 1 :(得分:0)

我会这样做:

请求中的一组参数:

  • chat_id:一些ID号,用于标识正在进行的会话实例。
  • 用户:用户名,请务必使用Cookie和某些用户身份验证技术来进行验证。
  • 消息:用户发送的消息。
  • message_type:会说出消息是答案还是问题。
  • question_id:一些标识问题的ID号。如果不存在,则新消息将被视为新问题的开头,并且将自动获得一个ID号。
  • show:显示全部问题和答案(“全部”),还是仅显示特定问题(“实例”)。默认为“全部”。
  • api:输出JSON数据而不是HTML

要查看整个对话,请执行以下操作: 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)

您只需要为每个消息分配一个唯一的(跟踪号,字母数字或字符串)。收到传入的答案(或答复)时,寻找匹配的标识符并将响应附加(或链接)到原始消息。如果没有匹配项,则将其退回或发送“潜在风险”报告给管理员以进行跟踪。您甚至可以跟踪来自任何给定用户的风险报告,以便您确定他们是否试图破解您的网站,或者代码中是否经常出现故障。