[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильность построения запроса и безопасность
asdf27

$result=mysql_query("INSERT INTO `ads` (`title`,`about`,`mon`,`mail`,`note`,`edit_code`,`date`,`mini`,`orig`) VALUES
('"
. mysql_real_escape_string($_POST[title])."','". mysql_real_escape_string($_POST[about])."',".(int)$_POST[mon].",'". mysql_real_escape_string($_POST[mail])."','". mysql_real_escape_string($_POST[radi])."',
"
.(int)$edit_code.",'". mysql_real_escape_string($date)."','". mysql_real_escape_string($mini)."'
,'"
. mysql_real_escape_string($orig)."')") or die (mysql_error());


После отладки вывод ошибок уберу. Всё ли тут правильно?
Ser18
Ну еще бы trim добавить и удалить теги
asdf27
Это не шутка? :)

Если нет, то:

$example=$_POST[example];
htmlspecialchars($example);
$example=trim($example);

И в запросе уже
". mysql_real_escape_string($example)."'

так?

_
inpost
asdf27
Трим надо, теги удалять не нужно. Ошибка у предыдущего оратора.
Я трим использую для всего массива POST, лучше на корню всё убрать, чтобы потом не пользоваться.

Далее: http://php.net/manual/ru/language.types.array.php . Почитай очень внимательно, есть главная ошибка, которая указана даже в мануале.

Ну и в третьем, VALUES необходим для множественной вставки одним запросом. Если же ты вставляешь одну запись, то ЛИЧНО МНЕ удобнее делать как в UPDATE:
INSERT INTO `table` SET
`cell` = 'value',
`cell` = 'value'


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
asdf27
Цитата
теги удалять не нужно
- при выводе удалять?

Цитата
Я трим использую для всего массива POST
- т.е. можно не описывать каждую переменную отдельно, а разом для всего POST-входящего потока? Если да, то как...

Цитата
есть главная ошибка
- отсутствие обрамления кавычками ключей? $_POST[title]

Цитата
VALUES необходим для множественной вставки одним запросом
- в несколько таблиц сразу? Если оставить привычку, разница в скорости есть?
inpost
asdf27
Удалять теги? Слушай, в своём коде лучше использовать тег: <br /> , а ты его видишь? smile.gif
И да, htmlspecialchars - это не удаление тегов, это их преобразование в сущности, вот это как раз и нужно.

$_POST, и другие суперглобальные.... МАССИВЫ, а работа с массивами делается через foreach, array_map , и т.д. Но лучше через функцию с рекурсией.

Да, оно самое. Молодец, что прочитал всё.

Не таблиц, а записей: VALUES (),(),(),() . Разницы нет, но тяжелее в итоге вспоминать данный код или его править, когда у таблиц более 10-20 колонок. Особенно когда одну из них необходимо убрать или исправить. Более прозрачный код.

И в заключение, работать с mysql_query лучше через оболочку, через специальную функцию, которая будет в файл сохранять все ошибки mysql_error() , это не раз уже спасало меня и позволяло мониторить крупный сайт.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
asdf27
Спасибо! всем плюсы.
VELIK505
Цитата (asdf27 @ 21.10.2012 - 21:22)
Это не шутка? :)

Если нет, то:

$example=$_POST[example];
htmlspecialchars($example);
$example=trim($example);

И в запросе уже
". mysql_real_escape_string($example)."'

так?

_

$example=htmlspecialchars(trim(mysql_real_escape_string($_POST["example"])));

Так не проще?
killer8080
VELIK505
как минимум trim должен идти раньше mysql_real_escape_string, иначе она не обрежет символы перевода строки.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.