如何创建“动态”表单 - 并在两个字段中存储数据和表单设计
Posted
技术标签:
【中文标题】如何创建“动态”表单 - 并在两个字段中存储数据和表单设计【英文标题】:How to create a "dynamic" forms - and store data and form design in two fields 【发布时间】:2011-06-24 01:51:06 【问题描述】:我正在为有很多现场工作人员的公司创建一个系统,他们需要在他们所做的每项工作中填写大量证书。我们通过一台运行 mysql/php/apache 系统的平板电脑来做到这一点,该系统与主服务器同步。
这些证书变化很大——所以我总是得到更新的版本。如果我在传统的数据库/php/html 设置中进行此操作 - 我将永远更改设计和数据库,更不用说处理证书设计和数据的修订了。 (添加、删除字段)
我正在寻找一种可以轻松设计表单并将其设计和数据存储在一行(两个字段中)的方法 - 在我的 mysql 数据库中。因此,在读取特定行时 - 我总是有与其数据匹配的正确设计,我可以合并在一起。这可以通过 xforms 来完成——但浏览器需要一个插件来做到这一点。 xforms 很乏味。
仅使用文本字段相当容易,但我需要复选框、列表等......
感谢任何头脑风暴。
【问题讨论】:
我可能没有完全理解你的问题,你想要一些可以根据不同证书拼凑起来的“模块化”表单域吗? (例如 cer.1 需要 3 个输入文本和 1 个复选框,cer.2 需要 2 个文本字段和 2 个选择等等) 是的 - 然后存储由此生成的数据。因为我必须假设表单永远不会相同,所以我需要并排存储数据和表单。 【参考方案1】:使用像 MongoDB 这样的 NoSQL 来存储证书怎么样?这对你有用吗?
【讨论】:
【参考方案2】:如果我理解正确,您正在寻找一种将用户数据保存到数据库的方法,如前所述,您可以将数据库引擎更改为 NoSQL dbe 或将数据导出为 CSV、JSON 或使用 php serialize() 函数。
如果您想拥有真实的字段名,您可以使用多个表来存储数据。主表只有证书的类型和真实数据的 id 在另一个表中保存特定证书的数据(可能还有一些通用数据,例如时间戳)。
这种方法并不完美,需要更多的 PHP 代码并从多个表中获取相似的数据,但这是我更喜欢的方法。
【讨论】:
【参考方案3】:您也许可以使用 ZendFramework 中的表单模块或类似模块来生成表单,然后序列化对象并将其存储到数据库中。然后,您将在验证中构建并使用数据库中的数据填充该表单将是微不足道的。
【讨论】:
【参考方案4】:查看 ValidForm,它是一个很棒的开源库,供用户处理表单。这不仅仅处理它处理的表单:
验证 客户端安全 服务器端安全 风格 还有更多!你不会出错,最重要的是它是免费且易于使用的,我认为它对你来说是理想的!
http://validformbuilder.org/
祝你好运, 泰勒·摩尔
【讨论】:
【参考方案5】:试试这个。
如您所说,创建一个包含两个字段的表,然后使用 csv 将您的设计和数据存储在表的两个字段中。
例如
nameTxt,ageTxt,genderRdo,agreeChk xxx,25,M,是的
然后你可以很容易地使用
$csvExplode = explode(",",$fetchedData);
如果您想要存储样式信息,最好再创建一列并将每个字段的样式信息存储在其中。
希望对你有帮助
【讨论】:
我不喜欢“店中店”的外观,但实际上它可以工作。如果它必须是一个传统的关系数据库,我更喜欢一个带有字段名的表和另一个带有与相应字段名相关的值的表。【参考方案6】:如何将数据存储在多维数组中,然后使用 php serialize() 函数将其放入数据库?
【讨论】:
【参考方案7】:创建一个包含以下字段的表:
ID - PK/自动增量 字段名称 字段类型 必填(真/假)
然后您可以简单地将值存储在单独的表中:
身份证 FK_Field_ID - 指字段表
您还可能拥有一个引用字段表的表单表。
接下来,我建议您构建一个字段类,即 CreateTextInput、CreateNumberInput 等。我通过重载方法完全做到了这一点。抱歉,我不能分享代码,这是给客户的。
希望这会有所帮助, IgnatedCoder.com
【讨论】:
以上是关于如何创建“动态”表单 - 并在两个字段中存储数据和表单设计的主要内容,如果未能解决你的问题,请参考以下文章