Вечер добрый, допустим есть запрос: [sql]SELECT * FROM table WHERE id = $_GET['id'][/sql] Поле "id"типа int. Как лучше организовать проверку? 1. Проверять регулярным выражением, все, что не цифра - удалять? 2. Проверить функцией is_numeric, потом обрезать c помощью функции intval? Также воспользоваться дополнительно real_escape_string. Как вариант лучше?
я долго мучался, а потом забил. пользуюсь функциями PHP: // // <editor-fold defaultstate="collapsed" desc="strget - берет искомый элемент из массивов POST или GET и приводит его к String указанной длинны"> function strget($str='', $length = 255) { if (isset($_POST[$str])) { return trim(substr(trim($_POST[$str]), 0, $length)); } if (isset($_GET[$str])) { return trim(substr(trim($_GET[$str]), 0, $length)); } return false; } // </editor-fold> // // <editor-fold defaultstate="collapsed" desc="intget - берет искомый элемент из массивов POST или GET и приводит его к Integer"> function intget($str='') { if (isset($_POST[$str])) { return intval($_POST[$str]); } if (isset($_GET[$str])) { return intval($_GET[$str]); } return false; } // </editor-fold>
Ок, но эти функции не проверяют параметры на наличие запрещенных символов, я в своем вопросе имел ввиду не только проверку типа данных...
Если я правильно понимаю суть дела, то это тоже самое, что я предложил в своем первом посте, т.е. intval ($_GET['id']), но это не дает ответ на вопрос, как проверять лучше
Mr. T конечно не проверяют! и не надо =) просто надо юзать перед вставкой в запрос к БД значений от функции strget ченить типа mysql_real_escape или аналог с mysqli а intget дает безопасные значения.