这个问题假定您熟悉 FormStack ,这是一个拖放式WYSIWYG在线表单构建器。
背景的
客户正在使用FormStack来管理表单。目前,表单提交通过电子邮件发送,然后手动输入数据库。可以预见,我的任务是自动化这个过程。使用FormStack的WebHooks API很容易:我可以将表单提交发送到URL,例如:一个PHP脚本,并愉快地解析。
问题
是否可以使用简单标识符命名(或标记)FormStack字段?
客户端需要能够自定义表单,以便多个字段可以输入同一个数据库列。*据我所知,FormStack只提供了一种指定字段标签的方法,例如: Which of these trips interest you?
,不是程序员友好的标识符,例如Trip
。我的脚本必须用字符串比较标签(由于它们的长度,更容易出现拼写错误)来确定要做什么。对这个问题有什么明智的解决方法?
澄清*
可以存在多个字段的原因是,客户端使用条件字段。例如,一个字段可能会询问,Where are you studying abroad?
如果用户选择“Europe”,则可能会出现一个条件字段,询问Which of these trips interest you?
,其中包含与欧洲相关的选项。然而,如果用户选择“非洲”,则可能出现类似的字段,例如Which of these trips interest you?
,但有关非洲的选择。在FormStack中,这些实际上是两个不同的字段。但是,您可以想象,这些值属于同一个数据库列Trip
。
答案 0 :(得分:2)
我现在已经解决了黑客问题。 FormStack允许在标签中使用HTML标记,例如Which of these trips interest you? <!--Trip-->
。客户愿意以这种方式“标记”字段。
以下是解析此类代码的代码片段,以防它可能对其他人有所帮助:
require_once 'Formstack.php';
$formstack = new Formstack($apiKey);
$form = $formstack->form($_POST['FormID']);
$taggedFields = array();
foreach ($form['fields'] as $field)
{
if (preg_match('/<!--\s*([0-9A-Za-z]+)\s*-->/',
$field['label'],
$matches))
{
$taggedFields[$matches[1]] = $_POST[$field['id']];
}
}
事实上,我必须让它更复杂一些。一些FormStack字段类型序列化输入(以可怕的方式)。例如,FormStack的 Name 字段类型采用多个字段(前缀,第一个,中间,最后,首字母,后缀),并将结果连接成一个字符串:
'first = Andrew
initial = W
last = Cheong'
为了解决这个问题,我编写了代码来处理Tell us your name! <!--FirstName=first--> <!--LastName=last--> <!--MiddleInitial=initial-->
代码如下。
require_once 'Formstack.php';
$formstack = new Formstack($apiKey);
$form = $formstack->form($_POST['FormID']);
$taggedFields = array();
foreach ($form['fields'] as $field)
{
if (preg_match_all('/<!--\s*([0-9A-Za-z]+)\s*(?:=\s*(\w+))?-->/',
$field['label'],
$matches,
PREG_SET_ORDER))
{
foreach ($matches as $captures)
{
if (count($captures) == 3 &&
preg_match('/(?:^|\n|\r)'.$captures[2].' = ([^\n\r]+)/',
$_POST[$field['id']],
$subcaptures))
{
$taggedFields[$captures[1]] = $subcaptures[1];
}
else
{
$taggedFields[$captures[1]] = $_POST[$field['id']];
}
}
}
}
希望FormStack很快会添加一个本地方式来命名或标记字段!