我要询问一个关于我遇到的问题的问题,并尝试根据你们的输入来解决这个问题。如果我真的无法解决它,我会发布源代码,但是在此之前...
所以,我有一个表单,它垂直显示字段。所有内容都是下拉菜单,在最后是提交按钮。有一点javascript可以让我在不刷新页面的情况下添加新行。因此,每个键的$_POST数组的数量都不相同。我担心的关键(其实是所有的,但是一旦我弄好了,所有的都可以工作)是$_POST['monworkhours']下拉菜单。这是一个具有不同工作时间列表的下拉菜单。我认为问题在于我需要根据提交循环遍历所有的$_POST ['monworkhours']数组。我不太清楚如何做到这一点。
另外,“问题”会导致输出的每一行都产生相同的结果。因此,我设置的第一个字段将成为通过javascript函数“添加”的每个附加行的结果。
感谢任何帮助。
表格:
截图:
getCellColor()函数:
注意:当提交一个表单行时,一切都很好;但当我有多个表单行时,就会出现重复信息的问题。
下面的示例应该能展示当我"添加一个工程师"(使其现在有两个表单行)时会发生什么。我将在图片之后发布输出结果:
应用程序截图:
注意:不要关注时间的输出,因为它们是通过一些正则表达式即时格式化的,其中一些有效,而另一些则不是,因为我还需要完成编写这些函数。请注意,我发送的以下输出在第一部分是正确的,但第二部分是第一行输出的重复。
注意:这里的重复项是
所以,我最终找到了一个解决方案,它不需要我改变表单代码。我认为我不需要改变表单代码,因为它是动态的。通常,在将多行表单数据提交到数据库时,我可以看到这很重要,但在这种情况下,我不认为这是正确的解决方案。不过,我非常感谢所有有深思熟虑和信息丰富的答案。
我最终将
以这种方式操作可以确保我只需要告诉它选择正确的数组索引,然后相应地进行处理。
所以,我有一个表单,它垂直显示字段。所有内容都是下拉菜单,在最后是提交按钮。有一点javascript可以让我在不刷新页面的情况下添加新行。因此,每个键的$_POST数组的数量都不相同。我担心的关键(其实是所有的,但是一旦我弄好了,所有的都可以工作)是$_POST['monworkhours']下拉菜单。这是一个具有不同工作时间列表的下拉菜单。我认为问题在于我需要根据提交循环遍历所有的$_POST ['monworkhours']数组。我不太清楚如何做到这一点。
另外,“问题”会导致输出的每一行都产生相同的结果。因此,我设置的第一个字段将成为通过javascript函数“添加”的每个附加行的结果。
感谢任何帮助。
表格:
<select name="monshifthours[]" id="monshifthours">
<option value="OFF">OFF</option>
<optgroup label="Front/Back Half">
<option value="7am7pm">7AM-7PM</option>
<option value="7pm7am">7PM-7AM</option>
<option value="7am7pmalt">7AM-7PM (Alt)</option>
<option value="7pm7amalt">7PM-7AM (Alt)</option>
</optgroup>
<optgroup label="Monday - Friday">
<option value="630am330pm">630AM-330PM</option>
<option value="7am4pm">7AM-4PM</option>
<option value="8am5pm">8AM-5PM</option>
<option value="10am7pm">10AM-7PM</option>
</optgroup>
</select>
$_POST输出(2个表单行):
["monshifthours"]=>
array(2) {
[0]=>
string(6) "7am7pm"
[1]=>
string(6) "7pm7am"
}
截图:
![在此输入图片描述](https://istack.dev59.com/cmvLo.webp)
function getCellColor($dow) {
foreach($_POST[$dow . 'shifthours'] as $key=> $hour) {
echo $count;
if ($hour == "7am7pmalt") {
return "style=\"background: yellow; color:#000;\"";
}
elseif ($hour == "OFF") {
return "style=\"background: red; color:#fff;\"";
}
else {
return "style=\"background: green; color:#fff;\"";
}
}
}
提交输出:
if (isset($_POST['submit'])) {
echo preTableFrmt();
foreach($engineer as $a => $b) {
echo "| [[$engineer[$a]]] || ".getCellColor('mon')." | $monday[$a] || ".getCellColor('tues')." | $tuesday[$a] || ".getCellColor('wed')." | $wednesday[$a] || ".getCellColor('thur')." | $thursday[$a] || ".getCellColor('fri')." | $friday[$a] || ".getCellColor('sat')." | $saturday[$a] || ".getCellColor('sun')." | $sunday[$a] <br />|-<br />";
}
echo postTableFrmt();
}
else { echo "Waiting for data..."; }
注意:当提交一个表单行时,一切都很好;但当我有多个表单行时,就会出现重复信息的问题。
下面的示例应该能展示当我"添加一个工程师"(使其现在有两个表单行)时会发生什么。我将在图片之后发布输出结果:
应用程序截图:
![enter image description here](https://istack.dev59.com/USbdZ.webp)
|-
| [[Drew Decker]] || style="background: yellow; color:#000;" | 7am7pmalt || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF || | || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF
|-
| [[Drew Decker]] || style="background: yellow; color:#000;" | 7pm-7am || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF || | || style="background: red; color:#fff;" | OFF || style="background: red; color:#fff;" | OFF
注意:这里的重复项是
style="background: yellow; color:#000;"
。
我的解决方案所以,我最终找到了一个解决方案,它不需要我改变表单代码。我认为我不需要改变表单代码,因为它是动态的。通常,在将多行表单数据提交到数据库时,我可以看到这很重要,但在这种情况下,我不认为这是正确的解决方案。不过,我非常感谢所有有深思熟虑和信息丰富的答案。
我最终将
getCellColor()
函数更改为以下内容:function getCellColor($index,$dow) {
if ( isset($_POST[$dow . 'shifthours'][$index]) && ($_POST[$dow . 'shifthours'][$index] == "7am7pmalt" || $_POST[$dow . 'shifthours'][$index] == "7pm7amalt")) {
return "style=\"background: yellow; color:#000;\"";
}
elseif ($_POST[$dow . 'shifthours'][$index] == "OFF") {
return "style=\"background: red; color:#fff;\"";
}
else {
return "style=\"background: green; color:#fff;\"";
}
}
我现在的foreach
看起来像这样:
foreach($engineer as $a => $b) {
echo "|-<br />| [[$engineer[$a]]] || ".getCellColor($a,"mon")." | ".format_date($monday[$a])." || ".getCellColor($a,"tues")." | ".format_date($tuesday[$a])." || ".getCellColor($a,"wed")." | ".format_date($wednesday[$a])." || ".getCellColor($a,"thur")." | ".format_date($thursday[$a])." || ".getCellColor($a,"fri")." | ".format_date($friday[$a])." || ".getCellColor($a,"sat")." | ".format_date($saturday[$a])." || ".getCellColor($a,"sun")." | ".format_date($sunday[$a])."<br />";
}
以这种方式操作可以确保我只需要告诉它选择正确的数组索引,然后相应地进行处理。