Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: инициализация входящих данных

 PHP.SU

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


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

> Описание: а как у вас?
DlTA
Отправлено: 15 Июля, 2014 - 15:05:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




в очередной раз делая обработку формы ловлю себя на мысли что писать
PHP:
скопировать код в буфер обмена
  1. $a = !empty($_REQUEST['a'])?$_REQUEST['a']:'';

очень скучно, возникает вопрос как бы сократить эту запись?!

варианты $a=@$_REQUEST['a']; не рассматриваем, генерация нотисов хоть и с принудительным их скрытием не интересна.

в начале думал сделать чет типа
$a = getData($__REQUEST['a']);
но понял что фигня, ошибка в азах

потом пришел вариант типа
PHP:
скопировать код в буфер обмена
  1. /**
  2. * @property mixed[] $arr входной массив с данными
  3. * @property string $name имя проверяемой переменно
  4. */
  5. $a = getData($__REQUEST, 'a'); // {return !empty($arr[$name])?$arr[$name]:''; }

это уже хоть работоспособно

и уже его можно обернуть в типа
getPOSTData($name);
getGETData($name);
...

а как у вас обстоят с этим дела?
 
 Top
Panoptik
Отправлено: 15 Июля, 2014 - 15:17:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




глобальный объект $request содержащий методы получения данных

$request->getQuery // GET
$request->getPost // POST
$request->getParam // POST OR GET

еще вариант попроще
http://php.net/manual/en/class.arrayobject.php

я бы наверное за неимением другого его и использовал


-----
Just do it
 
 Top
DlTA
Отправлено: 15 Июля, 2014 - 15:26:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Panoptik пишет:
глобальный объект $request содержащий методы получения данных

$request->getQuery // GET
$request->getPost // POST
$request->getParam // POST OR GET

я надеюсь что объект $request получается из какого то конструктора, а то чет не нахожу такого в стандартном описании

Panoptik пишет:
http://php.net/manual/en/class.arrayobject.php
я бы наверное за неимением другого его и использовал

php.net пишет:
Класс ArrayObject, Данный класс позволяет работать с объектами как с массивами.

чет слабо понимаю, зачем? ведь все равно нужно проверять наличие переменной/ключа?!

(Отредактировано автором: 15 Июля, 2014 - 15:27:27)

 
 Top
Sail
Отправлено: 15 Июля, 2014 - 15:30:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




filter_input(), однако!
И из тамошнего примера:
PHP:
скопировать код в буфер обмена
  1. $search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
  2. $search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
 
 Top
DlTA
Отправлено: 15 Июля, 2014 - 15:41:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Sail пишет:
filter_input(), однако!
по сути близко, но вот интерфейс отвратительно продуман, и о возвращаемых значениях хорошего не скажешь.
все равно нужна обертка
 
 Top
DelphinPRO
Отправлено: 15 Июля, 2014 - 16:05:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




DlTA пишет:
и уже его можно обернуть в типа
getPOSTData($name);
getGETData($name);
...

а как у вас обстоят с этим дела?

у меня так же и обстоят. только в объектном виде, типа как у Panoptikа


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Июля, 2014 - 17:07:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




DlTA пишет:
очень скучно, возникает вопрос как бы сократить эту запись?!

А Вы в Zend FW загляните.

PHP:
скопировать код в буфер обмена
  1. class Request {
  2.  
  3.     // ....
  4.  
  5.     public function getPost($key, $default = null)
  6.     {
  7.         if(array_key_exists($key, $this->_post)) {
  8.             return $this->_post[$key];
  9.         }
  10.  
  11.         return $default;
  12.     }
  13.  
  14.     // ....
  15.  
  16. }

(Отредактировано автором: 15 Июля, 2014 - 17:10:34)

 
 Top
OrmaJever Модератор
Отправлено: 15 Июля, 2014 - 18:08:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




PHP:
скопировать код в буфер обмена
  1. class request implements ArrayAccess
  2. {
  3.     private $data;
  4.  
  5.     public function __construct( &$var ) {
  6.         $this->data = $var;
  7.     }
  8.  
  9.     public function offsetExists ( $key )
  10.     {
  11.         return isset( $this->data[ $key ] );
  12.     }
  13.  
  14.     public function offsetUnset ( $key )
  15.     {
  16.         unset( $this->data[ $key ] );
  17.     }
  18.  
  19.     public function offsetGet ( $key)
  20.     {
  21.         return isset( $this->data[ $key ] ) ? $this->data[ $key ] : null;
  22.     }
  23.  
  24.     public function offsetSet ( $key, $value )
  25.     {
  26.         if ( is_null( $key ) ) {
  27.             $this->data[] = $value;
  28.         } else {
  29.             $this->data[ $key ] = $value;
  30.         }
  31.     }
  32.  
  33.     public function safe($key)
  34.     {
  35.         return addslashes( $this->offsetGet( $key ) );
  36.     }
  37. }
  38.  
  39. $_GET     = new Request( $_GET );
  40. $_POST    = new Request( $_POST );
  41. $_COOKIE  = new Request( $_COOKIE );
  42. $_REQUEST = new Request( $_REQUEST );
  43. $_SESSION = new Request( $_SESSION );
  44.  
  45. echo $_GET['несуществующий элемент'];
  46. echo $_GET['lang'] ?: 'default_value';
  47.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 15 Июля, 2014 - 18:30:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




прикольно, а метод "safe" не описан в интерфейсе, он откуда?
 
 Top
OrmaJever Модератор
Отправлено: 15 Июля, 2014 - 18:44:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




да то я для себя делал, что бы в запросы фильтровать данные, хотя вроде им даже не и пользовался Закатив глазки

PHP:
скопировать код в буфер обмена
  1. $mysqli->query('SELECT * FROM table WHERE name ="'. $_GET->safe('name').'"');
  2. // иначе нужно было бы фильтровать
  3. $mysqli->query('SELECT * FROM table WHERE name ="'. $mysqli->escape_string($_GET['name']).'"');
  4.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июля, 2014 - 18:52:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DlTA пишет:
он откуда?

Свой собственный метод.
Класс обязан реализовать все методы интерфейса, но очень странно считать, что это должны быть единственные методы класса.

Несколько странная идея реализовать полноценные offsetUnset и offsetSet, я бы там исключения воткнул. Нечего менять входные данные.
А вот для сессии откровенно неудобно, см. $_SESSION['foo']['bar'] = 1;


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 15 Июля, 2014 - 18:59:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Мелкий пишет:
Несколько странная идея реализовать полноценные offsetUnset и offsetSet, я бы там исключения воткнул. Нечего менять входные данные.

никто не мешает доработать со своей фантазией Подмигивание
Мелкий пишет:
А вот для сессии откровенно неудобно, см. $_SESSION['foo']['bar'] = 1;

ну во всяком случае это лучше чем ничего Улыбка Так хотя бы первый уровень можно без нотисов юзать. Опять же если не нравиться можете убрать Улыбка
(Добавление)
и вообще если у кого-то будут доработки этого класса то выкладывайте их сюда, может и себе применю Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
teddy
Отправлено: 15 Июля, 2014 - 19:25:06
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




OrmaJever пишет:
и вообще если у кого-то будут доработки этого класса то выкладывайте их сюда, может и себе применю

Ну хорошо... я тут обратил внимание, что в Вашем примере нельзя прогнать через цикл данные. Т.е например если сделать $_GET = new Request( $_GET ); - то крышка $_GET-у Улыбка

Ну... я это исправил добавив в Ваш код реализацию интерфейса Iterator. Код в спойлере

Спойлер (Отобразить)

Пример для итерации объекта лежит в конце класса
 
 Top
OrmaJever Модератор
Отправлено: 15 Июля, 2014 - 19:56:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




teddy пишет:
Ну... я это исправил добавив в Ваш код реализацию интерфейса Iterator

Да, спасибо, правильное замечание, в цикле ещё не использовал поэтому забыл. Но вот только не надо порно, цикл должен быть таким Подмигивание
PHP:
скопировать код в буфер обмена
  1. foreach( $_GET as $k => $v) {
  2.     echo $k, ' => ', $v, '<br>';
  3. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
teddy
Отправлено: 15 Июля, 2014 - 20:01:08
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




А чего порно то)

У меня лично такой принцип - если я использую какую то возможность, то обычно стараюсть не выходить в коде за пределы этого интерфейса когда нахожусь в его контексте... но тут наверное на любителя, пойдет и форыч)

(Отредактировано автором: 15 Июля, 2014 - 20:03:39)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB