/** * 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; }