|
|
|
| когда делал по видеоурокам то там всегда использовался stripslashes()
вот мне интересно есть ли разница между использованием этих фуннкций или без разницы что использовать??
просто если без разницы то переделывать не буду. а если тока в удобстве то в следующих проэктах буду другим пользоватся | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 16:53)
| | вообще очень странно как stripslashes может заменить mysql_escape_string. может быть не stripslashes a addslashes???
вообще, ни то ни другое ни третье. ответ - mysql_real_escape_string. и магические кавычки лучше выключить. кстати, дело не в удобстве, а в безопасности | |
|
|
|
|
|
|
|
для: psychomc
(18.02.2011 в 17:01)
| | Плюс, обращаю внимание автора, что использовать надо именно mysql_real_escape_string, а не mysql_escape_string, т.к. первая является более совершенной, а вторая, если мне не изменяет память, вообще помечена на удаление. | |
|
|
|
|
|
|
|
для: neadekvat
(18.02.2011 в 17:05)
| | >т.к. первая является более совершенной
за счет того что учитывает кодировку :)
кстати вы правы
mysql_escape_string
"This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged." | |
|
|
|
|
|
|
|
для: psychomc
(18.02.2011 в 17:07)
| | кидаю описание на вопрос о stripslashes()
stripslashes -- Удаляет экранирование символов, произведенное функцией addslashes()
Описание
string stripslashes ( string str )
Удаляет экранирующие бэкслэши. (\' преобразуется в ', и т.д.). Двойные бэкслэши (\\) преобразуется в одиночные(\).
stripslashes() используется, например, когда директива конфигурации magic_quotes_gpc включена (она включена по умолчанию), и экранирование символов не требуется. Например, данные не вставляются в базу данных, а просто выводятся в браузер.
выкладываю полную картину как это работает удалив тока ненужный код с кое какими проверками
тоесть тут человек отправил коментарий на сайт а ето обработчик
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['text'])) {$text = $_POST['text'];}
$author = stripslashes($author);
$text = stripslashes($text);
$author = htmlspecialchars ($author);
$text = htmlspecialchars ($text);
stripslashes() автор использовал в post передаче
в любом случае теперь буду использовать то что вы посоветовали) | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 17:33)
| | > (она включена по умолчанию)
Опять таки, в зависимости от версии, она либо уже выклюена по умолчанию, либо помечена на уделение.
Кстати, у вас некоторая путаница с обработкой. Уже, правда, много раз повторились, но еще раз:
1. Отключайте нафиг все эти магические функции и т.д., благо это можно сделать из того же .htaccess. Вы должны получать именно те данные, которые вводит пользователь и сами их обрабатывать.
2. Перед занесением в бд - используйте mysql_real_escape_string
3. И только перед выводом на экран используйте htmlspecialchars.
Пункт три относится только к пользовательским данным. Естесственно, те, кто имеют высокое доверие (админы, например) могут использовать html-код. | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 17:33)
| | я знаю как работает stripslashes. но что вы потом делаете с переменными $author, $text ? заносите в базу? тогда да, mysql_real_escape_string. и кстати имхо, htmlspecialchars лучше применять не до занесения данных в базу, а после выборки из базы.
и кстати в обработчике логика неверная. в настройках register_globals=On ? | |
|
|
|
|
|
|
|
для: psychomc
(18.02.2011 в 17:45)
| | > и кстати в обработчике логика неверная. в настройках register_globals=On ?
Отчего же? Ведь автор использует массив _POST. Правда, если значения отсутствуют - должны лезть ошибки. | |
|
|
|
|
|
|
|
для: neadekvat
(18.02.2011 в 17:49)
| | хм, специально поискал. вот первая ссылка http://citforum.ru/internet/php/register_globals/
пишут что на $_POST тоже распространяется (сам не проверял). по поводу логики и имел ввиду, что вне зависимости от существования переменных автор их обрабатывает | |
|
|
|
|
|
|
|
для: psychomc
(18.02.2011 в 17:55)
| | Не совсем понимаю, о чем вы.
Автор работает с массивом _POST, т.е. обращается к его элементам.
Другой вопрос, что register_globals таки лучше поставить в off, если они еще в on. | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 16:53)
| | В новых версиях РНР магических кавычек как таковых вообще нет. | |
|
|
|
|
|
|
|
для: mihdan
(18.02.2011 в 17:29)
| | В 5.3.х они помечены на удаление, но еще присутствуют. | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 16:53)
| |
<?php
/**
*
* Рекурсивно применить функцию к элементам массива
*
* @staticvar array $return
* @param string $callback имя функции
* @param array $array
* @return array
*/
function array_map_recursive($callback, $array) {
$return = array();
if (!empty($array)) {
foreach ($array as $k => $v) {
if (is_array($v)) {
$return[$k] = array_map_recursive($callback, $v);
}
else {
$return[$k] = $callback($v);
}
}
}
return $return;
}
// если magic_quotes_gpc = ON, избавляемся от слешей
if (function_exists("get_magic_quotes_gpc") and get_magic_quotes_gpc()) {
$_GET = array_map_recursive("stripslashes", $_GET);
$_POST = array_map_recursive("stripslashes", $_POST);
$_COOKIE = array_map_recursive("stripslashes", $_COOKIE);
$_SESSION = array_map_recursive("stripslashes", $_SESSION);
$_REQUEST = array_map_recursive("stripslashes", $_REQUEST);
}
?>
|
И забыли про магические кавычки. В 6-ой версии их не будет. | |
|
|
|
|
|
|
|
для: Красная_шляпа
(18.02.2011 в 18:33)
| | а в ключах? | |
|
|
|
|
|
|
|
для: Trianon
(18.02.2011 в 18:43)
| | у меня такой необходимости не возникало | |
|
|
|
|
|
|
|
для: Красная_шляпа
(18.02.2011 в 18:56)
| | отошел на время скока информации)
1 да глобальные включены но тока в денвере на лок хосте. а в интернете провайдеры же сами отключают
2 а что значит логика не верна(( по каким критерием это можно понять?
3 а почему надо не когда вносишь в базу html_special_charce а до вывода?
4 спасибо красная шапка)) это надо в файл отдельно и потом просто include на каждую страницу?
5 neadekvat да в базу заносится . просто я обрезал код думаю людям в лом было бы всякое ненужное смотреть
6 извеняюсь за такой вопрос наверно дурацкий)) но можно ли прописывать так
mysql_real_escape_string($user),
mysql_real_escape_string($password));
ТОЕСТЬ В КОНЦЕ ПЕРВОГО ВМЕСТО ; стоит запятая увидел на 1 из сайтов
и если можно . скорее всего можно)) просто интересно ваше мнение))))) так же и со всеми повторяющимися вещами можно делать??? | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 19:37)
| | 1. Выключите. Тем более, что на домашнем компе это делается на раз-два. А на рабочих хостах все равно проверяйте - как там дела с этим. Никогда слепо не полагайтесь на кого-либо.
2. Я думаю, этот вывод о неверной логике был сделан несколько поспешно. Все-таки, здесь только выборка, а не рабочий код. Далее - см п.5
3.
> html_special_charce
омг. htmlspecialchars.
Не надо, потому что в базе должна хранится исходная информация, та, которую ввел пользователь. Считайте это правилом.
4. Тут я бы посоветовал вам использовать несколько иной код:
if (get_magic_quotes_gpc()) {
$_GET = OwnStripSlashes($_GET);
$_POST = OwnStripSlashes($_POST);
$_COOKIE = OwnStripSlashes($_COOKIE);
$_REQUEST = OwnStripSlashes($_REQUEST);
}
function OwnStripSlashes($data)
{
if (is_array($data))
$data = array_map('OwnStripSlashes', $data);
else
$data = stripslashes($data);
return $data;
}
Но,
а) просто выключите магические кавычки - и не надо лишнего кода.
б) дело ваше, можете использовать любой код и любые настройки - я лишь советую. Не более.
5. Тут вы абсолютно правы - без надобности весь код выставлять не надо - этим вы рискуете вызвать лишь негативную реакцию.
6. А вот сейчас вы явно показали не весь код. Больше похоже, что это вырезка из чего-то подобного:
<?php
$sql = sprintf("INSERT INTO tbl (username, password) VALUES ('%s', '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password));
|
Как делать - ваше право. А мне западло высчитывать, к какому там по счету полю относится конкретная строка и потому я делаю так:
<?php
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql = INSERT INTO tbl (username, password) VALUES ('$username ', '$password')"
|
p.s. На самом деле я делаю чуть-чуть иначе - показал лишь суть. К тому же, если исходить из того, что password - это поле с паролем, то пароль таки надо хранить в хешированном виде - это тоже правило. Но это уже из другой оперы немножко. | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 19:37)
| | еще чтоб реабилитировать автора покажу вторую часть кот не вставлял думая что он не нужен
$author = htmlspecialchars ($author);
$text = htmlspecialchars ($text);
$result = mysql_query("SELECT sum FROM comment_setting",$bd);
$myrow = mysql_fetch_array ($result);
if ($pr == $myrow["sum"])
{
$date = date ("Y-m-d");
$result2 = mysql_query("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author','$text','$date')",$bd );
оказывается у меня хтмл как раз перед выбором данных был))))))))))) | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 19:57)
| | спс сообщения тут на форуме какие то не удобные((( хотел ща удалить свой предыдущий пост а только создал еще 1) | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 19:57)
| | Да как же - вот вы обрабатываете данные этой функцией (html...) а потом чуть ниже эти данные заносите в базу данных. Так как раз делать не надо. | |
|
|
|
|
|
|
|
для: neadekvat
(18.02.2011 в 20:02)
| | аааааааа вот поэтому и писал что хотел удалить предыдущий пост)))))))))))
это он берет из базы совсем другое))) фото от спам ботов)))))))) потом типо из вывода число сравнивается с 1 из приобретенных чисел из пост
потом идет инсерт
а только потом вывод из базы полный )) кароче я всех запутал))))))))))))))))))))))))))) ахахах
извеняюсь)
просто изначальный вопрос был не в этом )) потом заговори о другом ))) итд и потом все в непонятках))))) | |
|
|
|
|
|
|
|
для: kvins
(18.02.2011 в 20:07)
| | Две просьбы:
1. Поменьше скобок, пожалуйста - текст теряется;
2. Извините, блин >__< | |
|
|
|
|
|
|
|
для: neadekvat
(18.02.2011 в 20:09)
| | дауж тупая привычка от онлайн игр , надо отвыкать | |
|
|
|