2012-05-29 27 views
0

这个问题构建off of this question I had earlier ...我有一个PHP表单提交罚款。我在添加了“添加更多”功能,再次添加了整个字段集。foreach没有获取阵列数据第二次通过

//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"; 
    } 

这将需要第1场,那是PHP添加一个...然后第一字段集是通过JavaScript添加(用户添加),但它不会采取第二或第三...所以我的数据结果看起来像:

文件夹的完整路径来更改访问:t:\此驱动器用户权限 群将被陈ged:dv组需要读取访问权限的其他用户: jfla其他需要作者访问权限的用户:azann用户为 已从访问权限中删除:dlint数据管理员,项目经理 可授权访问权限变更的主管或主管:gpone电话号码 审批官员:888-888-7777

文件夹中更改访问的完整路径:O:\ driveUser权限组 改变:odrive groupAdditional用户需要读取访问权限: sjonesAdditional用户要求笔者查阅:pvalleUsers是 从访问中删除:kpowerData管理员,项目经理,项目 可以授权访问更改的主管或主管:bzellPh正式批准的一个 号码:777-777-7777

I:\新的I组urusa mmalone jjon yokis 888-999-555

U:\ U基团phammer midnite bmarley gdead 777-444-2222

为什么这个foreach没有再次拾取addQues()?

的var_dump $ _REQUEST

阵列(22){[ “名称”] =>串(1) “”[ “电子邮件”] =>串(14) “”[ “添加”] = > 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” ] => ar ray(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” => 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) [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 group”[2] => string(6)“sjones”[3] => string(6)“pval”[4] => string(7)“kpow”[5] => string(8)“bdezl”[6] => string(12) “777-777-7777 (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] =>字符串(4)“u:\”[15] =>字符串(7)“u组”[16] =>字符串(7)“phammer” [17] =>字符串(7)“midnite”[18 ] => string(7)“bmarley”[19] => string(5) “gdead”[20] => string(12)“777-444-2222”}

+0

var_dump($ _ REQUEST)的输出是什么;'? – Viktor

+0

@Viktor在那里添加了var_dump。在顶部有一些值没有立即设置,即...名称,电子邮件,添加,citystate,phone1,phone2,reqtype ...谢谢。 – jasonflaherty

回答

2

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

您可能没有正确设置表单域的名称。如果第一个和第二个字段集起作用,但其他字段集不起作用,那么最初在表单中的字段与动态添加的名称约定不同,而动态添加的字段彼此冲突。

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

+0

如果这使得后处理更容易,这确实是一种方便的方式来分别获取每个集合。太好了! – Viktor

+0

好的,该解决方案工作得很好......我用这个来获取数据......感谢PHP手册... $ a = $ _ REQUEST ['request'];的foreach($ a作为$值1){\t \t \t \t \t \t的foreach($值1为$ K => $值2){ \t \t \t \t回声$ K表; \t \t \t \t echo“$ value2
”; \t \t \t} \t \t} – jasonflaherty

1

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

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