PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (5): [1] 2 3 4 5 »

> Найдено сообщений: 74
Ruskat Отправлено: 26 Апреля, 2024 - 18:34:50 • Тема: Вывести JSON-данные в разные HTML-таблицы седствами PHP • Форум: Хранение данных, их вывод и обработка

Ответов: 3
Просмотров: 39
don.bidon пишет:
Денег скока плАтите?

НиСкока, так как это не коммерческий проэкт.
Подумал цыклшить так:
PHP:
скопировать код в буфер обмена
  1. $i1 = 0;        $i2 = 0;        $i3 = 0;
  2. foreach ($pl_st['stats'] as $cat_nm => $cat_vl) { $i2++;
  3.      echo "<hr><b>".$i2."-й Розділ: </b>" . $cat_nm . "<hr>";
  4.           foreach($pl_st['stats'][$cat_nm] as $predm => $qty) {
  5.           echo $predm . " => " . $qty . "<br>";
  6.           }
  7. }

Ещё нужно названия параметров переназвать на понятные.
Ruskat Отправлено: 25 Апреля, 2024 - 09:11:12 • Тема: Вывести JSON-данные в разные HTML-таблицы седствами PHP • Форум: Хранение данных, их вывод и обработка

Ответов: 3
Просмотров: 39
Имеется JSON-массив игровых данных игрока (MineCraft):
CODE (htmlphp):
скопировать код в буфер обмена
  1. {"stats":{"minecraft:picked_up":{"minecraft:stone":1,"minecraft:air":0,"minecraft:cornflower":1,"minecraft:string":1,"minecraft:acacia_door":1,"minecraft:egg":1,"minecraft:cherry_trapdoor":0,"minecraft:rail":3,"minecraft:heartbreak_pottery_sherd":0},"minecraft:custom":{"minecraft:time_since_rest":964981,"minecraft:sprint_one_cm":753,"minecraft:walk_one_cm":262548,"minecraft:drop":1,"minecraft:minecart_one_cm":38,"minecraft:damage_dealt":35,"minecraft:fly_one_cm":2370723,"minecraft:open_chest":1,"minecraft:crouch_one_cm":733,"minecraft:play_time":1126208,"minecraft:sneak_time":8632,"minecraft:walk_under_water_one_cm":7352,"minecraft:jump":226,"minecraft:leave_game":30,"minecraft:time_since_death":1126208,"minecraft:walk_on_water_one_cm":1610,"minecraft:climb_one_cm":48,"minecraft:sleep_in_bed":2,"minecraft:total_world_time":1126208,"minecraft:fall_one_cm":6584},"minecraft:broken":{"minecraft:air":0,"minecraft:exposed_cut_copper_stairs":0,"minecraft:smooth_sandstone":0},"minecraft:dropped":{"minecraft:bamboo_stairs":0,"minecraft:tipped_arrow":0,"minecraft:stone":1,"minecraft:brain_coral_block":0,"minecraft:fishing_rod":0,"minecraft:dark_oak_fence_gate":0},"minecraft:crafted":{"minecraft:emerald_block":0,"minecraft:waxed_oxidized_cut_copper_slab":0,"minecraft:music_disc_5":0,"minecraft:air":0},"minecraft:used":{"minecraft:glass":32,"minecraft:mossy_stone_bricks":4,"minecraft:sea_lantern":25,"minecraft:nether_brick_wall":0,"minecraft:daylight_detector":13,"minecraft:acacia_door":9,"minecraft:birch_leaves":4,"minecraft:spruce_slab":1,"minecraft:grass_block":6,"minecraft:blue_orchid":0,"minecraft:acacia_trapdoor":1,"minecraft:powered_rail":157,"minecraft:spruce_pressure_plate":2,"minecraft:stone_slab":43,"minecraft:stone":186,"minecraft:dark_oak_slab":1,"minecraft:redstone_block":39,"minecraft:spruce_fence_gate":4,"minecraft:cat_spawn_egg":22,"minecraft:smooth_sandstone_stairs":24,"minecraft:stone_brick_stairs":0,"minecraft:gilded_blackstone":0,"minecraft:blackstone_slab":0,"minecraft:large_amethyst_bud":0,"minecraft:oak_leaves":51,"minecraft:jungle_wood":1,"minecraft:glowstone":11,"minecraft:redstone_lamp":4,"minecraft:rail":116,"minecraft:potion":8,"minecraft:red_bed":4,"minecraft:birch_log":2,"minecraft:stone_stairs":17,"minecraft:air":0,"minecraft:spruce_fence":111},"minecraft:mined":{"minecraft:light_gray_carpet":0,"minecraft:potted_torchflower":0,"minecraft:cobblestone":0,"minecraft:infested_chiseled_stone_bricks":0}},"DataVersion":3700}

Он постоянно расширяется и изменяется.
Данные берутся из файла:
PHP:
скопировать код в буфер обмена
  1. $pl_st = json_decode(file_get_contents('world/stats/' . $uuid . '.json'), true);

Прошу помочь в организации HTML-таблиц, в которых будут свои данные.
Например, таблица с именем minecraft:picked_up - все данные с этой ветки...
Таблица minecraft:custom - все данные с этой ветки...
И так далее.
Так же, нужно иметь возможность заменять значения достижений на понятные, если они есть в массиве.
Например, если попадется параметр minecraft:stone, то его нужно в таблице вывести как камней
То есть, чтобы названия веток в заголовках таблиц и их параметры поддавались автоматическому переименовыванию, если они уже есть в достижениях игрока
Ruskat Отправлено: 13 Февраля, 2022 - 10:51:18 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:

Видимо здесь опечатка: разделить по трем раскрывающимся спойлерам

Таки по четырём.
Но Ваш код не стал моим решением. Скорее всего я не верно выразился.
Мне нужно вывести блоки с прошедшими текущим и предстоящими дежурствами определённого работника.

Создал 3 РНР-файла:
PHP:
скопировать код в буфер обмена
  1. include("gchw_current.php");
  2. include("gchw_future.php");
  3. include("gchw_past.php");

С практически одинаковым содержимым, по с разными параметрами выборки с базы:
PHP:
скопировать код в буфер обмена
  1. $gchw_future = mysqli_query($db, "SELECT * FROM `gch_brygady` WHERE wrk_id LIKE '%".$tn."%' and `dt_fr` > date(now()) ORDER BY `dt_fr` ASC");

Где $tn - табельный номер работника.
dt_fr - дата, С которой дежурство. В компоновке с tm_fr - время, с которого дежурство, дадут более точное начало информирования, когда человеку на работу.
А там уже выбрать дежурства с участием конкретного работника из базы:

  • `dt_fr` > date(now()) - позже сегодняшней даты
  • `dt_fr` = date(now()) - если сегодня утром на работу. Тут еще подумаю, чтобы отображало за сутки до дежурства - выбирать, если не более одного дня - за день до сегодняшнего на сутки.
  • `dt_fr` < date(now()) - отображать дежурства, которые уже были - ранее сегодняшней даты

В каждом из файлов стоит условие отображать содержимое, если есть хоть одна запись, согласно условиям выборки - не ноль. Например:
PHP:
скопировать код в буфер обмена
  1. $gchw_past = mysqli_query($db, "SELECT * FROM `gch_brygady` WHERE wrk_id LIKE '%".$tn."%' and `dt_fr` < date(now()) ORDER BY `dt_fr` DESC");    // and `dt_fr` < date(now())
  2. if (mysqli_num_rows($gchw_past) > 0){ ?> <a onclick="$('#ch_past').slideToggle('slow');" href="javascript://">Показати <?PHP echo mysqli_num_rows($gchw_past).' '.vidminyuvannya(mysqli_num_rows($gchw_past), 'прошлое дежурство', 'прошлого дежурства', 'прошлых дежурств'); ?>.</a><div id="ch_past" style="display:none"> <?PHP $i_past = 1;

Далее цикл... и после окончания цикла, но перед закрытием условия - </div>
Функция склонения по падежам:
PHP:
скопировать код в буфер обмена
  1.                 function vidminyuvannya($num, $form_for_1, $form_for_2, $form_for_5){
  2.                         $num = abs($num) % 100; // берем число по модулю и сбрасываем сотни (делим на 100, а остаток присваиваем переменной $num)
  3.                         $num_x = $num % 10; // сбрасываем десятки и записываем в новую переменную
  4.                         if ($num > 10 && $num < 20) // если число принадлежит отрезку [11;19]
  5.                                 return $form_for_5;
  6.                         if ($num_x > 1 && $num_x < 5) // иначе если число оканчивается на 2,3,4
  7.                                 return $form_for_2;
  8.                         if ($num_x == 1) // иначе если оканчивается на 1
  9.                                 return $form_for_1;
  10.                         return $form_for_5;
  11.                 }       // echo $max_product . ' ' . vidminyuvannya($max_product, 'товар', 'товара', 'товаров');


Если скоро работать, но еще не пришло время работать, то затягиваю в HTML-блок AJAXом файл clock.php.
CODE (javascript):
скопировать код в буфер обмена
  1.                                         function show()  
  2.                                         {  
  3.                                                 $.ajax({  
  4.                                                         url: "/clock.php?f=<?php echo $today_br_data['dt_fr'].''. $today_br_data['tm_fr'].'&t='.$today_br_data['dt_to'].''. $today_br_data['tm_to']; ?>",  
  5.                                                         cache: false,  
  6.                                                         success: function(html){  
  7.                                                                 $("#work_clock").html(html);  
  8.                                                         }  
  9.                                                 });  
  10.                                         }  
  11.                                         $(document).ready(function(){  
  12.                                                 show();  
  13.                                                 setInterval('show()',1000);  
  14.                                         });

где

  • $today_br_data['dt_fr'] - Рабочая дата С.
  • $today_br_data['tm_fr'] - Рабочее время С.
  • $today_br_data['dt_to'] - Рабочая дата По.
  • $today_br_data['tm_to'] - Рабочее время По.

clock.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         if(isset($_GET['f'])){$f = $_GET['f'];}else{$oldDate = date("Y-m-d H:i"); $f = date("Y-m-d H:i", strtotime($oldDate.'+ 1 days')); }
  3.         if(isset($_GET['t'])){$t = $_GET['t'];}else{$t = ''; }
  4.         if(isset($_GET['c'])){$c = $_GET['c'];}else{$c = ''; }
  5.         $date_time_now = date("Y-m-d H:i:s");
  6.                 $pochatok_cherguvannya = $f;
  7.         if($date_time_now == $pochatok_cherguvannya){ //Если уже работает
  8.                 $start_date = new DateTime($f);
  9.                 $end_date = new DateTime($t);
  10.                 $ssb = $start_date->diff(new DateTime($date_time_now ));//https://phptime.ru/questions/365191/how-to-get-time-difference-in-minutes-in-php/
  11.                 $sse = $end_date->diff(new DateTime($date_time_now ));//https://phptime.ru/questions/365191/how-to-get-time-difference-in-minutes-in-php/
  12.                         if ($ssb->d == 0){$db='';}else{$db=$ssb->d.' дн, ';}    if ($sse->d == 0){$de='';}else{$de=$sse->d.' дн, ';}
  13.                         if ($ssb->h == 0){$hb='';}else{$hb=$ssb->h.' год, ';}   if ($sse->h == 0){$he='';}else{$he=$sse->h.' год, ';}
  14.                         if ($ssb->i == 0){$mb='';}else{$mb=$ssb->i.' хв, ';}    if ($sse->i == 0){$me='';}else{$me=$sse->i.' хв, ';}
  15.                         if ($ssb->s == 0){$sb='';}else{$sb=$ssb->s.' сек. ';}   if ($sse->s == 0){$se='';}else{$se=$sse->s.' сек. ';}
  16.                 $w_b = $db.$hb.$mb.$sb;         $w_e = $de.$he.$me.$se;
  17.                 //echo '<div class="xw-tc" style="width: 40%; height: 24px;">Відпрацьовано: '.$w_behind.' Лишилося: '.$w_end.'</div>';
  18.                 echo 'Відпрацьовано: '.$w_behind.' Лишилося: '.$w_end.'';
  19.         }else{ //иначе показывать время до начала работы и через сколько конец работы.
  20.                 $start_date = new DateTime($pochatok_cherguvannya);
  21.                 $end_date = new DateTime($t);
  22.                 $ssb = $start_date->diff(new DateTime($date_time_now ));//https://phptime.ru/questions/365191/how-to-get-time-difference-in-minutes-in-php/
  23.                 $sse = $end_date->diff(new DateTime($date_time_now ));//https://phptime.ru/questions/365191/how-to-get-time-difference-in-minutes-in-php/
  24.                         if ($ssb->d == 0){$db='';}else{$db=$ssb->d.' дн, ';}    if ($sse->d == 0){$de='';}else{$de=$sse->d.' дн, ';}
  25.                         if ($ssb->h == 0){$hb='';}else{$hb=$ssb->h.' год, ';}   if ($sse->h == 0){$he='';}else{$he=$sse->h.' год, ';}
  26.                         if ($ssb->i == 0){$mb='';}else{$mb=$ssb->i.' хв, ';}    if ($sse->i == 0){$me='';}else{$me=$sse->i.' хв, ';}
  27.                         if ($ssb->s == 0){$sb='';}else{$sb=$ssb->s.' сек. ';}   if ($sse->s == 0){$se='';}else{$se=$sse->s.' сек. ';}
  28.                 $w_b = $db.$hb.$mb.$sb;         $w_e = $de.$he.$me.$se;
  29.                 echo 'До початку чергування: '.$w_b.' До закінчення чергування: '.$w_e;
  30.         }

Ещё хочу сформировать прогресс-бар, который будет процентно заполняться в зависимости от отработанного времени или времени до начала работы.
Прошу помощи в добавлении к бригаде текстовой заметки.
Работников бывает трое или четверо. Вот я припысываю переменную заметки записать к ячейке третьего работника таким образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['prymitka'])){$prm = mysqli_real_escape_string($db, $_POST['prymitka']);} //Примітка для бригади
  3. $prm_arr = array(' ', '  ', ' ', $prm, ' ');

Далее она пишется в цикле в базу. Можно как-то автоматически задать, писать заметку к ячейке последнего работника, третьего или четвёртого автоматически, а не исскуственным созданием массива?
Ruskat Отправлено: 06 Февраля, 2022 - 03:41:44 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Не мало уже сделал. Даже получилось работнику по его табельному номеру показывать, когда у него дежурства и на какой бригаде.
Сейчас я хочу все дежурства, в виде бригад, на которых он числится, разделить по трем раскрывающимся спойлерам:
1: Текущее дежурство - если дата и время дежурства уже наступили (C 2020-02-08 08:00 по 2020-02-09 08:00 ) - если таковое имеется.
2: Грядущее дежурство - если до выхода на дежурство менее 3-х суток
3: Предстоящие дежурства - все будущие дежурства, до которых 3-е и более суток.
4: Прошлые дежурства - самый низ - от момента времени окончания суток и пока они есть. Далее продумаю автоочистку дежурств, старее 1-го месяца.
Ruskat Отправлено: 01 Февраля, 2022 - 00:10:08 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:

Удачи!

Не могу зацепиться за формирование в базе строк с работниками.
А именно [wrk_1]... ($_POST['wrk_1'])
Параметр идентификатора работника динамичен. Может и до [wrk_4] дойти, а може и 2 иметь.
Как посчитать колличество [wrk_Х] , чтобы потом аналогично и для времени посчитать и для работника получить цикл и всё записать в базу?
Писать думаю в цикле, примерно так:
PHP:
скопировать код в буфер обмена
  1.     $n = count($_POST);
  2.     for($i=1; $i < $n; $i++){
  3.            $vid = $_POST['wrk'.$i];
  4.            $dt_fr= $_POST['dt_from_'.$i];
  5.            $tm_fr= $_POST['tm_from_'.$i];
  6.            $dt_to= $_POST['dt_to_'.$i];
  7.            $tm_to= $_POST['tm_to_'.$i];
  8.     }

Может сформировать как-то иначе, чтобі получилось $_POST['wrk'][0]...[4]
Ruskat Отправлено: 29 Января, 2022 - 02:28:31 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:
...

Уже массив с данными получаю.
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [gr_to_date] => 2022-01-30
  4.     [st_disp] => 2
  5.     [kps] => 5
  6.     [brygada] => 205
  7.     [bazirovanie] => 10
  8.     [wrk_1] => 22
  9.     [dt_from_1] => 2022-01-30
  10.     [tm_from_1] => 08:00
  11.     [dt_to_1] => 2022-01-31
  12.     [tm_to_1] => 08:00
  13.     [wrk_2] => 3
  14.     [dt_from_2] => 2022-01-30
  15.     [tm_from_2] => 08:00
  16.     [dt_to_2] => 2022-01-31
  17.     [tm_to_2] => 08:00
  18.     [wrk_3] => 9
  19.     [dt_from_3] => 2022-01-30
  20.     [tm_from_3] => 08:00
  21.     [dt_to_3] => 2022-01-31
  22.     [tm_to_3] => 08:00
  23.     [wrk_4] => 110
  24.     [dt_from_4] => 2022-01-30
  25.     [tm_from_4] => 08:00
  26.     [dt_to_4] => 2022-01-31
  27.     [tm_to_4] => 08:00
  28. )
  29.  

Как теперь эти данные правильно в базу писать? Так как параметры [st_disp] => 2, [kps] => 5, [bazirovanie] => 10 только одни на определенную дату/дежурство. Внесены лишь раз и могут не меняться, если не нужно корректировать.
А вот [brygada] => 205, [bazirovanie] => 10, [wrk_1] => 22 ... Их будет несколько: [brygada] => 206, [brygada] => 216... Могут быть с разным составом, редактироваться или удаляться.
Должность я выведу исходя из ID должности, которая указана в профиле работника. Главное, что имеется ID работника.
Вот набросал условное представление [img]https://i.yapx.ru/QUWyM.png[/img], что мне нужно видеть на выходе для просмотра графика онлайн.
Как это правильно писать в базу и выводить с привязкой к определённой дате?
Подскажите, пожалуйста.
Ruskat Отправлено: 24 Января, 2022 - 02:58:08 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:
Дополнение

Благодарствую за дополнение.
Немного добавил ссылок для добавления/удаления строк. Не Ajax конечно, но хоть как-то Улыбка
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require("../config.php");
  3. if(isset($_GET['idSelect']))
  4. {
  5.                 $ps_id = $_GET["SelectedInd"];
  6.                 function full_name_to_short ($full_name, $format="A b. c.") { //ПіП скорочувач
  7.                         $words = explode(" ", $full_name);
  8.                         $format_keys = array("A", "B", "C");
  9.                         $short_name = $format;
  10.                         foreach ($format_keys as $index => $word) {
  11.                                 $short_name = str_replace($word, $words[$index], $short_name);
  12.                                 $short_name = str_replace(mb_strtolower($word), mb_substr($words[$index], 0, 1, 'UTF-8'), $short_name);
  13.                                 }
  14.                                         return $short_name;
  15.                 }       // https://gist.github.com/fdcore/05029aeba743650a15af 
  16.         header('Content-Type: application/json;charset=utf-8');
  17.         $query='SELECT id, pr, im, pb FROM `workers` WHERE `ps`= '.$ps_id;
  18.         $result = mysqli_query($db, $query);    //$db = mysqli_connect('127.0.0.1:3306','root','','test1');
  19.         while ($rows=mysqli_fetch_assoc($result)) {
  20.             $pip = full_name_to_short($rows["pr"]." ".$rows["im"]." ".$rows["pb"]); //Скорочуємо ПіП
  21.                         $arr[$rows['id']]=$pip;
  22.         }
  23.     echo json_encode($arr, JSON_PRETTY_PRINT);
  24.     //Возвращаем данные в JS в JSON-формате (XMLHttpResponse)
  25.         exit;
  26. }
  27. if(isset($_GET['save']))
  28. {
  29.         echo "<pre>";
  30.         print_r($_POST);
  31.         //здесь должны сохраняться данные.
  32.         echo "</pre>Данные успешно сохранены!";
  33.         exit;
  34. }
  35. ######################################################
  36. //$Position, $Brigade, $Place должны выбираться из БД
  37. $res_posady = mysqli_query($db,"SELECT * FROM posady ORDER BY `id` ASC");
  38. while ($posady = mysqli_fetch_assoc($res_posady)){
  39.         $arrp[] = $posady;
  40. }
  41. #$Position = [0=>"Должность", 1 => "Haчальник", 2 => "Водитель", 3 => "Рабочий"];
  42. $Brigade = 204;
  43. $Place = "Станция";
  44. ########################################################################
  45.         if(isset($_GET['p'])){$num_rows=$_GET['p']+1;}else{$num_rows = 1;}      #
  46.         if(isset($_GET['m'])){$num_rows=$_GET['m']-1;}                                          #
  47.         if($num_rows < 6){echo '<a href="?p='.$num_rows.'">Плюс</a>';}          #
  48.         if($num_rows > 1){echo '<a href="?m='.$num_rows.'">Мінус</a>';}         #
  49. ########################################################################
  50. $NumberOfWorkerInBrigade = $num_rows; //мах. кол-во в бригаде должно вводится или из config
  51. $PositionOpt = "";
  52. foreach($arrp as $id)
  53.         $PositionOpt.="<option value=".$id['id'].">".$id['posada']."</option>";
  54. $tr = "";
  55. $n = 0;
  56. while( ++$n <= $NumberOfWorkerInBrigade )
  57. $tr .= <<<HTML
  58. <tr>
  59. <td>$n</td>
  60. <td>$Brigade</td>
  61. <td>$Place</td>
  62. <td>
  63. <select id="Position$n" name="Position$n"><option value="">Посада</option>$PositionOpt</select>
  64. </td>
  65. <td>
  66. <select id="NamePosition$n" name="NamePosition$n"></select>
  67. </td>
  68. <td></td>
  69. </tr>
  70. HTML;
  71.  
  72. echo <<<HTML
  73. <html>
  74. <head>
  75. <title>CreateOption</title>
  76. <style>
  77. body,select{
  78.         font-family:arial;
  79.         color: #0000FF;
  80. }
  81. select[id^="Name"] {visibility: hidden}
  82. table, td{
  83.         border: 2px solid #BBC1C5;
  84.         border-collapse:collapse;
  85.         background-color:#CAD9EC
  86. }
  87. tr td{}
  88. td{
  89.         padding: 5 4 5 4;
  90.         text-align:center;}
  91. td + td,select{min-width:200px}
  92. div{margin-top: 20}
  93. </style>
  94. </head>
  95. <body>
  96. <form  action="" method="post">
  97. <table>
  98. <tr>
  99. <td>№</td>
  100. <td>Бригада</td>
  101. <td>Базирование</td>
  102. <td>Должность</td>
  103. <td>ФИО</td>
  104. <td>Рабочее время</td>
  105. </tr>
  106. $tr
  107. </table>
  108. <input type="hidden" name="Brigade" id ="Brigade" value="$Brigade">
  109. <input type="hidden" name="Place" id = "Place" value="$Place">
  110. <br>
  111. <input type="button" value="Сохранить"> <div id="report"></div>
  112. </form>
  113. </body>
  114. <script>
  115. NumberOfWorkerInBrigade = '$NumberOfWorkerInBrigade';
  116. sel = document.querySelectorAll("select[id^='Position']");
  117. report = document.getElementById("report");
  118. selChange = function(e){
  119.         id = e.target.id;
  120.         i=e.target.selectedIndex;
  121.         getOptions(id, i);
  122. }
  123. for ( iS = 0; iS<sel.length ; iS++)
  124. {
  125.         sel[iS].addEventListener("change", selChange);
  126. }
  127. //------------------------------
  128. setOpt = function(IdSelect, optObj){
  129.         select2 = document.getElementById(IdSelect);
  130.         select2.innerHTML = "";
  131.         opt = document.createElement('option');
  132.         opt.innerHTML = "Фамилия";
  133.         select2.appendChild(opt);
  134.         for(ID in optObj)
  135.         {
  136.                 opt = document.createElement('option');
  137.                 opt.innerHTML = optObj[ID];
  138.                 opt.value = ID;
  139.                 select2.appendChild(opt);
  140.         }
  141.         select2.style.visibility="visible";
  142. };
  143. //-----------------------------
  144. getOptions = function(idSelect, SelectedInd){
  145.         req = new XMLHttpRequest();
  146.         req.responseType = "json";
  147.         url = "?idSelect="+idSelect+"&SelectedInd="+SelectedInd;
  148.         req.open("get", url, true);
  149.         req.responseType = "json";
  150.         req.onreadystatechange = function()
  151.         {
  152.            if (this.readyState == 4 && this.status == 200)
  153.            {
  154.                         try
  155.                         {
  156.                                 rsp = this.response; //получаем JSON Object
  157.                                 setOpt("Name"+idSelect, rsp);
  158.                         }
  159.                         catch (e)
  160.                         {
  161.                                 err={state:this.readyState,err:e.message,url:url};
  162.                                 console.log(err);
  163.                         }
  164.                 };
  165.         };
  166.         req.send();
  167. };
  168.  
  169. sendForm = function(){
  170.         //begin form validation
  171.         arrId = ["Position", "NamePosition"];
  172.         arrMsg = ["должность ", "Ф.И.О "];
  173.         arrMsg2=["Ошибка! Вы не выбрали ", "-ого paботника" ];
  174.         msg = "";
  175.         for( n=1; n <= NumberOfWorkerInBrigade; n++)
  176.         {
  177.                 for(i in arrId)
  178.                 {
  179.                         id = arrId[i] + n;
  180.                         value = document.getElementById(id).value;
  181.                         if(value==0)
  182.                         {
  183.                                 msg += arrMsg2[0] + arrMsg[i] + n + arrMsg2[1]+"<br>";
  184.                         }
  185.                 }
  186.         }
  187.  
  188.         if(msg)
  189.         {
  190.                         report.innerHTML = msg;
  191.                         return;
  192.         }
  193.         // end form validation
  194.         // ----------------------------------------
  195.         // XMLHttpRequest
  196.         data = new FormData(document.forms[0]);
  197.         req = new XMLHttpRequest();
  198.         req.responseType = "text";
  199.         url = "?save=1";
  200.         req.open("post", url, true);
  201.         req.responseType = "text";
  202.         req.onreadystatechange = function()
  203.         {
  204.            if (this.readyState == 4 && this.status == 200)
  205.            {
  206.                         try
  207.                         {
  208.                                 rsp = this.response;
  209.                                 report.innerHTML = rsp;
  210.                         }
  211.                         catch (e)
  212.                         {
  213.                                 err={state:this.readyState,err:e.message,url:url};
  214.                                 console.log(err);
  215.                         }
  216.                 };
  217.         };
  218.         req.send(data);
  219. };
  220. document.querySelectorAll("input[type='button']")[0].addEventListener("click", sendForm);
  221. </script>
  222. </html>
  223. HTML;
  224. ?>

А вот функция запроса работников через XMLHttpRequest исходя из ID должности может подвести, так как, как я понимаю, счёт идёт по номеру элемента option, а не ссылается на ID самой должности, к которой привязан работник. Сбой произойдёт, когда ID в списке должностей будут не по порядку или в разброс.
Ruskat Отправлено: 23 Января, 2022 - 11:08:58 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:
Ruskat пишет:

А как лучше сформированных в такой форме работников отпралять в базу, чтобы потом они отобразились на странице просмотра графика?
В одну ячейку в виде Json, как я полагаю?

Верно, данные писать в виде Json и тип данных sql поля, для сохранения данных "json".
Остальное улеглось?

Стараюсь улаживать. Просто пока больше над бэком работаю. Потихоньку, для снятия напряжения, фронт начал мастырить под соответствие адресной навигации.
Касательно вашей формы есть непонимание:
в цикле
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.         for(i in optObj)
  3.         {
  4.                 opt = document.createElement('option');
  5.                 opt.innerHTML = optObj[i];
  6.                 -->opt.value = optObj[i];
  7.                 select2.appendChild(opt);
  8.         }
  9.  

Догадался добавить optionу параметр value, чтобы что-то отправить, а не просто увидеть. Всё, что я могу отправить, это данные из optObj[i] - то есть Ф.И.О. А задумал отправлять именно ID работника, который хоть и приходит в список json, но я его так и не нашел ни в какой переменной.
Ruskat Отправлено: 21 Января, 2022 - 02:13:01 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:

p.s. В Вашем коде каждый тэг селект "обёрнут" в три тэга див. Не надо так делать.

Спасибо. А как лучше сформированных в такой форме работников отпралять в базу, чтобы потом они отобразились на странице просмотра графика?
В одну ячейку в виде Json, как я полагаю?
Ruskat Отправлено: 20 Января, 2022 - 00:03:27 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Спасибо большое. Освоил.
А в чём может быть дело, что применил такой метод дублирования строк, но фамилии раскрываются только в первой строке? В остальных только должности.
Ruskat Отправлено: 18 Января, 2022 - 23:40:38 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
По Вашему примеру вывод такой:
CODE (javascript):
скопировать код в буфер обмена
  1. {
  2.     "1": "\u0418\u0432\u0430\u043d\u043e\u0432",
  3.     "2": "\u041f\u0435\u0442\u0440\u043e\u0432",
  4.     "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  5. }

При выводе с базы у меня работники вот так:
CODE (javascript):
скопировать код в буфер обмена
  1. [
  2.     {
  3.         "1": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  4.     },
  5.     {
  6.         "2": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  7.     },
  8.     {
  9.         "3": "\u0421\u0438\u0434\u043e\u0440\u043e\u0432"
  10.     }
  11. ]

Возможно, можно как-то jsоm скопитовать и вставить существующий html-блок, вместе с рабочими списками.
Ruskat Отправлено: 18 Января, 2022 - 21:09:46 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:
Удачи!

Благодарю, но снова не мгу до конца всё решить.
Должности в список получил, а вот Фио, соответствующие должности не могу никак...
Пытаюсь так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['idSelect']))
  2. {
  3.         header('Content-Type: application/json;charset=utf-8');
  4.                 $array = array();
  5.                 $ps_id = $_GET["SelectedInd"];
  6.                 $workers = mysqli_query($db,'SELECT id, pr FROM `workers` WHERE `ps`= '.$ps_id); //     База з посадами /       База с должностями
  7.                 while($rws = mysqli_fetch_assoc($workers)){
  8.                         //$array[] = $rws;
  9.                         $arr = array($rws["id"] => $rws["pr"]);
  10.                 }
  11.     echo json_encode($arr, JSON_PRETTY_PRINT);
  12.     //Возвращаем данные в JS в JSON-формате (XMLHttpResponse)
  13.         exit;
  14. }

где id - ID, pr - ФАМИЛИЯ, ps - ИДЕНТИФИКАТОР ДОЛЖНОСТИ, по которому я и сортирую работяг.
Дальше, эти зависимые списки надо будет вставить в Js
CODE (javascript):
скопировать код в буфер обмена
  1. <script type = "text/javascript">
  2.         var scntDiv = $('#p_scents');
  3.         var i = $('#p_scents tr').size() + 1;
  4.  
  5.         $('#addScnt').click(function() {
  6.                 scntDiv.append('<tr>'+
  7.                                                                         '<td></td>'+
  8.                                                                         '<td></td>'+
  9.                                                                         '<td>Станция</td>'+
  10.                                                                         '<td><select id="get_country" name="get_country">'+
  11.                                                                         '<option value="">Должность</option>'+
  12.                                                                                 <? вставить здесь зависимые выпадающие списки ?>
  13.                                                                         '</select></td>'+
  14.                                                                         '<td><div id="sub_region">'+
  15.                                                                                 '<select id="get_region" name="get_region"></select>'+
  16.                                                                         '</div></td>'+
  17.                                                                         '<td><label for="date">С:</label><input type="date" name="w71_dt_from" id="date"><input name="w71_tm_from" type="time"><br><label for="date">По:</label><input type="date" name="w71_dt_to" id="date"><input name="w71_tm_to" type="time"></td>'+
  18.                                                                         '<td><a href="#" id="remScnt"><img src="/img/minus.png"></a></td>'+
  19.                                                                 '</tr>');  
  20.                 i++;
  21.                 return false;
  22.         });
  23.  
  24.         //Remove button
  25.         $(document).on('click', '#remScnt', function() {
  26.                 if (i > 2) {
  27.                         $(this).closest('tr').remove();
  28.                         i--;
  29.                 }
  30.                 return false;
  31.         });
  32. </script>

Этот код замещающий - выводится для новых строк с работниками при нажатии "+".
Сам разобраться не могу, к сожалению.
Ruskat Отправлено: 17 Января, 2022 - 20:44:01 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
[quote=Vladimir Kheifets]
Ruskat пишет:
Создал визуально блок.
Должна, быть страница "Персонал", для ввода, редактирования этих данных и
страница "Смены", для которой должна выбираться эти данные.
В формуляре на странице "Смены" должны быть поля для ввода даты и времени смены.
Если смена была введена, то ранне введённые данные должны выбираться для редактирования.
Должны быть списки для выбора начальника, водителя и рабочих.
Имена содруников фирмы должны вибираться из БД с учетом отпусков или больничных.
Выбранные имена должны записываться список бригады или по необходимости удаляться из него.

Здесь не могу загрузить или не вижу такой кнопки.
[img]https://i.yapx.ru/QKk4Y.png[/img]
Уже сделана страница персонала. Персонал добавил, должности позадавал и попривязывал. Смены не принципиальны для привязки, так как бывают подработки.
Список "привязочный": http://bhtml[dot]ru/webdevelopment/c[dot][dot][dot]elects/index.php - подогнал под себя: Должность -> Работники.
Отпуска и больничные - это уже шикардос. У "вводящего" есть график на месяц. Он видит, кто работает определенного числа и формирует из них бригады.
В данный упёрся в то, что не могу в JS-коде средствами РНР вывести дальше список Должность -> Работники, так как РНР в JS не выполняется.
Спойлер (Отобразить)

Плюсовать - минусовать строки брал отсюда.
Ruskat Отправлено: 17 Января, 2022 - 15:22:07 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Создал визуально блок.
Имеет такой вид
[img]https://picua[dot]org/images/2022/01/17/76643df7d947f80db73d60c055eef679[dot]md[dot]png[/img]
Нужно добавлять или удалять строки в блоках и сами блоки.
Каждая бригада должна буть как отдельная статья на сайте, но снисок бригад должен быть изъят из базы только в соответствии с заданной датой.
Ruskat Отправлено: 17 Января, 2022 - 00:24:35 • Тема: Нужна помощь в создании скрипта для создания графиков дежурств • Форум: Напишите за меня, пожалуйста

Ответов: 33
Просмотров: 3196
Vladimir Kheifets пишет:
Добрый день!
Как должна выглядеть форма, которую Вы не можете реализовать?
Могли бы Вы хоть от руки нарисовать макет и объяснить, что должно появляться или исчезать
и при каких условиях?
Организация данных должна зависеть от того, как они будут использоваться т.е.
какие будут поисковые запросы и какие документы должны выдаваться.

Благодарю за ответ.
Вот здесь конкретно пример, как должен дублироваться блок с формами - " добавить еще запись".
Так же такого плана мне нужно дублировать поле ввода в блоке, так как работников одной должности может быть несколько.
Каждый новый/сдублированный блок с формами - это отдельная бригада, имеющая свой уникальный номер - от 201 до 220.

Страниц (5): [1] 2 3 4 5 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB