【问题标题】:Dynamically fill Quiz Form from Database (PHP/MySQL)从数据库中动态填写测验表格 (PHP/MySQL)
【发布时间】:2013-09-08 22:41:41
【问题描述】:

我正在尝试制作一个测验程序,该程序将从 MySQL 数据库中获取问题及其选择,并将它们显示为用户填写的表格。用户(在填写所有字段后)将提交。这里没有评分,答案只是存储在该用户的注册 ID 的数据库中(这是因为一些答案是开放的,即:用户必须亲自输入答案,因此稍后会评估)。

我的表的结构是(我将发布创建查询,因为表看起来扭曲且难以阅读):

表 1:其中包含 q_id(每个问题都有唯一的 ID)、question(实际问题)、quiz_id(此问题所属的测验的 ID;有多个测验!),active(一个简单的“y”或“n”字段,用于检查此问题是否处于活动状态。如果不是,则问题未添加到表单中)和 type('c' 用于单选,'m' 用于多选,'o' 用于打开/用户文本输入)

CREATE  TABLE `db_test`.`insr_questions` (
  `q_id` INT(10) NOT NULL AUTO_INCREMENT ,
  `question` VARCHAR(255) NOT NULL ,
  `quiz_id` MEDIUMINT(8) UNSIGNED NOT NULL ,
  `active` CHAR(1) NOT NULL ,
  `type` CHAR(1) NOT NULL ,
  PRIMARY KEY (`id`) );

表 2:这包含字段 a_id(这是答案选择的唯一 ID)、choice(这是实际答案选择)、 question_id(这些答案选择属于哪个问题ID)和active(同上)

 CREATE  TABLE `db_test`.`insr_answers` (
  `a_id` INT(10) NOT NULL AUTO_INCREMENT ,
  `choice` VARCHAR(75) NOT NULL ,
  `question_id` MEDIUMINT(8) UNSIGNED NOT NULL ,
  `active` CHAR(1) NOT NULL ,
  PRIMARY KEY (`id`) );

所以这里的想法是检索一个quiz_id,然后深入问题表并检索属于该quiz_id的所有问题,然后取每个问题,并检索所有属于该问题的答案到那个question_id。然后这些必须以 php 形式显示。

非常感谢任何正确方向的指针!

(我目前正在阅读可以完成此操作的不同方式,作为 php 的新手,所以我将添加我正在处理的任何其他代码,这个问题!)

【问题讨论】:

    标签: php mysql forms dynamic-programming


    【解决方案1】:

    阅读JOINS in MySQL,这样你可以一口气得到问题和答案:

    SELECT * FROM insr_questions q 
    LEFT JOIN insr_answers a ON q.q_id = a.question_id 
    WHERE q.active = 1 AND q.quiz_id = 0
    

    然后使用 mysql_fetch_array 循环遍历结果。 (请注意,我使用了表别名 q 和 a,这减少了打字并用于 quiz_id 一个任意数字)

    【讨论】:

    • 这是个好建议,谢谢!但是查询编写对我来说并不是那么担心,它是根据问题/答案结构创建表单的 php 代码让我很难过!您能否在这方面提供一些指导?
    【解决方案2】:

    用以下算法解决了问题:

    Begin Loop (i from 0 to count(questions) )
      Create TextArea
      Textarea.Value = Question[i]
      Get count(answers) for Question[i]
      Get Type of Answer
      Case(c)
        Begin Loop (n from 0 to count(answers) )
          Create Radio Button[n]
          Radiobutton[n].Value = Choice[n]
        End Loop
      Case(m)
        Begin Loop (n from 0 to count(answers) )
          Create Checkbox[n]
          Checkbox[n].Value = Choice[n]
        End Loop
      Case(o)
        Create TextArea
      End Case
    End Loop   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2013-07-15
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多