2012-07-26 66 views
1

我需要制作一个表单,管理部门的人员可以添加客户信息。在第一个表单页面上,可输入客户姓名,地址和联系方式等信息,以及客户是否有子女。在PHP中验证表单元素的动态数量

表单经过PHP验证。如果客户没有孩子,数据将被保存到数据库中。如果客户确实有孩子,表单数据将被保存在隐藏的表单域中,并且会显示第二个表单页面,最多可以添加10个子项。

但是,在初始页面视图中,只有一个文本输入可见。使用javascript按钮,可以动态添加更多文本输入字段(直到达到10的限制)。

问题是PHP中的验证。如果其中一个文本输入包含无效字符串,则应该使用正确数量的字段重新显示表单,以及包含特殊HTML类中的错误的表单(在CSS中,出于可用性原因,为该类提供了一个红色边框,因此用户可以立即看到错误所在的位置)。但是,由于字段的添加发生在Javascript中,因此只有一个字段会重新显示表单。

任何有关如何解决这个问题的想法都非常受欢迎。我精通PHP,但JavaScript对我来说是非常新的,所以我无法对我发现的动态添加字段的脚本进行大的更改。

回答

0

我已经处理过类似的事情。有几个选项可以想到。

既然你有JS代码来点击按钮来生成新的字段,为什么不扩展那个JS函数,所以它也可以通过传递一些参数来调用。如果有参数,它将使用现有数据填充字段。

然后,如果窗体被再次显示,由于错误或编辑,从PHP,传递一些信息的Javascript,以便在页面加载时,您创建的字段和填充数据。

为了说明这一点,我想你有这样的事情:

<a href="#" onclick="addNewFormField(); return false">Add Another Child</a> 

而且你具备的功能:

function addNewFormField() { 
    // create new HTML element to contain the field 
    // create new input, append to element container 
    // add container to DOM 
} 

更改它,所以它是这样的:

function addNewFormField(data) { 
    // create new HTML element to contain the field 
    // create new input, append to element container 
    // add container to DOM 

    if (data != undefined) { 
     newFormElement.value = data.value; 
     newContainerElement.class = 'error'; 
    } 
} 

并从PHP中,添加一些运行onload的代码:

<script type="text/javascript"> 
window.onload = function() { // replace me with jQuery ready() or something proper 
    <?php foreach($childInList as $child): ?> 
     addNewFormField({ value: '<?php echo $child['name'] ?>' }); 
    <?php endforeach; ?> 
} 
</script> 

希望帮助,其高级别的例子,而不知道你的表单如何工作,但我过去曾用类似的方法重新填充JS创建的字段与服务器端的数据。

编辑:你可以使用的另一种方法是在PHP端创建HTML元素,并从那里预先填充它们,但这可能会导致重复代码,从JS和HTML生成HTML代同样的东西来自PHP。只要JS方面足够聪明,可以识别PHP添加的最初字段,就可以使用最容易实现的方式。就个人而言,我只是扩展你的JS代码来处理可选的数据,如上图所示。