我已经搜索了几个星期,但找不到问题的解决方案。我试着理解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循环已经完成时,所有其他语句只执行一次。这就是为什么所有变量都有最后一个值。