Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Фильтрация переменной.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Александерр
Отправлено: 20 Мая, 2015 - 12:06:22
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Здравствуйте,я только начал изучать php и не могу понять одну штуку с фильтрацией переменной. Хочу очистить логин из формы который записал в переменную login от пробелов этим кодом:

Но записывается он в базу все равно с пробелами. Где моя тут ошибка? И второй вопрос отфильтровать пробелы этого мало? нужно отфильтровать всякие скобки,запятые?
(Добавление)
-------------------------------- -------------------------------- --------------

ВСЕ Понял=)
Улыбка Так нужно: ( что меняем, на что меняем)
Я нуб=)
А как все эти знаки почистить из логина?

(Отредактировано автором: 20 Мая, 2015 - 12:20:46)

 
 Top
Panoptik
Отправлено: 20 Мая, 2015 - 12:31:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




(Отредактировано автором: 20 Мая, 2015 - 12:33:22)



-----
Just do it
 
 Top
Александерр
Отправлено: 20 Мая, 2015 - 12:41:23
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Так не корректная фильтрация получается пишу в форму логина <a? d .m i' n2>
а в базу записывается lamn, а хотелось бы что бы записывался логин admin2
(Добавление)
Panoptik пишет:

Тоже не прокатывает в базу записывается как ltadmin2gt а должно admin2
(Добавление)
А так можно сделать? надежно будет?

Плюс в форме ввода текста поставить ограничение на длину символов + уничтожение пробелов.
 
 Top
Александерр
Отправлено: 20 Мая, 2015 - 15:23:37
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Такая фильтрация подойдет?


PHP:
скопировать код в буфер обмена
  1. $login = stripslashes($login);
  2. $login = htmlspecialchars($login);
  3.  
  4. $login=str_replace("<",'',$login);
  5. $login=str_replace(">",'',$login);
  6. $login=str_replace("+",'',$login);
  7. $login=str_replace("'",'',$login);
  8. $login=str_replace(" ",'',$login);
 
 Top
Ts.Saltan
Отправлено: 20 Мая, 2015 - 15:35:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




После функции htmlspecialchars в логине не будет символов < > ' "
бессмысленно дальше заменять их на другие символы

Проверка логина заключается в том, чтобы разрешить или запретить пользователю использовать этот логин. А что-то заменять, фильтровать автоматически может привести к не совсем ожидаемому результату. ИМХО, пусть юзер сам позаботится, чтоб логин соответствовал требованиям.

И вообще, грамотная фильтрация данных при занесении или выборке их из базы данных делает подобные фильтрации бесполезными, ибо никакого вреда это не нанесёт.
(Добавление)
и еще, str_replace может принять массивы в качестве первых двух аргументов

(Отредактировано автором: 20 Мая, 2015 - 15:37:42)

 
 Top
Александерр
Отправлено: 20 Мая, 2015 - 15:39:07
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:
После функции htmlspecialchars в логине не будет символов < > ' "
бессмысленно дальше заменять их на другие символы

Проверка логина заключается в том, чтобы разрешить или запретить пользователю использовать этот логин. А что-то заменять, фильтровать автоматически может привести к не совсем ожидаемому результату. ИМХО, пусть юзер сам позаботится, чтоб логин соответствовал требованиям.

И вообще, грамотная фильтрация данных при занесении или выборке их из базы данных делает подобные фильтрации бесполезными, ибо никакого вреда это не нанесёт.
(Добавление)
и еще, str_replace может принять массивы в качестве первых двух аргументов


Хотите сказать,что лучше сделать так?
PHP:
скопировать код в буфер обмена
  1. if (!preg_match("/^[А-Яа-яЁёa-zA-Z0-9_\-\!\~\.@ ]+$/",$login)){ $error=1;
  2.         $msg = "<b>Имя</b> содержит запрещенные символы. Разрешены рус. или англ. буквы обоих регистров, цифры, символы: пробел, _, !, ~, -, .,@ <br>\n";}
 
 Top
Ts.Saltan
Отправлено: 20 Мая, 2015 - 15:48:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




Как вариант, можно и так
 
 Top
Sail
Отправлено: 20 Мая, 2015 - 16:44:32
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Александерр пишет:
Тоже не прокатывает в базу записывается как ltadmin2gt а должно admin2
Есть HTML-сущности, которые кодируются как &code;
Их надо просто декодировать.
То есть, преобразовать предложенный Panoptik'ом вариант следующим образом:
А если используете UTF-8, то и модификатор 'u' добавить к шаблону...
 
 Top
Александерр
Отправлено: 20 Мая, 2015 - 19:54:56
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Подскажите еще, если сделать так:

То этого хватит для защиты от sql ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB