获取表单的人类可读名称
Posted
技术标签:
【中文标题】获取表单的人类可读名称【英文标题】:Getting human readable names for forms 【发布时间】:2013-04-10 22:34:46 【问题描述】:过去 4 小时我一直在研究这个问题,一个又一个问题。现在我终于解决了我的大部分问题,我似乎无法解决最后的问题。
问题:我必须向学生发送一封电子邮件(电子邮件存储在 DB 中)。在电子邮件中必须有一个带有列表项的无序列表。那部分是简单的部分(html 电子邮件)。我现在面临的问题是我想获取表单的实际名称,而不是值,因为值只是
值="1" 值="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 表单的名称
这是我尝试过的:
$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
遍历在复选框中选中的所有表单,然后在查询中
select * forms where form_id = (检查了什么表单)
然后
返回
表单的实际名称。
但是,我不知道这是否是一个合适的解决方案。提前感谢你们提供的任何信息。
编辑 1:
复选框必须是一个数组,以便我可以将学生收到的表格存储在数据库中。看看我的other question.
【问题讨论】:
不确定是否还有其他原因希望您的复选框选择以数组形式返回,但如果您使用<input name="DECSP" type="checkbox">
之类的东西,您将在 POST 数据中返回实际名称。跨度>
对对...就像我当时想的那样 :( 好吧,看来我必须运行查询才能根据用户检查的内容从数据库中获取 form_name。我会来的完成该部分后返回并更新我的帖子/给出答案。
<label>
s 不属于已发布的表单数据。
【参考方案1】:
php 无法知道与给定输入字段关联的文本是什么。您从客户端收到的只是一个键/值对(键是输入字段的名称部分,值是值部分)。
正如您所指出的,您可以再次查询数据库并获取相应的名称。
或者,您可以找到一些其他创造性的方法来传递名称。如:
创建一个隐藏输入字段,其中包含一个数组的字符串表示形式,其中包含所有输入字段的键/名称对。
您可以使用一些 JS 来使用所选输入字段的名称更新隐藏的输入字段
对于每个带有name="hiddenInput_3"
和value="DECSP"
的输入字段都有一个隐藏的输入字段。现在可以将输入字段的值与隐藏输入字段的名称关联起来,获取PHP端的名称。
警告:这些只是想法,我建议您不要执行上述任何操作,因为您通过客户端传递数据,它们很容易被更改。最好的方法当然是再次查询数据库或在会话中存储一些输入数组以供以后使用。
【讨论】:
+1 以获得好的信息,(当然同意我的观点:P)【参考方案2】:你需要在这里改变一些东西:
<label for="DECSP">DECSP</label><input type="checkbox" name="DECSP" value="3" />
在 php 中:
$value = $_POST['DECSP'];
【讨论】:
看看我刚刚更新的原帖。我知道这个解决方案先生。但就我而言,这是不可能的。 按照 OP 的做法,将<input>
嵌套在 <label>
中实际上很好。
我还使用标签 id=form 进行样式设置...在复选框的外观方面让生活变得更加轻松(相信我)...我会继续做foreach 循环,然后从查询中返回 form_name。感谢您的尝试!
正如@Whistletoe 指出的那样,id
必须是唯一的。如果您想使用它同时设置多个元素的样式,请使用类。此外,您可能需要标签中的for
属性并将其与输入字段的id
相关联。比如:<label for="input_DECSP" class="myLabel"><input type="checkbox" name="form[]" value="3" id="input_DECSP">DECSP</label>
是的 blushes id 应该是唯一的。好点,但它现在可以工作(稍后会改变)。【参考方案3】:
这很好用,而且速度惊人!我什至没有注意到等待时间,所以感谢上帝。
任何其他想要做类似的人的代码:
输入栏:
<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);
和完成的结果:
【讨论】:
以上是关于获取表单的人类可读名称的主要内容,如果未能解决你的问题,请参考以下文章
python 参数化pytest测试用例,包含参数字典和人类可读的测试用例名称
python 参数化pytest测试用例,包含参数字典和人类可读的测试用例名称