Обработка входных данных

  • Автор темы webdeveloper
  • Дата начала

webdeveloper

Guest
Обработка входных данных

На написание этого примера меня натолкнула проблема с которой я столкнулся два дня назад.
Следуя статье написаной tony2001 я решил наконец то сделать нормальную обработку ошибок в своем движке.

При этом я столкнулся с проблемой, суть которой состояла в том, что если вы пытаетесь обработать параметр, котроый должен был быть передан на страницу, но какой то причине передан небыл, то получается ошибка.

Пример:
PHP:
<?php 
... 
error_reporting (E_ALL); 
set_error_handler ("Page_OnError"); 
... 
$id = $_GET["id"]; 
if($id >0) 
{ 
    // do something 
} 
?>
В результате если мы попали на нашу страницу по ссылке http://somehost.com/somepage.php?id=12 то все работает, но если по какой то причине параметр не был передан (http://somehost.com/somepage.php) то тогда нас ждет ссобщение об ошибке подобного вида:

Error Numebr - 8
Error File - D:\Server\www.developer.com\somepage.php
Error Line - 23
Error Message - Undefined index: id

Что заначит, что в массиве $_GET не найден элемент с индексом id. Иными словами, параметр id в массиве $_GET отсутсвует.

По совету si были предприняты некоторые шаги, для решения этой ситуации и в итоге получилось вот это.


PHP:
<?php
class UserInput
{
	/**
	 * getPostParameter()
	 * 
	 * @param $name
	 * @return void 
	 **/
	function getPostParameter($name) 
	{ 
	    $value = isset ($_POST[$name]) ? $_POST[$name] : null; 
	    if (!get_magic_quotes_gpc ()) $value = addslashes ($value); 
	    return $value; 
	} 
	/**
	 * getGetParameter()
	 * 
	 * @param $name
	 * @return void
	 **/
	function getGetParameter($name) 
	{ 
	    $value = isset ($_GET[$name]) ? $_GET[$name] : null; 
	    if (!get_magic_quotes_gpc ()) $value = addcslashes ($value); 
	    return $value; 
	}
}
?>
В данном класе содержатся методы позволяющие получить занчения переменных которые переданы на страницу, при этом, по совету si, в зависимости от того, включены ли magic quotes или нет, эти переменные обрабатываются функцией addcslashes()или нет, что позволяет избежать проблем, при последующем использовании этих переменных в SQL запросах.

Теперь мы можем смело включать этот класс в любой РНР файл в котором предпологается работать с формами или получать какие то параметры методами GET или POST.

Ну и напоследок пример использования:

PHP:
<?php
... 
error_reporting (E_ALL); 
set_error_handler ("Page_OnError"); 
... 

include_once("classUserInput.php");
$in = new UserInput();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
	$id = $in->getPostParameter("txtID");
}
else {
	$id = $in->getGetParameter("id");
}

if($id >0) 
{ 
    // do something 
}

?>
 

www-lab

Guest
<?php

$id = isset($_GET['id']) ? $_GET['id'] : 0;

if(!$id){
// error message here
}

?>
 

Sababa

Guest
To webdeveloper:

Ну более корректно будет:

if( $id !== null ) // или isSet($id)
{
// do something
}

потому что id может принимать и нулевое значение (0).
 

Compote

Guest
уже писал на пхп в деталях:

попробуй array_key_exists

if(array_key_exists("id",$_GET))
{
$_GET['id']== $id;
}
ошибки про неопределенную переменную не будет
 
Сверху