Я собираюсь задать вопрос, касающийся проблемы, с которой я сталкиваюсь, и постараюсь выяснить это на основе информации от ваших ребят Я выложу исходный код, если ДЕЙСТВИТЕЛЬНО не смогу его получить, но я пойду ...
Итак, у меня есть форма, которая отображает поля по вертикали. Все это выпадающее меню, а в самом конце кнопка отправки. Там есть немного 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 />";
}
Выполнение этого гарантирует, что я просто скажу ему выбрать правильный индекс массива и действовать соответствующим образом.