Фильтрация переменных, как работать с массивами?

Статус
В этой теме нельзя размещать новые ответы.

dmsoh

Профессор
Регистрация
27 Янв 2007
Сообщения
192
Реакции
44
Из html-формы с множеством checkbox
PHP:
while ($result = $resource->fetch())
{   
$i++;
echo '<input name="cartel[]" value="'.$result['ID'].'" type="checkbox">';
}

скрипту передается целочисленный массив $_POST['cartel'], после чего по этим значениям делается выборка из базы.

PHP:
$id_lctl = implode(',', $_POST['cartel']);

$sql = 'SELECT    ID, name FROM firm  WHERE ID IN ('.$id_lctl.') ORDER BY FIELD(ID, '.$id_lctl.')';

Как правильно фильтровать содержимое $_POST['cartel'] перед работой с базой?
 
PHP:
$id_lctl = implode(',', $_POST['cartel']);

$id_lctl = mysql_real_escape_string($id_lctl);

$sql = 'SELECT    ID, name FROM firm  WHERE ID IN ('.$id_lctl.') ORDER BY FIELD(ID, '.$id_lctl.')';
 
если там строго 1 или 0 то так и проверял бы по типу данных,
я вообще стараюсь сделать на каждое получаемое значение из вне..
правило на проверку валидности, на длину, тип, и если принудительно то фильтровать самому без оповещения пользователя...
пример
код правил
PHP:
 'check'=>array(
                'ulogin'=>      array(
                        array('name'=>_LOGIN,'type'=>'string','required'=>true,'min'=>3,'max'=>50),
                ),
                'upassword'=>   array(
                        array('name'=>_PASSWORD,'type'=>'string','required'=>true,'min'=>3,'max'=>50),
                ),
                'uemail'=>   array(
                        array('name'=>_EMAIL,'type'=>'email','required'=>true,'min'=>6,'max'=>50),
                ),
                'captcha'=>   array(
                        array('name'=>_CAPTCHA,'type'=>'number','required'=>true,'min'=>1,'max'=>1000000),
                ),
        ),
        'filter'=>array(
                'ulogin'=>'string',
                'upassword'=>'string',
                'uemail'=>'email',
                'captcha'=>'number',
        ),
код чекалки на самое простое
PHP:
/**
   * Проверка данных по правилам
   */
  function check(array $rules=array()) {
    global $engine;
    foreach($rules as $var=>$this->rule):
      foreach($this->rule as $key=>$options):
        if($options['required'] == true):
          $this->is_set($var);
        endif;
        switch($options['type']):
          case 'string':
            $this->is_string($var, $options['min'], $options['max'], $options['required']);
            if(array_key_exists($var, $this->errors)):
              $engine->debug->errors($this->errors[$var],$options['name'],$options['min'],$options['max']);
            endif;
            break;
          case 'number':
            $this->is_number($var, $options['min'], $options['max'], $options['required']);
            if(array_key_exists($var, $this->errors)):
              $engine->debug->errors($this->errors[$var],$options['name'],$options['min'],$options['max']);
            endif;
            break;
          case 'email':
            $this->is_email($var, $options['min'], $options['max'], $options['required']);
            if(array_key_exists($var, $this->errors)):
              $engine->debug->errors($this->errors[$var],$options['name'],$options['min'],$options['max']);
            endif;
            break;
          endswitch;
      endforeach;
    endforeach;
  }
код фильтра
PHP:
//// Фильтры
  function filter(array $rules=array()) {
    global $engine;
    $var=null;
    $type=null;
    foreach($rules as $var=>$type):
      switch($type):
        case 'string':
          $this->string($var);
          break;
        case 'number':
          $this->number($var);
          break;
        case 'email':
          $this->email($var);
          break;
        endswitch;
    endforeach;
    $rules=null;
    unset($var);
    unset($type);
  }
function string($var) {
$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW);
  }
  function number($var) {
$this->result[$var] = (int) filter_var($this->source[$var],FILTER_SANITIZE_NUMBER_INT);
  }
  function email($var) {
$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_EMAIL);
  }
Добавлено через 3 минуты
для примера показал только базовые функции, если захочешь сам допишешь то что нужно, а писать сразу в базу не стоит, нужно хоть немного защитится)))
для твоего примера это проверка на строгое соотвествует типу, и значению те 1 или 0 или on-off и тп зависит что ты применяешь) и что ожидаешь))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху