为表单获取人类可读的名称

时间:2013-04-10 22:34:46

标签: php arrays codeigniter html-email array-intersect

过去4个小时我一直在研究这个问题。现在我终于结束了我的大多数问题,我似乎无法找到最终问题的解决方案。

问题:我必须向学生发送电子邮件(电子邮件存储在数据库中)。在电子邮件中,必须有一个包含列表项的无序列表。那部分是简单的部分(html电子邮件)。我现在面临的问题是我想获取表单的实际名称,而不是值,因为值只是

  
    

value =“1”value =“2”

  

这不会为学生提供有关表格内容的大量信息。

这些是我的输入字段:

<label id="form"><input type="checkbox" name="form[]" value="3" >DECSP</label>
<label id="form"><input type="checkbox" name="form[]" value="4" >DESNAP</label>

如果您再次注意到该值只是一个数字,我想实际获取DESCP和DESNAP

表单的NAME

这就是我的尝试:

$body .= '<ul>';

$forms = $this->input->post('form'); // The check boxes 
$dbforms = $this->queue_model->first10() + $this->queue_model->elev9() + $this->queue_model->twenty_5() + $this->queue_model->twen8thir7() + $this->queue_model->checklists(); // Here I take the forms from the database and combine the arrays


$givenforms = array_intersect_assoc($dbforms, $forms); // Here I do an intersect where form_id matches the value

foreach ( $givenforms as $key => $value) { // If a match is good then give me the form_name
$body .= '<li>' . $value . '</li>';
}

$body .= '</ul>';

我很困惑从哪里开始。希望你们明白。

我唯一能想到的就是做一个

  

的foreach

遍历所有在复选框中选中的表单,然后在查询中

  

选择*表格,其中form_id =(检查了什么形式)

然后

  

返回

表单的实际名称。

但同样,我不知道这是否是一个合适的解决方案。提前感谢您传递的任何信息。

  

修改1:

复选框必须是一个数组,以便我可以存储在形成学生的数据库中。看看我的other question.

3 个答案:

答案 0 :(得分:1)

PHP无法知道与给定输入字段关联的文本内容。您从客户端收到的所有内容都是一个键/值对(键是输入字段的名称部分,值是值部分。)

正如您所指出的,您可以再次查询数据库并获取相应的名称。

或者,您可以找到其他一些传递名称的创造性方法。如:

  • 创建一个隐藏的输入字段,其中包含数组的字符串表示形式,其中包含所有输入字段的键/名称对。

  • 您可以使用一些JS来更新隐藏的输入字段,其中包含所选输入字段的名称

  • name="hiddenInput_3"value="DECSP"的每个输入字段设置一个隐藏的输入字段。现在,您可以将输入字段的值与隐藏输入字段的名称相关联,以获取PHP端的名称。

警告:这些只是想法,我建议不要做任何上述操作,因为您通过客户端传递数据,在那里可以轻松地更改数据。最好的方法当然是再次查询db或在会话中存储一些输入数组供以后使用。

答案 1 :(得分:0)

你需要在这里改变一些事情:

<label for="DECSP">DECSP</label><input type="checkbox" name="DECSP" value="3" />

在php中:

$value = $_POST['DECSP'];

答案 2 :(得分:0)

这很好用,而且速度惊人!我甚至没有注意到等待时间,所以感谢上帝。

任何其他想要做类似事情的人的代码:

输入字段:

<label id="form"><input type="checkbox" name="form[]" value="4" >DESNAP</label> // Yes I know id should be unique I will change that class asap!

            ...............................................
            $body .= '<ul>';

            foreach ($this->input->post('form') as $form_id) {
                $forms[] = $this->queue_model->getform($form_id);
            }

            foreach ($forms as $givenform) {
                $body .= '<li>' . $givenform . '</li>';
            }

            $body .= '</ul>';
           ............................
           $this->email->message($body);

和完成的结果:

enter image description here