index.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
  3. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
  4. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
  5. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
  6. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/loglevelfilter.php");
  7. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/logfilter.php");
  8. if (isset($_POST['user_ip'])) { $fuser_ip = $_POST['user_ip']; }
  9. if (isset($_GET['user_ip'])) { $fuser_ip = $_GET['user_ip']; }
  10. if (!isset($fuser_ip) and isset($_SESSION[$page_url]['user_ip'])) { $fuser_ip=$_SESSION[$page_url]['user_ip']; }
  11. if (!isset($fuser_ip)) { $fuser_ip=''; }
  12. $_SESSION[$page_url]['user_ip']=$fuser_ip;
  13. print_log_submenu($page_url);
  14. ?>
  15. <div id="cont">
  16. <br>
  17. <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  18. <?php print_date_fields($date1,$date2,$date_shift); ?>
  19. <?php echo WEB_log_level_display; ?>:<?php print_loglevel_select('display_log_level',$display_log_level); ?>
  20. <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
  21. <input type="submit" value="<?php echo WEB_btn_show; ?>"><br><br>
  22. <?php echo WEB_log_filter_source; ?>:&nbsp<input name="customer" value="<?php echo $fcustomer; ?>" /> &nbsp
  23. <?php echo WEB_log_event; ?>:&nbsp<input name="message" value="<?php echo $fmessage; ?>" /> &nbsp
  24. <?php echo WEB_msg_IP; ?>:&nbsp<input name="user_ip" value="<?php echo $fuser_ip; ?>" /><br>
  25. </form>
  26. <?php
  27. // === 1. Формируем базовые параметры и условия ===
  28. $params = [$date1, $date2];
  29. $conditions = [];
  30. // Уровень логирования
  31. if ($display_log_level == L_ERROR) {
  32. $conditions[] = "level = ?";
  33. $params[] = L_ERROR;
  34. } elseif ($display_log_level == L_WARNING) {
  35. $conditions[] = "level <= ?";
  36. $params[] = L_WARNING;
  37. } elseif ($display_log_level == L_INFO) {
  38. $conditions[] = "level <= ?";
  39. $params[] = L_INFO;
  40. } elseif ($display_log_level == L_VERBOSE) {
  41. $conditions[] = "level <= ?";
  42. $params[] = L_VERBOSE;
  43. }
  44. // L_DEBUG: не добавляем условие (показываем всё)
  45. // Остальные фильтры — ВСЕ через параметры!
  46. if (!empty($fcustomer)) {
  47. $conditions[] = "customer LIKE ?";
  48. $params[] = '%' . $fcustomer . '%';
  49. }
  50. if (!empty($fmessage)) {
  51. $conditions[] = "message LIKE ?";
  52. $params[] = '%' . $fmessage . '%';
  53. }
  54. if (!empty($fuser_ip)) {
  55. $conditions[] = "ip LIKE ?";
  56. $params[] = '%' . $fuser_ip . '%';
  57. }
  58. // Собираем WHERE-часть
  59. $whereClause = !empty($conditions) ? ' AND ' . implode(' AND ', $conditions) : '';
  60. // === 2. Подсчёт общего количества записей ===
  61. $countSQL = "SELECT COUNT(*) FROM worklog WHERE ts >= ? AND ts < ?" . $whereClause;
  62. $count_records = (int)get_single_field($db_link, $countSQL, $params);
  63. // === 3. Пагинация ===
  64. $total = ceil($count_records / $displayed);
  65. $page = max(1, min($page, $total)); // корректное ограничение страницы
  66. $start = ($page - 1) * $displayed; // исправлено: OFFSET должен быть (page-1)*limit
  67. print_navigation($page_url, $page, $displayed, $count_records, $total);
  68. // === 4. Запрос данных с пагинацией ===
  69. // Добавляем LIMIT и OFFSET как параметры (приводим к int!)
  70. $limit = (int)$displayed;
  71. $offset = (int)$start;
  72. $dataParams = array_merge($params, [$limit, $offset]);
  73. $sSQL = "
  74. SELECT * FROM worklog
  75. WHERE ts >= ? AND ts < ?" . $whereClause . "
  76. ORDER BY ts DESC
  77. LIMIT ? OFFSET ?
  78. ";
  79. $userlog = get_records_sql($db_link, $sSQL, $dataParams);
  80. ?>
  81. <br>
  82. <table class="data">
  83. <tr align="center">
  84. <td class="data" width=150><b><?php echo WEB_log_time; ?></b></td>
  85. <td class="data"><b><?php echo WEB_log_filter_source; ?></b></td>
  86. <td class="data"><b><?php echo WEB_msg_IP; ?></b></td>
  87. <td class="data"><b><?php echo WEB_log_level; ?></b></td>
  88. <td class="data"><b><?php echo WEB_log_event; ?></b></td>
  89. </tr>
  90. <?php
  91. foreach ($userlog as $row) {
  92. print "<tr align=center class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  93. print "<td class=\"data\">" . $row['ts'] . "</td>\n";
  94. print "<td class=\"data\">" . $row['customer'] . "</td>\n";
  95. $msg_level = 'INFO';
  96. if ($row['level'] == L_ERROR) { $msg_level='ERROR'; }
  97. if ($row['level'] == L_WARNING) { $msg_level='WARNING'; }
  98. if ($row['level'] == L_DEBUG) { $msg_level='DEBUG'; }
  99. if ($row['level'] == L_VERBOSE) { $msg_level='VERBOSE'; }
  100. print "<td class=\"data\">" . $row['ip'] . "</td>\n";
  101. print "<td class=\"data\">" . $msg_level . "</td>\n";
  102. $print_msg = expand_log_str($db_link, $row['message']);
  103. print "<td class=\"data\" align=left>" . $print_msg . "</td>\n";
  104. print "</tr>\n";
  105. }
  106. print "</table>\n";
  107. print_navigation($page_url,$page,$displayed,$count_records,$total);
  108. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
  109. ?>