PHP在Form中动态创建多维数组&;过帐后保留表单值


PHP Create Multidimensional Array Dynamically In Form & Keep Form Values After Posting

我已经搜索了几个星期,但找不到问题的解决方案。我试着理解PHP手册中写的内容,但这些例子与我的问题不匹配。我已经接近了,特别是在这个网站上,包括一个类似于这个问题的问题,但只是为了表格显示,但问题和示例与我的问题有足够的不同,我无法解释这些答案并将其修改为我的代码。或者它们太先进了,以至于超过了我的头顶。

我需要帮助,请。。。

我的问题是试图在表单中创建一组动态文本框,其数量取决于用户输入。然后,如果出现POST错误,我希望能够保留表单中输入的值。我可以对表单上的所有其他字段执行此操作,但不能对多维数组执行此操作。

文本框集为:

gFirstName、gLastName、gEmail

如果用户输入值"3",那么我需要gFirstName、gLastName和gEmail的3行文本框才能显示在表单上。

如果用户输入值"5",那么我需要gFirstName、gLastName和gEmail的5行文本框才能显示在表单上。

我可以对值进行非常简单的回声显示,这很有效,但当我尝试在文本框形式中重现这些值时,我会显示关联键或数字数组值,甚至更糟的是,显示单词"array"。

此外,我试着检查数组是设置的还是空的,以免得到可怕的偏移量或未定义的错误,但我仍然会得到其中一个,这取决于我如何修改语句。

叹气。。。。

这是一个可以工作的多维阵列显示器:

$guestData = array
(
"gFirstName" => array("cindy","cheryl","john"),
"gLastName" => array("johnson","smith","jones"),      
"gEmail" => array("cindy@hotmail.com","cheryl@gmail.com","john@hotmail.com"),
); 
foreach($guestData as $x => $gkey) 
foreach($gkey as $key => $x_value) 
{
if ($x_value<> ' ') 
{
    echo "Guest Data values are: x gkey is:  " . $x .  "     and key is:  " .  $key   . "      and x_value is: ".  $x_value ." <br> ";
}
next($guestData);
}

这是我正在努力工作的表单代码:

if(is_array($guestData) and isset($guestData)) {
$keys = array_keys($guestData);         
$count = count($guestData[$keys[0]]);   
for($i=0;$i<$count;$i++){                                           
$gnum = $key + 1;
echo "<label class='"inq5a'">Guest $gnum First Name:  <span class='"error'">*</span> </label> ";                                
echo "<input class='"textreg6'" type='"text'" name=''gFirstName''  value={$guestData['gFirstName'][$i]}</input>" ;
echo "<label class='"inq5b'">Last Name :  <span class='"error'">*</span> </label>";     
echo "<input class='"textreg6c'" type='"text'" name=''gLastName'' value={$guestData['gLastName'][$i]}   </input>" ;
echo "<label class='"inq5b'">Email :  <span class='"error'">*</span> </label> ";
echo "<input class='"textreg6c'" type='"text'" name=''gEmail'' value={$guestData['gEmail'][$i]}</input>" ;
}   
next($guestData);
} 

简单显示的结果是:

Simple Display: x gkey is: gFirstName and key is: 0 and x_value is: cindy
Simple Display: x gkey is: gFirstName and key is: 1 and x_value is: cheryl
Simple Display: x gkey is: gFirstName and key is: 2 and x_value is: john
Simple Display: x gkey is: gLastName and key is: 0 and x_value is: johnson
Simple Display: x gkey is: gLastName and key is: 1 and x_value is: smith
Simple Display: x gkey is: gLastName and key is: 2 and x_value is: jones
Simple Display: x gkey is: gEmail and key is: 0 and x_value is: cindy@hotmail.com
Simple Display: x gkey is: gEmail and key is: 1 and x_value is: cheryl@gmail.com
Simple Display: x gkey is: gEmail and key is: 2 and x_value is: john@hotmail.com 

表单值的结果只给了我最后一个值(键2(,如下所示:

Guest 3 First Name: * john       Last Name : *  john      Email : * john
Guest 3 First Name: * jones      Last Name : *  jones     Email : * jones
Guest 3 First Name: * john@hotmail.com  Last Name : * john@hotmail.com  Email : john@hotmail.com

它似乎是从行开头的Input语句中获取文本值。

所以总结一下问题:

我无法使用现有数组值正确填充文本表单。数组只显示数组组的最后一行中的值,而不是应该显示的所有组。

谢谢你能给我的任何帮助。

<?php
$guestData = array(
    "gFirstName" => array("cindy",  "cheryl","john"),
    "gLastName"  => array("johnson","smith", "jones"),      
    "gEmail"     => array("cindy@hotmail.com","cheryl@gmail.com","john@hotmail.com"),
); 
if(is_array($guestData) and isset($guestData)) {
    $keys = array_keys($guestData);         
    $count = count($guestData[$keys[0]]);   
    for($i=0;$i<$count;$i++){               
        $gnum = $i + 1;
        echo "<label class='"inq5a'">Guest $gnum First Name:  <span class='"error'">*</span> </label> ";                                
        echo "<input class='"textreg6'" type='"text'" name=''gFirstName''  value={$guestData['gFirstName'][$i]} </input>" ;
        echo "<label class='"inq5b'">Last Name :  <span class='"error'">*</span> </label>";     
        echo "<input class='"textreg6c'" type='"text'" name=''gLastName'' value={$guestData['gLastName'][$i]}  </input>" ;
        echo "<label class='"inq5b'">Email :  <span class='"error'">*</span> </label> ";
        echo "<input class='"textreg6c'" type='"text'" name=''gEmail'' value={$guestData['gEmail'][$i]} </input>" ;
        echo "<BR><BR>";
    }
} 

这将为您提供您所期望的输出。

您应该考虑为$guestData阵列提供更好的解决方案,或者可能过渡到使用数据库甚至平面文件格式

还要注意我是如何设置输入值的:{$guestData['gFirstName'][$i]}

输出表单时,foreach循环后没有花括号。因此php只执行foreach循环中的第一条语句。当foreach循环已经完成时,所有其他语句只执行一次。这就是为什么所有变量都有最后一个值。