【问题标题】:How to set up DB codes for forms如何为表单设置数据库代码
【发布时间】:2013-04-08 01:17:11
【问题描述】:

我有一个包含 39 个复选框的页面。我的示例中的复选框类似于表单名称。我的问题是,有 39 个复选框,我需要一种方法来存储给学生的表格。目前我设置的是每个表格都用逗号和引号分隔,以便在运行报告时管理员可以使用 CSV 下载选项和学生收到的表格组。这很有效,但是非常初级,并且还产生了一个不好的副作用,即在每个表单名称之前存在 / 因为 mysql 会转义引号。

这是我目前拥有的:

 if ($this->input->post('action') == 'additional') {
     $givenforms = "";

     foreach ($this->input->post('form') as $forms) {
      $givenforms .= ', "' . $forms . '"';
        }
        $comments = 'This student was given' . $givenforms . '';

        if (($this->input->post('action') == 'additional') && ($this->input->post('other') == 'OTHER')) {
            $comments .= ', '.$this->input->post('counselorcomments');
        }
 }

再次在数据库中,结果将如下所示:这个学生被赋予了“xyz”、“eoe”、“wwo”,

几乎我只需要有关如何存储给学生的表格的想法,如果需要,如果将所有 39 个表格都给了学生,我需要存储给学生的所有表格以供以后报告。 (即使不会给出 39 个表格)

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    听起来您需要学生和表格之间的一对多关系。可能想对该主题进行一些研究。

    我认为将逗号分隔值存储在数据库的单个字段中通常是一种非常糟糕的形式,如果您这样做,它几乎总是表明您需要(至少)另一个表。

    【讨论】:

    • 在单个字段中使用逗号分隔值,然后通过分隔符将其分解以在 PHP 中创建数组是一种解决方案,但正如 jcorry 所说,这是一种糟糕的设计。尽管如此,它仍然是一个解决方案。如果您知道这会限制您的应用程序的灵活性,并且拥有多对多中间表是多余的。
    • 对,我绝对不喜欢那种设计,只是我的问题是,而不是如何设置它(我对数据库模式和关系非常熟悉)它几乎在我设置时表格 1 - 39 如果给学生表格 1-10 我应该如何在学生表格中标记?这就是让我感到困惑的地方。我不知道如何拥有它,以便在同一列和同一行中与另一个字段相关的多个数字数字。我会进一步调查此事!
    • 您将表单和学生之间的关联存储在另一个表中:students_forms。该表为id,student_id,form_id。每个学生表格都有一行。您可以将表格连接到该表上的学生。您应该非常熟悉这种技术,因为它是数据库设计的核心。
    【解决方案2】:

    我用 CSV 重构的一两个小时得到了很好的回报。我对已知信息的报告/分析可能性以及我现在存储它的方式感到非常满意。

    为任何其他想要做这样的事情的人提供几个 sn-ps 代码! :

     if ($this->form_validation->run() == FALSE) { // This stuff is self explanatory RT(F)M if you will :) 
         $this->cont();
     } else {
         $this->load->model('queue_model'); // Load model
    
         $session = $this->uri->segment(3); // Gets the session id 
         $counselor = $this->session->userdata('username'); // I get counsellor names from the username they log in by joining between the two tables
    
          if ($this->input->post('action') == 'Additional') { // If additional forms is checked do the following 
    
          foreach ($this->input->post('form') as $form_id) { // for each form submitted take the session Id from above and insert it into the table forms with the foreach $form_id variable
              $this->queue_model->forms($session, $form_id);
          }
    
          if (($this->input->post('action') == 'Additional') && ($this->input->post('addother') == 'addotherinfo')) { // If forms were submitted and a addotherinfo was [checked] add comments 
              $comments = ''.$this->input->post('action'). ' - '.$this->input->post('counselorcomments').'';
          } else {
              $comments = $this->input->post('action');
          }
    }  
    

    还添加了一个表单表(带有 ID 和表单名称)允许我像这样动态地制作复选框:

    <?php 
            foreach ($elevennine as $form) { ?>
                  <label id="form"><input type="checkbox" name="form[]" value="<?php echo $form['form_id'] ?>" <?php echo set_checkbox('form', $form['form_id']) ?>><?php echo $form['forms'] ?></label>
    <?php   } 
    ?>
    

    感谢所有伟大的想法!

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 2018-02-25
      • 2012-10-15
      • 2012-02-17
      • 2011-02-20
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多