自动生成测验问题& JavaScript应用程序的答案:我需要数据库吗?

时间:2014-11-09 06:45:19

标签: javascript security web-applications

对于一个小型的,学习语言(JavaScript)更好的项目,我想创建一个简单的测验Web应用程序。我有两个问题:

  1. 如果我的问题和答案总是一样的,并且我创建了一个仅使用多项选择题的测验应用程序(我假设我将使用单选按钮作为选择器),我是否需要一个数据库?或者我可以简单地将我的所有问题和答案编码到一个对象数组中,比如说一个main.js文件?
  2. 每个对象都有一个问题,四个选项答案和正确的答案。然后,它是一个简单的if语句,用于将选择与正确答案进行比较。

    我主要是因为我担心不使用数据库会导致安全问题,但我无法弄清楚为什么用户不会提交任何内容。<\ n / p>

    1. 更进一步:为了使其更具活力,而不是写出每一个问题和答案,我能否使用对象动态生成问题和潜在答案?
    2. 说我有一个足球队列表。在每个团队对象中,我列出了位置和玩家名称。有些职位有多名球员。然后我有一个单独的对象填充问题。

      我可以在Questions对象上设置一个随机数来随机生成一个问题然后有一些逻辑知道什么时候生成了这个问题,只有这些来自我的对象的某些键值配对可以作为答案吗?

      E.g。如果问题是,&#34;其中哪一个是曼联后卫?&#34;它会随机抽出一名曼联后卫,随机填补剩下的三个选项,其中包括其他球队的后卫。

      每当我尝试逻辑地写出来时,我就会变得混乱,所以我觉得我接近这个很糟糕。

      感谢并抱歉新手问题!

3 个答案:

答案 0 :(得分:0)

如果您的问题和答案总是相同,那么您肯定可以跳过数据库并在数组中使用Questions对象,例如

var myQuestions= [{
//your question-answer details goes here - key value pair
}];

每次新用户参加测试时都会使用随机方法(内置JS方法)从问题数组中获取问题。

答案 1 :(得分:0)

关于安全问题,“用户不提交任何内容”是什么意思?他们会提交答案,对吧?或者您的意思是不会存储用户的答案,而是在客户端本身显示答案的反馈?此外,如果您存储多个选项选项,其中一个标记为js文件中的答案,则用户可以从浏览器&amp ;;中检查js文件的内容。了解答案。

答案 2 :(得分:0)

  1. 我假设您的安全问题意味着用户可以通过阅读您的脚本来了解答案。任何“客户端”的东西都是&#39;永远不会安全。例如:将答案存储在JS脚本中并将其加载到客户端的浏览器中。

  2. 制作&#34;团队&#34;等对象。需要你在你的测验应用中实现智能,以便它知道哪个问题与哪个对象有关,并区分正确的答案和错误的答案。这不是不可能的,但不是微不足道的。为了避免很多复杂问题,你可以这样做:

    /* Javascript array to store object sets of question, right answers, and wrong answers */
    var quizObj = [{ 
            "question": "Which of the following is MU's defender?",
            "right": ["Marcos Rojo", "Luke Shaw", "Tyler Blacket"],
            "wrong": ["Vincent Kompany", "Dejen Lovren", "Javi Manquillo", "Mathieu Debuchy", "Calum Chambers"]
    }];
    
    /* Function to get a random index in an array */
    function getRandomIndex(array) { return Math.floor(Math.random()*array.length); }
    
    /* Please apply your proper looping here */
    var current = quizObj[0];
    
    /* To get a random right answer: */
    var rightAnswer = current.right[getRandomIndex(current.right)];
    
    /* To get wrong answers which is unique: */
    var tempWrong = current.wrong.slice(); // Clone the array because splice will change the original array (and that is why we can make the output unique)
    
    /* Get the random answer and remove it from the temporary array */
    var wrongAnswer1 = tempWrong.splice(getRandomIndex(tempWrong), 1)[0]; 
    var wrongAnswer2 = tempWrong.splice(getRandomIndex(tempWrong), 1)[0]; 
    var wrongAnswer3 = tempWrong.splice(getRandomIndex(tempWrong), 1)[0];