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

Тема в разделе "PHP Pro", создана пользователем dmsoh, 19 май 2010.

Статус темы:
Закрыта.
  1. dmsoh

    dmsoh

    Регистр.:
    27 янв 2007
    Сообщения:
    192
    Симпатии:
    42
    Из 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'] перед работой с базой?
     
  2. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    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.')';

     
    dmsoh нравится это.
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    если там строго 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 и тп зависит что ты применяешь) и что ожидаешь))
     
    dmsoh нравится это.
Статус темы:
Закрыта.