Игнорируется ф-я mysqli_real_escape_string при занесении результатов в БД ?

littus

Новичок
Всем доброго дня!

Игнорируется ф-я mysqli_real_escape_string(); при занесении результатов в БД через метод подготовленного запроса.

БД MySQL;
конфигурация magic_quotes_gpc конечно же в off.

В библиотеке 2 функции:

function clearData($data){ // фильтр принимаемых параметров с формы
global $link; // соединение с БД
return mysqli_real_escape_string($link,trim(htmlspecialchars(strip_tags($data)))); break;
........
}


function addToCatalog($title, $author, $pubyear, $price) { // добавление в БД данных
global $link; // соединение с БД

$sql= "INSERT INTO catalog (title, author, pubyear, price) VALUES (?,?,?,?)";
if(!$stmt= mysqli_prepare($link,$sql)): return FALSE;
else:
mysqli_stmt_bind_param($stmt, "ssid", $title, $author, $pubyear, $price);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
return TRUE;
endif;
}

---------------------------------------------------
скрипт исполняемого файла:

if ( ($_SERVER['REQUEST_METHOD']=="POST"):

$title= clearData($_POST['title']);
$author= clearData($_POST['author']);
$pubyear= ...........
$price= .............

addToCatalog($title, $author, $pubyear, $price);
header("Location: " .$_SERVER['REQUEST_URI']);

endif;


Если $title или $author будут иметь значения с апострофом типа O'Brian, то у меня в БД уходит экранированный апостроф (O\'Brian) хотя не должен, по идее,т.к. я использую функцию mysqli_real_escape_string(). По крайней мере при использовании старого расширения php_mysql.dill и при данном php_mysqli.dill , но не используя метод подготовленного запроса, - в БД идет все правильно в виде O'Brian, на основании чего сделал вывод, что дело именно в прохождении данных через подготовленный запрос.
Я, конечно, могу в данном случае, уже потом при выводе данных из БД пропустить через stripslashes(); Но будет ли это нормальным подходом или как-то можно более
грамотно решить вопрос?
Спасибо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я думаю, что тебе поможет только полностью забыть все, что ты изучил и начать снова, с прочтения нормальной книги. Ты навернул просто ВСЕ хреновые подходы, что можно придумать, глобальные переменные, неверное решение везде вызывать clearData для "очистки" данных, прямой вызов mysqli_stmt_bind_param и прочих функций там, где надо вызывать обертку над БД. Советую пойти и посмотреть как это сделано в какой-то нормальной библиотеке для работы с mysql
 

Фанат

oncle terrible
Команда форума
можно
просто выкини функцию clearData() на помойку.
И больше никогда, никогда в своей жизни не вспоминай про неё.
 

CoolKid

Новичок
1. Храни в базе данные по принципу "как пришли", т.е. без спешиалчарсов, стриптагов и прочей ерунды. При необходимости - фильтруй данные при выводе и лучше делать это с помощью шаблонизатора.
2. Используй PDO и плейсхолдеры, при использовании которых необходимость в clearData() отпадет сама собой.
3. Не используй глобальные переменные.
 

littus

Новичок
Хорошо, выкину ))
Но мне вместо нее нужно найти сначала альтернативу - правильные решения. Это я и так в процессе обучения познаю,нашел в нете и уже не правильно ))
Знать бы откуда вычитывать где все правильно и как нужно, а так выходит, то,что я сейчас прохожу в рамках курса, уже не правильно/не актуально ))
Ладно, курить интернет...

Хорошо, спасибо за ответы, наводки, ключевые слова.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Интересно где такие "курсы" постят? Мне для себя, просто посмотреть.
 

littus

Новичок
Интересно где такие "курсы" постят? Мне для себя, просто посмотреть.
PHP [Специалист-2013] в нете вычитал, их там советовали. На рутрекере они есть, можно скачать.
Если на каком ресурсе имелось ввиду, то не вспомню, я столько перелопатил всего...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Там много частей, можно конкретней?
 

littus

Новичок
Там много частей, можно конкретней?
Да, сорри, конечно.
Смотрите сразу PHP Уровень 2/ day4.mp4 и day5(28.05)-доделал.mp4, по последнему видеофайлу и мой вопрос, там в Админке добавляют товар в каталог, где-то на 1/3 времени.
Всего на PHP Уровень 2, 6 занятий там, до 6-го еще не дошел.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Блин, это видеокурсы? Ну тогда понятно все.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Гениально, делаем бизнес!
 

Активист

Активист
Команда форума
для тех, у кого нет времени смотреть видео.
стоит товарищ в пробке и слушает примеры
Не, зачем аудиокниги. Радио PHP FM, приглашают людей, они обсуждают как начать кодить, холиваровы там по поводу кода, Hi Load по выходным с "Евгением Поповым". Реклама Битрикса между обсуждением, а то включаешь радио Маяк (или Россия как его там), они там трындят про "куда съездить отдохнуть" и "украина". Радио PHP FM - чтоб не скучно - музыка - "Админы сервер держат" и "DOS" ))
 

Breeze

goshogun
Команда форума
Партнер клуба
Радио -- это уже для тех, кто в теме и все книги прослушал и просмотрел.
 

littus

Новичок
))
Какие курсы доступные, современные вы бы тогда посоветовали к изучению?
 

AnrDaemon

Продвинутый новичок
Книги, дитятко. Это такая пачка бумаги с буквами, прошитая с одного торца.
Какие именно книги? Поиск по форуму не отменяли.
 

Фанат

oncle terrible
Команда форума
))
Какие курсы доступные, современные вы бы тогда посоветовали к изучению?
кроме шуток - мы не учимся программированию, мы программируем.
И про курсы знаем очень мало.

Лучше да - наверное книжки.
Хотя все которые мы советовали раньше, уже безнадежно устарели, тот же Котеров, который был напечатан, на минуточку, 10 лет назад.

Я всегда чувствую себя не всвоей тарелке, когда критикую, но не могу предложить ничего взамен.
Так что, парни, зубоскалить здесь не надо, а попробовать все-таки посоветовать хоть что-то.
 
Сверху