コード例 #1
0
 /**
  * Validate a form
  * on each field you can mix many rules (with |) and some rules can contains parameter (with § as separator)
  *
  * @static
  * @param array		array of form fields
  * @param string	form name
  * @return boolean
  */
 public static function form(&$fields, $form_name = '', $method = 'post')
 {
     // share the array of fields in the class
     self::$fields = $fields;
     // share the array of data
     self::$data = $method == 'post' ? $_POST : $_GET;
     $e = true;
     // check x4token
     if (!empty($form_name) && (!isset(self::$data['x4token']) || self::$data['x4token'] != md5($_SESSION['token'] . $form_name))) {
         $e = false;
         $_SESSION['token'] = uniqid(rand(), TRUE);
     } else {
         $n = sizeof($fields);
         for ($i = 0; $i < $n; $i++) {
             // check errors
             if (isset($fields[$i]['rule'])) {
                 $token = explode('|', $fields[$i]['rule']);
                 foreach ($token as $ii) {
                     // handle multiple select
                     $name = self::get_name($fields[$i]);
                     // get parameters
                     $tok = explode('§', $ii);
                     // set rule function name
                     $rule = '_' . $tok[0];
                     // if we have this validation function
                     if (method_exists(__CLASS__, $rule)) {
                         if (in_array($rule, self::$special_rules)) {
                             // special rules
                             self::$rule($fields[$i], $tok, $e, self::$data, $_FILES);
                         } else {
                             // here rules checked only if the field value is not empty
                             if (!empty(self::$data[$fields[$i]['name']])) {
                                 self::$rule($fields[$i], $tok, $e, self::$data, $_FILES);
                             }
                         }
                     }
                 }
             }
             // assign the value
             if (!in_array($fields[$i]['type'], X4Form_helper::$exclude) && (isset($fields[$i]['name']) && isset(self::$data[$fields[$i]['name']]) && !empty(self::$data[$fields[$i]['name']]))) {
                 switch ($fields[$i]['type']) {
                     case 'checkbox':
                         $fields[$i]['value'] = 1;
                         $fields[$i]['checked'] = intval(isset(self::$data[$fields[$i]['name']]));
                         break;
                     case 'mcheckbox':
                         $fields[$i]['checked'] = isset(self::$data[$fields[$i]['name']]) ? self::$data[$fields[$i]['name']] : array();
                         break;
                     case 'radio':
                         if (isset(self::$data[$fields[$i]['name']])) {
                             $fields[$i]['checked'] = self::$data[$fields[$i]['name']];
                         }
                         break;
                     default:
                         // check for sanitize
                         $fields[$i]['value'] = isset($fields[$i]['sanitize']) ? self::sanitize(self::$data[$fields[$i]['name']], $fields[$i]['sanitize']) : self::$data[$fields[$i]['name']];
                         break;
                 }
             }
         }
     }
     return $e;
 }