【问题标题】:foreach not getting array data second time throughforeach 第二次没有获取数组数据
【发布时间】:2012-06-03 22:39:21
【问题描述】:

这个问题建立了off of this question I had earlier... 我有一个可以提交的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 group 需要读取权限的其他用户: jfla 需要作者访问权限的其他用户:azann 用户是 已从访问权限中删除:dlint 数据管理员,项目经理,项目 可以授权访问更改的主管或主管:gpone 电话 审批人电话:888-888-7777

更改访问的文件夹的完整路径:o:\driveUser 权限组 要更改:odrive 组需要读取权限的其他用户: sjones 需要作者访问权限的其他用户:pvalleUsers 是 从访问权限中删除:kpowerData Steward,项目经理,项目 可以授权访问更改的主管或主管:bzellPhone 审批人电话:777-777-7777

i:\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) "" ["cmets"]=> 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]=>字符串(7)“kpow”[5]=>字符串(8)“bdez”[6]=>字符串(12)“777-777-7777”[7]=>字符串(7)“ i:\new" [8]=> string(7) "i group" [9]=> string(5) "urusa" [10]=> string(7) "mmalone" [11]=> string(4 ) "jjon" [12]=> 字符串(5) "yokis" [13]=> 字符串(11) "888-999-555" [14]=> 字符串(4) "u:\" [15]= > string(7) "u group" [16]=> string(7) "phammer" [17]=> string(7) "midnite" [18]=> string(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) "sjones" [3]=> 字符串(6) "pval" [4]=> 字符串(7)“kpow”[5]=>字符串(8)“bdezl”[6]=>字符串(12) "777-777-7777" [7]=> 字符串(7) "i:\new" [8]=> 字符串(7) "i 组" [9]=> 字符串(5) "urusa" [10]=> 字符串(7) "mmalone" [11]=> 字符串(4) "jjon" [12]=> 字符串(5) "yokis" [13]=> 字符串(11) "888-999-555" [14]=> string(4) "u:\" [15]=> string(7) "u group" [16]=> string(7) "phammer" [17]=> 字符串(7) "midnite" [18]=> 字符串(7) "bmarley" [19]=> 字符串(5) "gdead" [20]=> 字符串(12) "777-444-2222" }

【问题讨论】:

  • var_dump($_REQUEST); 的输出是什么?
  • @Viktor 在那里添加了 var_dump。顶部有一些值没有立即设置,即... name,email,add,citystate,phone1,phone2,reqtype... 谢谢。

标签: php javascript arrays


【解决方案1】:

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

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

我建议你使用 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 中正确设置数字索引。

【讨论】:

  • 这确实是一种方便的方法,可以单独获取每个集合,如果这样可以使后期处理更容易。不错!
  • 好的,该解决方案效果很好...我用它来获取数据...感谢 PHP 手册...$a=$_REQUEST['request']; foreach ($a as $value1) { foreach ($value1 as $k => $value2) { echo $k; echo "$value2
    "; } }
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多