ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP:数组$_POST循环问题

2019-11-02 22:30:23  阅读:214  来源: 互联网

标签:loops for-loop post arrays php


我要问一个有关我遇到的问题的问题,并根据你们的意见尝试解决.如果我真的无法获取源代码,我会发布源代码,但是在这里…

因此,我有一个窗体,该窗体垂直显示字段.一切都是下拉菜单,最后是一个提交按钮.有一堆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"
  }

屏幕截图:

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

注意:提交表格的一行时,一切都很好;当我有一个以上的时候然后我得到重复的信息.

下面的示例应该向您展示当我“添加一个工程师”(现在变成两个表单行)时会发生什么.我将在图像后发布输出:

应用图片:

注意:不要注意时间的输出,因为它们是通过某些正则表达式即时格式化的,其中一些有效,而有些则不需要,因为我必须完成编写这些功能.请注意以下事实:我发送的以下输出在第一部分中是正确的,但第二部分与输出的第一行重复:

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

这样可以确保我告诉它选择正确的数组索引,并据此进行操作.

解决方法:

以下解决方案适用于具有相同名称的复选框列表.我相信它也可以用于下拉菜单列表,正如我在下面写的那样,但我尚未对其进行测试.

<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>

提交此表单后,$_POST [‘monworkhours’]有望成为一个数组.我没有测试过,但是我不明白为什么这行不通.

标签:loops,for-loop,post,arrays,php
来源: https://codeday.me/bug/20191102/1994881.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有