因为每次没有第二次获取数组数据

foreach not getting array data second time through

本文关键字:获取 数组 数据 第二次 因为      更新时间:2023-09-26

这个问题建立在我之前提出的这个问题之上......我有一个提交正常的 php 表单。我正在向其添加"添加更多"功能,再次添加整个字段集。

//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 组 需要读取访问权限的其他用户: JFLA 需要作者访问权限的其他用户:azann 用户 从访问权限中删除:DLINT 数据管理员,项目经理,项目 可以授权访问更改的主管或主管:gpone 电话 批准官员人数:888-888-7777

要更改访问权限的文件夹的完整路径:o:''drive用户权限组 要更改: o驱动器组需要读取访问权限的其他用户: sjones需要作者访问权限的其他用户:pvalle用户 从访问权限中删除:kpowerData Steward、项目经理、项目 可以授权访问更改的主管或主管:bzellPhone 批准官员人数:777-777-7777

i:'ew i group urusa mmalone jjon yokis 888-999-555

u:''U 集团 哈默 米德尼特 巴马利 格迪尔 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) "access" 更改" ["新路径"]=> 字符串(0) " ["用户访问"]=> 字符串(0) " ["Ryesaccess"]=> 字符串(0) " ["批准官"]=> 字符串(0) " ["电话"]=> 字符串(0) " ["注释"]=> 字符串(0) " ["完整路径"]=>

字符串(14) "t: ''this-drive" ["userpermissiongroup"]=> string(8) "dv" ["addreadaccess"]=>字符串(9) "jflat" ["addauthoraccess"]=> 字符串(5) "bzat" ["removeaccess"]=> 字符串(5) "dlit" ["supervisor"]=> 字符串(6) "lnat" ["phoneapprover"]=> 字符串(12) "888-888-7777" ["addfield"]=> array(21) { [0]=> 字符串(9) "o:''驱动器" 1=> 字符串(12) "驱动器组" [2]=> 字符串(6) "琼斯" [3]=> 字符串(6) "PVAE" [4]=> 字符串(7) "KPOW" [5]=> 字符串(8) "bdez" [6]=> 字符串(12) "777-777-7777" [7]=> 字符串(7) "i:'ew" [8]=> 字符串(7) "i 组" [9]=> 字符串(5) "乌鲁萨" [10]=> 字符串(7) "马龙" [11]=>字符串(4) "jjon" [12]=> 字符串(5) "yokis" [13]=> 字符串(11) "888-999-555" [14]=> 字符串(4) "u:''"[15]=> 字符串(7) "U组" [16]=> 字符串(7) "锤子" [17]=> 字符串(7) "midnite" [18]=> 字符串(7) "bmarley" [19]=> 字符串(5) "gdead" [20]=> 字符串(12) "777-444-2222" } ["c_id"]=> 字符串(0) " }

我得到的信息var_dump是:var_dumb($_REQUEST['addfield']

array(21) { [0]=> string(9) "o:''drive" 1=> string(12) "drive 组" [2]=> 字符串(6) "琼斯" [3]=> 字符串(6) "pval" [4]=> 字符串(7) "kpow" [5]=> 字符串(8) "bdezl" [6]=> 字符串(12) "777-777-7777" [7]=> 字符串(7) "i:'ew" [8]=> 字符串(7) "I 组" [9]=> 字符串(5) "乌鲁萨" [10]=> 字符串(7) "马龙" [11]=> 字符串(4) "jjon" [12]=> 字符串(5) "yokis" [13]=> 字符串(11) "888-999-555" [14]=> 字符串(4) "u:''"[15]=> 字符串(7) "U 组" [16]=> 字符串(7) "phammer" [17]=> 字符串(7) "midnite" [18]=> 字符串(7) "bmarley" [19]=> 字符串(5) "gdead" [20]=> 字符串(12) "777-444-2222" }

如果我理解正确,您希望有一个表单,您可以在其中填写有关文件权限请求的详细信息,并动态向同一表单添加更多请求。

您可能没有正确设置表单域的名称。如果第一个和第二个字段集有效,但其他字段集不起作用,则表单中最初添加的字段集与动态添加的字段集具有不同的命名约定,并且动态添加的字段集相互冲突。

我建议您使用 Chrome 进行测试,并打开开发人员工具以查看页面的实时 HTML 代码,因为它是由 Javascript 更新的。

您的最后一个问题的表单字段命名如下:

<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 中正确设置数字索引。

正如您在var_dump输出中看到的,addfield 是一个数组类型的字段,其中包含 21 个元素。具体来说,它包含您之前提到的三组字段值,但未以任何方式组织。这就是为什么当您循环遍历$_REQUEST['addfield']时,您只收到第一组($k的值为 0...6)的文本。

如果我是你,我可能会以与静态字段相同的方式命名动态添加的字段,即。 userpermissiongroup[]addreadaccess[]等,然后将所有字段处理为数组。