В скрипте нужно сделать проверку на количество символов в переменной, полученной путем $_POST. В форме ограничение стоит, но его можно легким способом убрать и отправить форму без него. В итоге в базу можно будет добавить любую гору текста... =) Код (Text): $text = isset($_POST['text']) ? $_POST['text'] : ''; // Задаю переменную... if(strlen($text) > 5000) // Знаю, что проверять нужно таким способом. // Но как в случае true остановить обработку скрипта, и вывести сообщение об ошибке? // или же что-бы $sql вернул false. $sql = mysql_query("INSERT INTO table (text) VALUES ('$text')");
Просто обрезай текст до нужной длины, т.к. кулцхакер уже обошел ограничение в форме и готов ко всему (к бану, например).
Спасибо за подсказку. Так и сделаю. Действительно хацкер знает что делает, и предупреждение ему не к чему ))
Следует обратить внимание, что при автоматическом экранировании кавычек текста получится больше, чем указано в maxlength. Обработку ошибок можно реализовать с помощью try catch. Читаемость кода повышается и бла-бла-бла.
на русском. http://php.net/manual/ru/language.exceptions.html try catch - это собственно и есть полное описание =) как if else
klon5555, вы переживаете, что пользователь введёт более 5000 символов, при этом не учитываете, что кодировка может быть UTF-8 (т.е. по два байта на один русский символ). Если не подключён модуль mb_string, то strlen вернёт количество байт, т.е. в два раза больше, чем ввёл пользователь. Сообщение, об ошибке можно не показывать, но его нужно логировать, и сообщать пользователю, что есть какие-то проблемы, мол извини, потому что завтра у вас в скрипте что-либо сломается, и вы даже не узнаете, что пользователи постоянно сталкиваются с какими-то проблемами. +1 к try catch Ну и совсем смешно выглядит диалог про хакеров, т.к. у вас обыкновенный sql-injection, если не включены magic_quotes.
Ну, может, в примере упрощенный вариант, и он допилит проверку данных и сделает конвертацию. Задача была другая.
К сожалению, подключенность модуля mb_string не влияет на работу функции strlen. При работе со строками в utf-8 надо использовать функцию mb_strlen: http://www.php.net/manual/en/function.mb-strlen.php - или сделать, как в следующем посте.
Справедливое замечание, я имел ввиду переопределение строковых функций: http://ru.php.net/manual/ru/mbstring.co ... c-overload
Извиняюсь за столь поздний ответ в теме. Но что-то я не совсем понял как это реализовать... Кодировка документа и скрипта всегда utf8, поэтому данные по любому отправятся в utf8, соответственно всё должно быть нормально. Или я не прав?
для начала стоит написать Код (PHP): <?php phpinfo(); и посмотреть, встречаются ли слова mb_string А в целом вам сюда и сюда
Не разобрался как сделать в таком варианте несколько полей. Сделал так: Код (Text): $title = substr(isset($_POST['title']) ? $_POST['title'] : '',0,32); $cutdesc = substr(isset($_POST['cutdesc']) ? $_POST['cutdesc'] : '',0,300); $fulldesc = substr(isset($_POST['fulldesc']) ? $_POST['fulldesc'] : '',0,5000); По идее должно работать нормально. Если у вас есть какие-то возражения насчет этого способа решения, буду рад услышать их.