@Alk90
php, mysql, jquery, css, html, api

Как обрабатывать массивы GET, POST при получении?

Всем привет! Подскажите, на предмет чего нужно обрабатывать массивы GET, POST, REQUEST?
Например можно ведь пробежаться по всему этому массиву и обработать параметры с помощью функции trim(), так как пробелы нигде и никогда не нужны не вначале не в конце. Например, можно удалить получившиеся пустые значения, чтобы далее по коду проверять их существование, ведь если они существуют, значит они не пустые.
Вот собственно вопрос, какие еще есть ситуации, которые можно одним махом удалить пробежавшись 1 раз по входящим данным?
function filterGet($data){
   foreach($data as $key => $val){
      if(is_array($val)){
         $data[$key] = filterGet($val);
      }else{
         $data[$key] = trim($val);
         if(empty($data[$key])) unset($data[$key]);
      }
   }

   return $data;
}
  • Вопрос задан
  • 288 просмотров
Решения вопроса 3
eXcNightRider
@eXcNightRider
FullStack Web Developer | DevOps
Для каждого случая все индивидуально. Например вы POST-ом отправляете данные пользователя, которые надо записать в базу. Точно известно какие параметры придут на backend, нужно забрать только их и отфильтровать по регулярному выражению, прогнать trim либо использовать валидацию. Если отправить кучу других значений, они должны просто игнорироваться.
Пробелы в GET можно передать только закодировав в base64, в обычном случае их нет.

Общий принцип один - забираем то, что требуется. Остальное либо игнорируем либо возвращаем ошибку. Обрабатывать весь массив - не лучшая практика.
Ответ написан
Комментировать
@kirill-93
Данные надо фильтровать только перед использованием. Не нужно наперед ничего делать.
Ответ написан
Комментировать
t-alexashka
@t-alexashka
Сразу пишу legacy код
Да в принципе и все, самое основное это trim. Все дальнейшее зависит от конкретной ситуации. Я бы даже не стал удалять ключи которые объявлены но не имеют значения, т.к. вы можете передать параметр в GET который не требует значения, но требует присутствия:
example.com/page?print
чтобы не писать page?print=1

А все современные методы пред-обработки данных для работы с базой уже включают встроенное экранирование (pdo, mysqli) для них тоже не нужно дополнительно экранировать пользовательские данные.

В итоге вся пред-обработка сводится к обычному
$_POST = array_map('trim', $_POST);
и то, под вопросом надо ли это вообще :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы