$sql = 'INSERT INTO `tab` (`user`,`r`,`text`) VALUES ';
foreach ($_POST['text'] as $key => $value)
{
$value = preg_replace('/[^0-9А-Яа-яёЁ\d ]/u', '', $value);
$value = trim($value);
$sql .= "(".intval($user).",".intval($key).",'".mysql_real_escape_string($value)."'),";
}
...
Спустя 5 минут, 22 секунды (23.04.2012 - 10:51) Nikitian написал(а):
Что это за текст на 3к знаков без знаков препинания? Люди иногда их используют и даже частенько по правилам 
Я уж не говорю про дефисы и использование символов со всякими умляутами... А ещё есть перевод строки, псевдографика.
Я уж не говорю про дефисы и использование символов со всякими умляутами... А ещё есть перевод строки, псевдографика.
Спустя 11 минут, 45 секунд (23.04.2012 - 11:02) maximka787 написал(а):
Nikitian
Жестоко, что-то я не подумал)) а как тут лучше поступить? дополнить регулярное выражение этими символами? Мне железно нельзя пропускать кавычки, тире, двоеточия, англ буквы.
Жестоко, что-то я не подумал)) а как тут лучше поступить? дополнить регулярное выражение этими символами? Мне железно нельзя пропускать кавычки, тире, двоеточия, англ буквы.
Спустя 5 минут, 55 секунд (23.04.2012 - 11:08) yurayu92 написал(а):
А почему не сделать проверку через preg_match?
+ У тебя по окончению цикла получится такая строка:
"INSERT INTO ... ),"
То есть в окончание есть запятая
+ У тебя по окончению цикла получится такая строка:
"INSERT INTO ... ),"
То есть в окончание есть запятая
Спустя 4 минуты, 50 секунд (23.04.2012 - 11:13) Nikitian написал(а):
| Цитата (maximka787 @ 23.04.2012 - 12:02) |
| Мне железно нельзя пропускать кавычки, тире, двоеточия, англ буквы. |
При таких условиях как-то так:
$value = preg_replace('/[A-Za-z\"\\\'\:\-]/u', '', $value);
Может запутался в бэкслешах, не проверял.
Имхо, от пользователя надо всё принимать, просто экранировать при вводе и выводе. Редко когда такие ограничения накладываются внешними факторами.
Спустя 5 минут, 44 секунды (23.04.2012 - 11:19) maximka787 написал(а):
yurayu92
у меня там ... в коде как раз запятую и стирают)))
Nikitian
Там идут рецензии и они должны быть только на русском причем без премодерации и самое главное от любых юзеров (не зарегистрированных), то есть жестокие условия))) Я проверю твое выражение и думаю оно подойдет. спасибо.
у меня там ... в коде как раз запятую и стирают)))
Nikitian
Там идут рецензии и они должны быть только на русском причем без премодерации и самое главное от любых юзеров (не зарегистрированных), то есть жестокие условия))) Я проверю твое выражение и думаю оно подойдет. спасибо.
Спустя 5 минут, 24 секунды (23.04.2012 - 11:24) killer8080 написал(а):
| Цитата (maximka787 @ 23.04.2012 - 11:45) |
| Сделал небольшой скрипт и к нему защиту. |
защиту от чего? От инъекций ненужно ничего кроме, экранирования слешей (mysql_real_escape_string) для текстовых полей и приведение к типу для числовых, все остальное не имеет смысла.
Спустя 2 минуты, 12 секунд (23.04.2012 - 11:26) Renden написал(а):
killer8080
Во-во я тоже прочитал не понял нафига тут регулярка)
Во-во я тоже прочитал не понял нафига тут регулярка)
Спустя 16 минут, 34 секунды (23.04.2012 - 11:43) Nikitian написал(а):
| Цитата (maximka787 @ 23.04.2012 - 12:19) |
| yurayu92 у меня там ... в коде как раз запятую и стирают))) Nikitian Там идут рецензии и они должны быть только на русском причем без премодерации и самое главное от любых юзеров (не зарегистрированных), то есть жестокие условия))) Я проверю твое выражение и думаю оно подойдет. спасибо. |
Ну тогда правильнее будет сделать несколько уровней проверки:
* Нет кириллицы - сообщать, что сообщения должно содержать кириллицу. Для набора без использования русской раскладки можно использовать виртуальную клавиатуру
* Вырезать все неугодные теги, если предполагается вывод в виде html. Предпочитаю для вырезания тегов использовать это.
* При записи в бд разумеется необходимо всё экранировать через mysql_real_escape_string(), ну это вы и так делаете.
* Если вывод предполагается не как html, то выводить через nl2br(htmlspecialchars())
Всё, этим вы не будете ущемлять пользователей сверх меры и не дадите им загадить сайт xss или ссылками
Спустя 30 минут, 29 секунд (23.04.2012 - 12:13) maximka787 написал(а):
Nikitian
спасибо, сейчас попробую что-то взять отсюда.
Renden и killer8080
Я наверно ошибся, защиту от инъекций я и сделал через mysql_real_escape_string. Там суть была в фильтрации логической, но уже все решил, буду дальше дорабатывать.
спасибо, сейчас попробую что-то взять отсюда.
Renden и killer8080
Я наверно ошибся, защиту от инъекций я и сделал через mysql_real_escape_string. Там суть была в фильтрации логической, но уже все решил, буду дальше дорабатывать.
Спустя 13 минут, 34 секунды (23.04.2012 - 12:27) maximka787 написал(а):
Nikitian
вот я сделал
А вопрос такой в мою конструкцию как разрешить перенос строки?
пытался добавить \n но не сработало.
вот я сделал
$value = preg_replace('/[\"\\\'\:\-\`<>~=+^]/u', '', $value);
А вопрос такой в мою конструкцию как разрешить перенос строки?
$value = preg_replace('/[^,.0-9А-Яа-яёЁ\d ]/u', '', $value);
пытался добавить \n но не сработало.
Спустя 1 минута, 25 секунд (23.04.2012 - 12:28) killer8080 написал(а):
| Цитата (maximka787 @ 23.04.2012 - 13:27) |
| А вопрос такой в мою конструкцию как разрешить перенос строки? |
\s - любые пробельные символы
Спустя 2 минуты, 29 секунд (23.04.2012 - 12:31) maximka787 написал(а):
killer8080
спасибо, вт так дописал
спасибо, вт так дописал
$value = preg_replace('/[^,.0-9А-Яа-яёЁ\s\d ]/u', '', $value);
Спустя 6 минут, 52 секунды (23.04.2012 - 12:38) killer8080 написал(а):
maximka787
обычный пробел из символьного класса теперь можешь выбросить, и перечисление цифр 0-9 ненужно, у тебя же там есть \d, так же вместо перечисления строчных и прописных букв можно просто добавить модификатор i.
кстати точку надо экранировать
обычный пробел из символьного класса теперь можешь выбросить, и перечисление цифр 0-9 ненужно, у тебя же там есть \d, так же вместо перечисления строчных и прописных букв можно просто добавить модификатор i.
кстати точку надо экранировать
'/[^,\.а-яё\s\d]/ui' Спустя 1 минута, 55 секунд (23.04.2012 - 12:40) maximka787 написал(а):
killer8080
Благодарю, вот это познания, столько нового)
Благодарю, вот это познания, столько нового)
_____________
..Работает - не трогай!