foreach第二次没有得到阵列数据

时间:2012-05-29 17:10:22

标签: php javascript arrays

这个问题构建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”}

2 个答案:

答案 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[]等,然后将所有字段作为数组处理。