входные данные GET, POST. Как лучше получать.

Voyager2K

Новичок
входные данные GET, POST. Как лучше получать.

исхожу из register_globals off.

Меня чевото в последнее время стало напрягать каждый раз для каждоый переменной писать нечто в стиле.
PHP:
$myVar = $_GET['myVar'];
if (!$myVar and $_POST['myVar']) $myVar = $_POST['myVar'];
if (!preg_match('~^[0-5]+$~',!$myVar)) $myVar = null;
хотелось бы нечто более емкое и столь же функциональное.
Сейчас сел, набросок сделал(синтаксических ошибок нет, касательно полной работоспособности не уверен, но смысл понять можно).
- Приоритет взятия из GET, POST и COOKIE последовательностью.
- Проверка регуляркой при необходимости.
PHP:
function getVar($varName, $method = 'GPC', $expr = null)
	{
	$varValue = null;
	for ($i=0; $i<strlen($method); $i++)
		{
		if ($varValue !== null) break;
		switch($method[$i])
			{
			case 'G':
				if (isset($_GET[$varName]))
					$varValue = $_GET[$varName];
				break;
				
			case 'P':
				if (isset($_POST[$varName]))
					$varValue = $_POST[$varName];
				break;
				
			case 'C':
				if (isset($_COOKIE[$varName]))
					$varValue = $_COOKIE[$varName];
				break;
			}
		}
		
	if ($expr and !preg_match($expr, $varValue))
		$varValue = null;
		
	return $varValue;
	}
Подгрузка перменной тогда будет выглядеть вот так
PHP:
$myVar = getVar('myVar', 'GP', '~^[0-5]+$~');
Более компатно.
Хотел узнать ваше мнение насколько более оправдан такой подход ? И как вы переменный "хватаете" ?
 

Voyager2K

Новичок
Gorynych, если не столь важно каким образом пришли данные, то имеет отношение.
Но ведь в любом случае вопрос проверки переменной останется.
 

denver

?>Скриптер
$myVar = getVar('myVar', 'GP', '~^[0-5]+$~');
1. Неочевидно что P имеет больший приоритет.
2. Нехорошо что в случае !preg_match возвращается null (пример, форма для ввода e-mail, вводишь е-мэйл случайно без @, нажимаешь сабмит, получаешь варнинг "e-mail canot be empty" и пустое поле, шозанах я ж точно его вводил).
3. А вообще имхо всё ок :)
 

Voyager2K

Новичок
denver.
1. не понял почему приоритет P будет больше? Если писать "PG", то приоритет P будет больше, а в случае с "GP" GET приоритет выше. Там же цикл посимвольно по сроке $method идет. И если для G (GET) уже найдено значение, то цикл отсановится.

2. я эту регулярку думал использовать для немного другого рода проверок. На примере с е-майлом просто смотреть наличие допустимых символов [a-z0-9_@\.] и т.д. Т.е. больше для защиты от попадания недопустимых символов.
А проверять валидность e-mail'а (намного удобнее для пользователя) проводить лучше JS'ом, без всяких перезагрузок страницы.

Хотя можно в принципе изменить проверку на валидность вот так:
PHP:
	if ($expr and $varValue)
		{
		preg_match_all($expr, $varValue, $pmvs);
		$varValue = '';
		foreach($pmvs[0] as $key => $value)
			{
			$varValue .= $value;
			}
		}
таким образом будут возвращаться только те символы, которые удобвлетворяют условию. И $expr тогда уж окончательно превратиться в список допустимых сиволов.
(preg_replace не написал, ибо формат $expr тогда некрасиво будет выглядеть).



------------------------

Сейчас глянул еще, свпомнил про значение по умолчанию, ибо частеько пригодится.
PHP:
function getVar($varName, $default = null, .....
<..>
return ($varValue === null) ? $default : $varValue;
}
 

denver

?>Скриптер
1. не понял почему приоритет P будет больше?
Точно, я не прав.

А проверять валидность e-mail'а (намного удобнее для пользователя) проводить лучше JS'ом,
Я JS отключу и засуну тебе невалидный эмэйл.

таким образом будут возвращаться только те символы, которые удобвлетворяют условию
Ню-ню. Очень юзабильно когда ты вводишь никнейм буквами англ и рус, а форум регистрирует тебя но без русских букв, и без вопросов.
 

Voyager2K

Новичок
Очень юзабильно когда ты вводишь никнейм буквами англ и рус, а форум регистрирует тебя но без русских букв, и без вопросов.
дам... проблема, не обратил внимание. Есть какие идеи удобно обрабатывать валидность данных ? А то сейчас мне уж точно ничего в голову не прейдет. Или оставить этот $expr в первозданном виде и использовать чисто для сверки таких данных, как $id т.е. служебных скриптовых, а юзеровские уж вручную обрабатывать ?
 
Сверху