Parcourir la source

bugfix: fixed the inability to clear filter fields without logging out.

Roman Dmitriev il y a 2 mois
Parent
commit
e8c68e0a91
2 fichiers modifiés avec 81 ajouts et 20 suppressions
  1. 81 18
      html/inc/common.php
  2. 0 2
      html/inc/logfilter.php

+ 81 - 18
html/inc/common.php

@@ -96,31 +96,34 @@ function capture_print_r($var) {
 }
 
 /**
- * Получает параметр (скаляр или массив) из POST/GET, с опциональной валидацией каждого элемента
+ * Получает параметр только из GET (скаляр или массив)
  */
-function getParam($name, $page_url = null, $default = null, $filter = FILTER_DEFAULT, $options = []) {
-    if (isset($_POST[$name]) && is_array($_POST[$name])) {
-        return $_POST[$name];
-    }
+function getGET($name, $page_url = null, $default = null, $filter = FILTER_DEFAULT, $options = []) {
+    // Обработка массивов
     if (isset($_GET[$name]) && is_array($_GET[$name])) {
         return $_GET[$name];
     }
-    // Если не массив — пробуем как скаляр
-    if ((isset($_POST[$name]) && $_POST[$name]==='') || (isset($_GET[$name]) && $_GET[$name]==='')) {
-        if ($page_url !== null  && isset($_SESSION[$page_url][$name])) {
+
+    // Проверяем, был ли параметр вообще передан
+    if (!isset($_GET[$name])) {
+        // Не передан — пробуем сессию
+        if ($page_url !== null && isset($_SESSION[$page_url][$name])) {
             return $_SESSION[$page_url][$name];
         }
         return $default;
     }
 
-    $value = filter_input(INPUT_POST, $name, $filter, $options) ??
-             filter_input(INPUT_GET, $name, $filter, $options);
+    // Передан как пустая строка — сразу default
+    if ($_GET[$name] === '') {
+        return $default;
+    }
+
+    // Обычная фильтрация
+    $value = filter_input(INPUT_GET, $name, $filter, $options);
     if ($value === false || $value === null) {
-        if ($page_url !== null && isset($_SESSION[$page_url][$name])) {
-            return $_SESSION[$page_url][$name];
-        }
         return $default;
     }
+
     return $value;
 }
 
@@ -128,25 +131,85 @@ function getParam($name, $page_url = null, $default = null, $filter = FILTER_DEF
  * Получает параметр только из POST (скаляр или массив)
  */
 function getPOST($name, $page_url = null, $default = null, $filter = FILTER_DEFAULT, $options = []) {
+    // Обработка массивов
     if (isset($_POST[$name]) && is_array($_POST[$name])) {
         return $_POST[$name];
     }
-    if (isset($_POST[$name]) && $_POST[$name]==='') {
-        if ($page_url !== null  && isset($_SESSION[$page_url][$name])) {
+
+    // Проверяем, был ли параметр вообще передан
+    if (!isset($_POST[$name])) {
+        // Не передан — пробуем сессию
+        if ($page_url !== null && isset($_SESSION[$page_url][$name])) {
             return $_SESSION[$page_url][$name];
         }
         return $default;
     }
+
+    // Передан как пустая строка — сразу default
+    if ($_POST[$name] === '') {
+        return $default;
+    }
+
+    // Обычная фильтрация
     $value = filter_input(INPUT_POST, $name, $filter, $options);
     if ($value === false || $value === null) {
-        if ($page_url !== null  && isset($_SESSION[$page_url][$name])) {
-            return $_SESSION[$page_url][$name];
-        }
         return $default;
     }
+
     return $value;
 }
 
+/**
+ * Получает параметр из POST или GET (скаляр или массив)
+ * Приоритет: POST > GET
+ */
+function getParam($name, $page_url = null, $default = null, $filter = FILTER_DEFAULT, $options = []) {
+    // Сначала проверяем POST (массивы)
+    if (isset($_POST[$name]) && is_array($_POST[$name])) {
+        return $_POST[$name];
+    }
+    
+    // Потом GET (массивы)
+    if (isset($_GET[$name]) && is_array($_GET[$name])) {
+        return $_GET[$name];
+    }
+
+    // Проверяем скалярные значения
+    $post_exists = isset($_POST[$name]);
+    $get_exists  = isset($_GET[$name]);
+
+    // Если параметр есть в POST
+    if ($post_exists) {
+        if ($_POST[$name] === '') {
+            return $default;
+        }
+        $value = filter_input(INPUT_POST, $name, $filter, $options);
+        if ($value !== false && $value !== null) {
+            return $value;
+        }
+        return $default;
+    }
+    
+    // Если параметр есть в GET
+    if ($get_exists) {
+        if ($_GET[$name] === '') {
+            return $default;
+        }
+        $value = filter_input(INPUT_GET, $name, $filter, $options);
+        if ($value !== false && $value !== null) {
+            return $value;
+        }
+        return $default;
+    }
+
+    // Параметр не передан ни в POST, ни в GET — пробуем сессию
+    if ($page_url !== null && isset($_SESSION[$page_url][$name])) {
+        return $_SESSION[$page_url][$name];
+    }
+    
+    return $default;
+}
+
 function intval_or_zero($v): int {
     return is_numeric($v) ? intval($v) : 0;
 }

+ 0 - 2
html/inc/logfilter.php

@@ -1,9 +1,7 @@
 <?php
 if (!defined("CONFIG")) die("Not defined");
-
 $fcustomer = getParam('customer', $page_url, '');
 $fmessage  = getParam('message',  $page_url, '');
-
 $_SESSION[$page_url]['customer'] = $fcustomer;
 $_SESSION[$page_url]['message']  = $fmessage;
 ?>