Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:Array$\u POST循环问题_Php_Arrays_Post_Loops_For Loop - Fatal编程技术网

PHP:Array$\u POST循环问题

PHP:Array$\u POST循环问题,php,arrays,post,loops,for-loop,Php,Arrays,Post,Loops,For Loop,我要问一个关于我遇到的问题的问题,并根据你们的意见来解决这个问题。如果我真的不能得到它,我会发布源代码,但我来了 我有一个表单,它垂直显示字段。所有内容都是一个下拉菜单,最后是一个提交按钮。有一些javascript允许我在不刷新页面的情况下添加新行。因此,对于每个键,从来没有相同数量的$u POST数组。我担心的关键(好吧,所有人,但一旦我让它工作起来,它将对所有人都有效)是$\u POST['monworkhours']下拉列表。这是一个下拉列表,其中列出了不同的工作时间。我相信问题在于,我

我要问一个关于我遇到的问题的问题,并根据你们的意见来解决这个问题。如果我真的不能得到它,我会发布源代码,但我来了

我有一个表单,它垂直显示字段。所有内容都是一个下拉菜单,最后是一个提交按钮。有一些javascript允许我在不刷新页面的情况下添加新行。因此,对于每个键,从来没有相同数量的$u POST数组。我担心的关键(好吧,所有人,但一旦我让它工作起来,它将对所有人都有效)是
$\u POST['monworkhours']
下拉列表。这是一个下拉列表,其中列出了不同的工作时间。我相信问题在于,我需要根据提交内容循环浏览所有
$\u 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>
截图:

getCellColor()函数:

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..."; }
注意:此处的副本为
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;\"";
        }
}
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 />";
}
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 />";
}
foreach($a=>b){
(一,“星期一”,一个“星期一”,一个“星期一,一美元一美元美元。)“““;”。格式。日期(星期一(星期一,一美元美元a。)))““;格式。日期(星期一(星期一[美元a。))””;;;;;;;;;;;;;;;;;;;;;;;;;;。格式。格式。日期(星期日(星期二(星期二(星期二(星期二[美元美元美元美元美元a。))))))))))。。““““。格式。格式。格式。格式。日期(星期二(星期二(星期二(星期二(星期二(一,“一,“一,“一,“一,“一,“一,“一,“周三”))))))“““““““““““))””””””“““““““““““““)))))””””””””。”。”。”。”。”。”。”。”。”。”。”。”_日期($星期五[$a])。“|||。”.getCellColor($a,“sat”)。“|。”.format|u date($星期六[$a])。“| |。”.getCellColor($a,“太阳”)。“|。”.format|u date($星期日[$a])。”
; }

这样做可以确保我只告诉它选择正确的数组索引,并相应地进行操作。

下面的解决方案适用于具有相同名称的复选框列表。我相信它也适用于下拉菜单列表,正如我在下面写的,但我还没有测试过它

<select name="monworkhours[]">
    <option value="aaa">aaa</option>
    <option value="bbb">bbb</option>
    <option value="ccc">ccc</option>
</select>

<select name="monworkhours[]">
    <option value="ddd">ddd</option>
    <option value="eee">eee</option>
    <option value="fff">fff</option>
</select>

aaa
bbb
ccc
ddd
eee
fff

一旦您提交此表单,$\u POST['monworkhours']有望成为一个数组。我还没有测试过它,但我不明白为什么这样做不起作用。

通过$\u POST['monworkhours']循环很简单:

foreach ($_POST['monworkhours'] as $i => $value){
    // Do something
}
如果没有看到更多的代码,我就说不出你的问题是什么。你是在HTML(例如
7AM-7PM
)中选择值,还是在javascript中选择值

如果是javascript,可能与您对多个元素使用相同的ID有关。这在技术上是不正确的。您可以使用顺序编号的ID,如下所示:

<select name="monshifthours_0" id="monshifthours_0">
...
<select name="monshifthours_1" id="monshifthours_1">
$i = 0;
while (isset($_POST["monshifthours_$i"])){
    // Do something
    $i++;
}

如果这些都没有帮助,请发布更多代码。更多。

我想我现在理解了您的问题。您的问题是,一旦提交表单,此代码将运行:

foreach($engineer as $a => $b) {             
    echo "| [[$engineer[$a]]] || ".getCellColor('mon')." | ...";
}  
因此,换句话说,对于每个工程师,运行函数getCellColor()

现在,函数getCellColor()还执行一个完整的循环,并计算所有已发布的项目,因此返回上一个表单行的结果

function getCellColor($dow) {
    foreach($_POST[$dow . 'shifthours'] as $key=> $hour) {   
    ...
    }
}
因此,换句话说,这里是正在发生的事情:

  • foreach(工程师)循环开始
  • foreach(工程师)获得工程师1
  • 内部工程师1,getCellColor启动
  • getCellColor计算每一行并返回最后一行的值
  • foreach(工程师)循环并获得工程师2
  • 内部工程师2,getCellColor启动
  • getCellColor计算每一行并返回最后一行的值(再次)
  • ……等等
注意:您说输出的第一行是正确的,但实际上不是。每一行都输出最后一行的结果

作为一个建议,我会像帕特里克·费舍尔(Patrick Fisher)在回答中提到的那样构建一些东西

<select name="aa_1"> <select name="bb_1"> <input type="hidden" name="lines[]" value="1" />
<select name="aa_2"> <select name="bb_2"> <input type="hidden" name="lines[]" value="2" />
<select name="aa_3"> <select name="bb_3"> <input type="hidden" name="lines[]" value="3" />

因此,我最终找到了一个不需要我更改表单代码的解决方案。我认为我不需要更改表单代码,因为它是动态的。通常,如果我将其写入数据库并向数据库提交多行表单数据,我可以看出这一点的重要性,但在这种情况下,我不相信这一点这是一个正确的解决方案。然而,我非常感谢并感谢我收到的所有深思熟虑和信息性的答复

最后,我将
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;\"";
        }
}
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 />";
}
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 />";
}
foreach($a=>b){
(一,“星期一”,一个“星期一”,一个“星期一,一美元一美元美元。)“““;”。格式。日期(星期一(星期一,一美元美元a。)))““;格式。日期(星期一(星期一[美元a。))””;;;;;;;;;;;;;;;;;;;;;;;;;;。格式。格式。日期(星期日(星期二(星期二(星期二(星期二[美元美元美元美元美元a。))))))))))。。““““。格式。格式。格式。格式。日期(星期二(星期二(星期二(星期二(星期二(一,“一,“一,“一,“一,“一,“一,“一,“周三”))))))“““““““““““))””””””“““““““““““““)))))””””””””。”。”。”。”。”。”。”。”。”。”。”。”_日期($星期五[$a])。”“.getCellColor($a,“sat”)。”格式日期($saturday[$a])。”格式日期($saturday[$a])。”格式日期($sunday[$a])。“
”; }

这样做可以确保我只告诉它选择正确的数组索引,并相应地进行操作。

你能显示一行吗(字段的名称很有趣,可以解决这个问题)哦,糟了,我忘了添加额外的信息-对不起,它将在那里