这个问题构建off of this question I had earlier ...我有一个提交正常的PHP表单。我正在添加一个“ADD MORE”功能,它再次添加了整个字段集。
//access changes
if ($reqtype=="accesschange"){
$subject="FORM: Request Access Change(s) To Exisiting Folder";
$note .="Full Path of folder to change access: $fullpath \n\n";
if($userpermissiongroup != ""){
$note .="User Permission Group to be changed: $userpermissiongroup \n";
}
if($addreadaccess != ""){
$note .="Additional users requiring read access: $addreadaccess \n";
}
if($addauthoraccess != ""){
$note .="Additional users requiring author access: $addauthoraccess \n";
}
if($removeaccess != ""){
$note .="Users to be removed from access: $removeaccess \n";
}
$note .="Data Steward, Program Manager, Project Lead, or Supervisor who can authorize access changes: $supervisor \n\n";
$note .="Phone number of approving official: $phoneapprover \n";
}
如果用户点击了更多内容,则此foreach将运行添加的字段:
$addQues = array(
"Full Path of folder to change access:",
"User Permission Group to be changed:",
"Additional users requiring read access:",
"Additional users requiring author access:",
"Users to be removed from access:",
"Data Steward, Program Manager, Project Lead, or Supervisor who can authorize access changes:",
"Phone number of approving official:",
);
foreach($_REQUEST['addfield'] as $k => $value) {
$note .= "$addQues[$k] $value";
}
它将占用第一个字段,即php添加了一个...然后是通过javascript(用户添加)添加的第一个字段集,但它不会占用第二个或第三个......所以我的数据结束了看起来像:
要更改访问权限的文件夹的完整路径:t:\ this-drive用户权限 要更改的组:dv group需要读取权限的其他用户: jfla需要作者访问权限的其他用户:azann用户 从访问中删除:dlint Data Steward,项目经理,项目 可以授权访问权限变更的主管或主管:gpone电话 批准官员人数:888-888-7777
更改访问权限的文件夹的完整路径:o:\ driveUser权限组 待更改:odrive group需要读取权限的其他用户: sjones需要作者访问的其他用户:pvalleUsers 从访问中删除:kpowerData Steward,项目经理,项目 可以授权访问权限变更的主管或主管:bzellPhone 批准官员人数:777-777-7777
我:\ new i group urusa mmalone jjon yokis 888-999-555
u:\ u group phammer midnite bmarley gdead 777-444-2222
为什么foreach没有再次使用addQues()?
VAR_DUMP $ _REQUEST
array(22){[“name”] => string(1)“”[“email”] => string(14)“”[“add”] => string(0)“”[“citystate”] => string(4)“,”[“phone1”] => string(0)“”[“phone2”] => string(0)“”[“reqtype”] => string(12)“accesschange”[“newpath”] => string(0)“”[“usersaccess”] => string(0)“”[“ryesaccess”] => string(0)“”[“approvingofficer”] => string(0)“”[“sphone”] => string(0)“”[“comments”] => string(0)“”[“fullpath”] => string(14)“t:\ this-drive”[“userpermissiongroup”] => string(8)“dv”[“addreadaccess”] => string(9)“jflat”[“addauthoraccess”] => string(5)“bzat”[“removeaccess”] => string(5)“dlit”[“supervisor”] => string(6)“lnat”[“phoneapprover”] => string(12)“888-888-7777”[“addfield”] => array(21){[0] => string(9)“o:\ drive”1 => string(12)“odrive group”[2] => string(6)“sjones”[3] => string(6)“pvae”[4] => string(7)“kpow”[5] => string(8)“bdez”[6] => string(12)“777-777-7777”[7] => string(7)“i:\ new”[8] => string(7)“i group”[9] => string(5)“urusa”[10] => string(7)“mmalone”[11] => string(4)“jjon”[12] => string(5)“yokis”[13] => string(11)“888-999-555”[14] => string(4)“u:\”[15] => string(7)“u group”[16] => string(7)“phammer”[17] => string(7)“midnite”[18] => string(7)“bmarley”[19] => string(5)“gdead”[20] => string(12)“777-444-2222”} [“c_id”] => string(0)“”}
我得到的信息的var_dump将是:var_dumb($ _ REQUEST ['addfield']
array(21){[0] => string(9)“o:\ drive”1 =>字符串(12)“驱动器 group“[2] => string(6)”sjones“[3] => string(6)”pval“[4] => string(7)“kpow”[5] => string(8)“bdezl”[6] =>串(12) “777-777-7777”[7] => string(7)“i:\ new”[8] => string(7)“i group” [9] => string(5)“urusa”[10] => string(7)“mmalone”[11] =>串(4) “jjon”[12] => string(5)“yokis”[13] => string(11)“888-999-555”[14] => string(4)“u:\”[15] => string(7)“u group”[16] => string(7)“phammer” [17] => string(7)“midnite”[18] => string(7)“bmarley”[19] =>串(5) “gdead”[20] => string(12)“777-444-2222”}
答案 0 :(得分:2)
如果我理解正确,您希望有一个表单,您可以在其中填写有关文件权限请求的详细信息,并动态地向同一表单添加更多请求。
您可能没有正确设置表单字段的名称。如果第一个和第二个字段集有效,而不是其他字段集,那么表单中最初的字段集具有与动态添加的字符集不同的命名约定,而动态添加的字符集则相互冲突。
我建议您使用Chrome对其进行测试,并打开开发人员工具,以便在Javascript更新页面时查看该页面的实时HTML代码。
您的上一个问题的表单字段名称如下:
<fieldset>
<input name="fullpath" (...) />
<input name="userpermissiongroup" (...) />
<input name="addreadaccess" (...) />
(...)
</fieldset>
如果你想要这样的几个字段集,你需要使用数组表示法,正如你在上一个问题的答案中指出的那样。
除非你知道自己在做什么,否则可能有点棘手。如果你只是添加数组括号,就像这样;
<fieldset>
<input name="fullpath[]" (...) />
<input name="userpermissiongroup[]" (...) />
<input name="addreadaccess[]" (...) />
(...)
</fieldset>
<fieldset>
<input name="fullpath[]" (...) />
<input name="userpermissiongroup[]" (...) />
<input name="addreadaccess[]" (...) />
(...)
</fieldset>
...您的数据将被提交,但不会很好地分组。最好将它们分组为对象;
<fieldset>
<input name="request[0][fullpath]" (...) />
<input name="request[0][userpermissiongroup]" (...) />
<input name="request[0][addreadaccess]" (...) />
(...)
</fieldset>
<fieldset>
<input name="request[1][fullpath]" (...) />
<input name="request[1][userpermissiongroup]" (...) />
<input name="request[1][addreadaccess]" (...) />
(...)
</fieldset>
这样,每个添加的请求数据都可以很好地分组。此解决方案要求您可以在添加字段集的javascript中正确设置数字索引。
答案 1 :(得分:1)
正如您在var_dump
输出中所看到的,addfield
是一个类型数组的字段,其中包含21个元素。具体来说,它包含您之前提到的三组字段值,但不以任何方式组织。这就是为什么当你循环遍历$k
时,你只获得第一组的文本($_REQUEST['addfield']
的值为0 ... 6)。
如果我是你,我可能会以与静态字段相同的方式命名动态添加的字段,即。 userpermissiongroup[]
,addreadaccess[]
等,然后将所有字段作为数组处理。