@kotey

Как оптимизировать функцию обработки полей формы?

Доброго времени суток, уважаемые!
Сама суть вопроса:
Имеется форма на сайте из нескольких текстовых полей и полученные оттуда данные необходимо записать в базу mySql
Но перед записью эти данные нужно обработать (мы же за безопасный... этот самый). Но при этом сохранить все знаки, чтобы потом можно было вывести данные на страницу html в исходном виде.
То есть, могучее и православное strip_tags не подходит.
Раскинув своим интеллектом класса "Чайник 0.2" и полазив по сети, я родил подобную конструкцию:
$_POST=str_replace( "\\\"" ,'"' ,$_POST);
$_POST=preg_replace( "/<script/i",' ',$_POST);
$_POST=str_replace( "<!--"   ,'&#60;&#33;--',$_POST);
$_POST=str_replace( "-->"    ,'--&#62;'     ,$_POST);
$_POST=str_replace( "&#032;" ,' '     ,$_POST);
$_POST=str_replace( "&"      ,'&amp;' ,$_POST);
$_POST=str_replace( ">"      ,'&gt;'  ,$_POST);
$_POST=str_replace( "<"      ,'&lt;'  ,$_POST);
$_POST=str_replace( "\""     ,'&quot;',$_POST);
$_POST=preg_replace( "/\n\n/",'<p>'   ,$_POST);
$_POST=preg_replace( "/\n/"  ,'<br>'  ,$_POST);
$_POST=preg_replace( "/\\\$/",'&#036;',$_POST);
$_POST=preg_replace( "/\r/"  ,''      ,$_POST);
$_POST=preg_replace( "/\\\/" ,'&#092;',$_POST);
$_POST=str_replace("\r\n"    ,"<br>", $_POST);
$_POST=str_replace("\n\n"    ,'<p>',$_POST);
$_POST=str_replace("\n"      ,'<br>',$_POST);
$_POST=str_replace("\t"      ,'',$_POST);
$_POST=str_replace("\r"      ,'',$_POST);
$_POST=str_replace('   '     ,' ',$_POST);

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

UPD
с записью БД просветили, огромное спасибо. (осталось разобраться о чем собственно просветили =))
Но всё же, вопрос остался. Допустим, данные пойдут не в БД, а куда то ещё. К примеру... ну, пусть в функцию mail().
Форма обратной связи, юзер что-то написал, и эти данные прямо сразу отправляются "админу". Как тогда?
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Но перед записью эти данные нужно обработать

Зачем?

Безопасно записать в СУБД - это prepared statements. Никак калечить пользовательский ввод для этого не нужно.
Вывести в html - есть нативный htmlspecialchars.

А вот в upd верное направление мысли. Абсолютно неважно, откуда данные - единственно важно куда эти данные пойдут. И именно для этого может понадобится дополнительная обработка именно для этого выходного формата.
Отправка письма - plain text можно отправлять как есть. html - html и есть, всё тот же htmlspecialchars.
Куда-нибудь в csv - используйте нативные функции обработки csv. json - json_encode. И так далее. Для каждого формата свои требования к оформлению пользовательского ввода.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Но перед записью эти данные нужно обработать


не нужно. Вот вам и решение проблемы. prepared statements для sql и экранирование при выводе.
Ответ написан
Комментировать
@kotey Автор вопроса
Сергей Протько, Melkij
Спасибо. Пока пытаюсь разобраться, что это вообще, курю статью на Хабре https://habrahabr.ru/post/148446/

Но всё же. Допустим, данные пойдут не в БД, а куда то ещё. К примеру... ну, пусть в функцию mail().
Ну, форма обратной связи, юзер что-то написал, и эти данные прямо сразу отправляются "админу".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы