[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: if ($_POST) ... clean_txt()
Unlikely
Помогите, что то не могу сообразить.


<?PHP

require "db_connect.php" ;
require "clean_text.php" ;

$query = "select website_title,website_description,website_keywords,website_email from settings" ;
$result = mysql_query($query) ;
// $num = mysql_num_rows($result) ;

// for ($i=0 ; $i < $num ; $i++) {

$res = mysql_fetch_array($result,MYSQL_ASSOC) ;
// }

if ($_POST) {
$website_title = clean_text($_POST['website_title']) ;
$website_description = clean_text($_POST['website_description']) ;
$website_keywords = clean_text($_POST['website_keywords']) ;
$website_email = clean_text($_POST['website_email']) ;

echo $website_title ;
echo $website_description ;
echo $website_keywords ;
echo $website_email ;
}
?>

<form action="" name = "settings" method = "post">
<
p><input size = "30" name = "website_title" type = "text" value = "<?=$res['website_title'];?>"> Title</p>
<
p><textarea cols="25" rows="4" name = "website_description"><?=$res['website_description'];?></textarea> Description</p>
<
p><textarea cols="25" rows="4" name = "website_keywords"><?=$res['website_keywords'];?></textarea> Keywords</p>
<
p><input size = "30" name = "website_email" type = "text" value = "<?=$res['website_email'];?>"> Email</p>
<
p><input name = "submit" type = "submit" value = "Save Settings">
</
form>


Заплутал в if ($_POST) ... clean_txt().
Тупо обрабатываю по одному значению.
Не могу сообразить как обработать массив целиком.

db_connect.php устанавливает мне соединение с дб. Работает исправно.

clean_text.php

<?PHP

function clean_text($str) {
if(get_magic_quotes_gpc() == 1) {
$str = str_repleace('\"', """, $str) ;
$str = str_repleace("\'", "'", $str) ;
$str = str_repleace('<', "<", $str) ;
$str = str_repleace('>', ">", $str) ;
} else {

$str = htmlspecialchars($str,ENT_QUOTES,"UTF-8",false) ;
}
return
$str ;
}

?>





Спустя 3 минуты, 42 секунды (25.04.2010 - 19:42) twin написал(а):
Ужос. sad.gif

Спустя 4 минуты, 47 секунд (25.04.2010 - 19:47) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 16:42)
Ужос. sad.gif

Почему? dry.gif

Спустя 1 минута, 41 секунда (25.04.2010 - 19:49) twin написал(а):
Сможешь мне внятно объяснить, что делает эта функция и зачем?

Спустя 11 минут, 6 секунд (25.04.2010 - 20:00) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 16:49)
Сможешь мне внятно объяснить, что делает эта функция и зачем?

Проверяет включен ли get_magic_quotes_gpc.
Если да, то ищет в тексте \" \' < > и заменяет на обычную кавычку " одинарную ' и т.д.
Только в html сущности. В посте этого невидно потому что они заменились.

А если не включено, то просто обрабатывается htmlspecialchars() и всё.

Спустя 11 минут, 53 секунды (25.04.2010 - 20:12) Unlikely написал(а):
А за тем, что бы в базу не попала вот такая \" зараза. Потому что при выводе в какое нибудь текстовое поле получится вот такое вот value="\"" говно smile.gif

Спустя 13 минут, 44 секунды (25.04.2010 - 20:26) KronuS написал(а):
а почему нельзя stripslashes воспользоваться?

Спустя 18 минут, 58 секунд (25.04.2010 - 20:44) Unlikely написал(а):
Цитата (KronuS @ 25.04.2010 - 17:26)
а почему нельзя stripslashes воспользоваться?

Хм. можно и так. Но у меня ещё и < > заменяются. Что бы кокой нибудь злостный скрипт не закрался...

Спустя 6 минут, 19 секунд (25.04.2010 - 20:51) twin написал(а):
На что заменяются... И куда должен закрасться злостный скрипт?

Спустя 3 минуты, 39 секунд (25.04.2010 - 20:54) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 17:51)
На что заменяются... И куда должен закрасться злостный скрипт?

Заменяется на "Специальные символы HTML" http://arininav.ru/js/entities.htm

А скрипт может в дб закрасться. smile.gif

Спустя 4 минуты, 4 секунды (25.04.2010 - 20:59) twin написал(а):
И что он там будет делать, поведай мне, темному, в базе этой?

Спустя 1 минута, 34 секунды (25.04.2010 - 21:00) Unlikely написал(а):
То что в первом посте, это ещё недописанный скрипт.
там ещё будет абдейт дб.

Спустя 3 минуты, 29 секунд (25.04.2010 - 21:04) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 17:59)
И что он там будет делать, поведай мне, темному, в базе этой?

Ну этого я не могу знать, так как закравшегося скрипта ещё нету. blink.gif
И что то мне кажется, что вы мне откровенна мозг ипёте. dry.gif
Или я что то недопонимаю?

Спустя 6 минут, 7 секунд (25.04.2010 - 21:10) KronuS написал(а):
Unlikely, так никто ж не запрещает эти две функции вместе использовать wink.gif

Спустя 6 минут, 7 секунд (25.04.2010 - 21:16) twin написал(а):
Ты не просто недопонимаешь, а непонимаешь вообще ничего.
Скрипт, это не огромный рыжий таракан, который прокравшись в базу начнет по ночам ногти обкусывать. То, что находится в базе - обычный текст. И брички <> там точно так же вредны, как и буква Ё. Или ЙО.
Скриптом этот текст станет только в браузере пользователя. А теперь скажи, почему он не станет таковым у тебя?
Потому что ты считаешь, что текст в базу может попасть только из твоей формы. И смело легкомысленно выдаешь текст из базы пользователю не обработанным. Свято веря, что бричек в базе нет

А я вот ломану базу или шелл запущу. И столько бричек тебе накидаю туда, ты за всю жизнь их все не отловишь.

Обрабатывать текст нужно на выходе, а не на входе.
А по сему все эти замены и htmlspecialchars() при записи - мертвому припарка.

Так кто кому моск и...?

Спустя 37 секунд (25.04.2010 - 21:16) Unlikely написал(а):
Цитата (KronuS @ 25.04.2010 - 18:10)
Unlikely, так никто ж не запрещает эти две функции вместе использовать wink.gif

Так дело то не в этом smile.gif Мне надо массив обработать, а не отдельные его значения. кажется допёрло до меня, forach прикрутить нужно

Спустя 1 минута, 19 секунд (25.04.2010 - 21:18) phz написал(а):
Unlikely

Читайте внимательно http://phpforum.ru/index.php?showtopic=21213 очень интересно написано

Для работы с БД, можно пользоваться простым правилом:

На входе mysql_real_escape_string на выходе htmlspecialchars и будет самый смак

Спустя 11 минут, 44 секунды (25.04.2010 - 21:29) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 18:16)
Ты не просто недопонимаешь, а непонимаешь вообще ничего.
Скрипт, это не огромный рыжий таракан, который прокравшись в базу начнет по ночам ногти обкусывать. То, что находится в базе - обычный текст. И брички <> там точно так же вредны, как и буква Ё. Или ЙО.
Скриптом этот текст станет только в браузере пользователя. А теперь скажи, почему он не станет таковым у тебя?
Потому что ты считаешь, что текст в базу может попасть только из твоей формы. И смело легкомысленно выдаешь текст из базы пользователю не обработанным. Свято веря, что бричек в базе нет

А я вот ломану базу или шелл запущу. И столько бричек тебе накидаю туда, ты за всю жизнь их все не отловишь.

Обрабатывать текст нужно на выходе, а не на входе.
А по сему все эти замены и htmlspecialchars() при записи - мертвому припарка.

Так кто кому моск и...?

В любом же случае на входе нужно обрабатывать \" ? Или нет?


И вообще речь шла не о том, как, где, что и почему нужно обрабатывать. А о том, как сделать это с массивом. Это во первых. А во вторых, я примерно 20 дней назад взялся писать что то на php. Так что, если я чего то ещё не выучил, то мне это по боку wink.gif

Спустя 2 минуты, 12 секунд (25.04.2010 - 21:32) Unlikely написал(а):
Цитата (phz @ 25.04.2010 - 18:18)
Unlikely

Читайте внимательно http://phpforum.ru/index.php?showtopic=21213 очень интересно написано

Для работы с БД, можно пользоваться простым правилом:

На входе mysql_real_escape_string на выходе htmlspecialchars и будет самый смак

Хорошо. Прочитаю.

Спустя 8 минут, 45 секунд (25.04.2010 - 21:40) twin написал(а):
А я то чё... Я сказал что есть - ужос. Если тебе побоку - чего пристал? smile.gif
Цитата
И вообще речь шла не о том, как, где, что и почему нужно обрабатывать. А о том, как сделать это с массивом.

Eсли человек спрашивает, как ему лучше с пятого этажа спрыгнуть, с зонтиком или без зонтика... Я что должен ответить?

Спустя 11 минут, 44 секунды (25.04.2010 - 21:52) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 18:40)
А я то чё... Я сказал что есть - ужос. Если тебе побоку - чего пристал? smile.gif
Цитата
И вообще речь шла не о том, как, где, что и почему нужно обрабатывать. А о том, как сделать это с массивом.

Eсли человек спрашивает, как ему лучше с пятого этажа спрыгнуть, с зонтиком или без зонтика... Я что должен ответить?

С зонтиком biggrin.gif

Спустя 30 секунд (25.04.2010 - 21:53) Unlikely написал(а):
3. XSS
Сам по себе этот вид атаки за редким исключением, не наносит вреда самому сайту. Но он позволяет получить доступ к данным, обладая которыми, жулик может уже натворить беды. Допустим он стащит пароль в админку.
Механизм этой атаки чем то похож на SQL инъекцию. Есть даже такой термин - html-инъекция. Смысл её заключается в том, что нужно выбраться в тело тега и написать туда нужные команды на JS. Или закрыть тег и написать дальше свой. Фрейм к примеру. Или допустим прочитать куки и отправить их на снифер.

На примере такого простого фрагмента, можно убедиться, как это работает:

<form action="?" method="post">
<input type="text" name="text" value="<?php echo $_POST['text'] ?>" /><br />
<input name="ok" type="submit" />
</form>

если ввести в поле допустим такой текст:

"/> <iframe src="http://www.ruporno.org" />


Попробуйте, будет очень интересно.
Тут мы закрыли тег <input> и открыли более другой.

Бороться с этим видом атаки очень просто. Нужно данные, перед выводом в поток (в браузер) обработать функцией htmlspecialchars(). Она заменит символы разметки на эквиваленты, которые не смогут влиять на HTML и соответственно не смогут спровоцировать нежелательные действия программы.

Спустя 7 минут, 10 секунд (25.04.2010 - 22:00) Unlikely написал(а):
Я что, не этим занимался? Или нужно ещё и как то так :
$res = mysql_fetch_array($result,MYSQL_ASSOC)
$var = htmlspecialchars($res) ;
?

Спустя 4 минуты, 15 секунд (25.04.2010 - 22:04) twin написал(а):
Блин. Не в коня корм...
Читай внимательно, я устал уже.

Спустя 26 минут, 3 секунды (25.04.2010 - 22:30) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 19:04)
Блин. Не в коня корм...
Читай внимательно, я устал уже.

Ну и что у меня вышло?

<?PHP
require "clean_text.php" ;
if ($_POST) {
$var = clean_text($_POST['text']) ;
}
?>

<form action="?" method="post">
<
input type="text" name="text" value="<?php echo $var; ?>" /><br />
<
input name="ok" type="submit" />
</
form>


Вставил в инпут
"/> <iframe src="http://www.ruporno.org" />


вывело
"/> <iframe src="http://www.ruporno.org" />
преобразованную htmlspecialchars()

Спустя 6 минут, 47 секунд (25.04.2010 - 22:37) twin написал(а):
А где ты у меня там видел такую функцию clean_text()?
Ничего удивительного, что хрень вышла.

Спустя 4 минуты, 47 секунд (25.04.2010 - 22:42) Unlikely написал(а):
Цитата (twin @ 25.04.2010 - 19:37)
А где ты у меня там видел такую функцию clean_text()?
Ничего удивительного, что хрень вышла.

Так эта самая "Хрень" и должна была выйти. Дабы не пустить чистый код:

"/> <iframe src="http://www.ruporno.org" />

обратно в инпут.

Именно то, о чём у вас написано и было реализовано.

Спустя 13 минут, 12 секунд (25.04.2010 - 22:55) twin написал(а):
Ну и славно, коли так. А вообще, если серьёзно настроен, то вот это для тебя. Там есть ответы и разборы кстати. Но лучше самому денек не пожалеть.

Спустя 14 часов, 16 минут, 2 секунды (26.04.2010 - 13:11) Unlikely написал(а):
Вот так вот получилось:

<?PHP

require "db_connect.php" ;

$query = "SELECT * FROM `settings`" ;
$result = mysql_query ($query, $connection) ;

if (!$result) {
die ("Ошибка выполнения запроса.<br />mysql_error: ".mysql_error()) ;
}

$res = mysql_fetch_array ($result, MYSQL_ASSOC) ;


$cleanarr = array();


foreach ($res as $key => $value) {
$value = stripslashes($value) ;
$cleanarr[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

// echo "<pre>" ;
// print_r($cleanarr);
// echo "</pre>" ;


?>

<form action="" name = "settings" method = "post">
<
input size = "30" name = "website_title" type = "text" value = "<?=$cleanarr['website_title'];?>" /> Title<br />
<
textarea cols="25" rows="4" name = "website_description"><?=$cleanarr['website_description'];?></textarea> Description<br />
<
textarea cols="25" rows="4" name = "website_keywords"><?=$cleanarr['website_keywords'];?></textarea> Keywords<br />
<
input size = "30" name = "website_email" type = "text" value = "<?=$cleanarr['website_email'];?>" /> Email<br />
<
input name = "submit" type = "submit" value = "Save Settings" /><br />
</
form>

Спустя 44 минуты, 25 секунд (26.04.2010 - 13:55) Unlikely написал(а):
Вот только сомневаюсь что тут:

foreach ($res as $key => $value) {
$value = stripslashes($value) ;
$cleanarr[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

у меня правильно всё сделано...
Но работает.

Спустя 6 минут, 11 секунд (26.04.2010 - 14:02) twin написал(а):
$value = stripslashes($value)
это зачем?

Спустя 8 минут, 26 секунд (26.04.2010 - 14:10) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 11:02)
$value = stripslashes($value)
это зачем?

Почему то, если в таблице уже есть кавычки, в массив кавычка заносится так \" huh.gif

Спустя 25 минут, 39 секунд (26.04.2010 - 14:36) twin написал(а):
В базе не должно быть лишних бэкслэшей. В базе должно быть только то, что ввел юзер. Значит ты не победил магические кавычки перед записью.

Спустя 11 минут, 1 секунда (26.04.2010 - 14:47) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 11:36)
В базе не должно быть лишних бэкслэшей. В базе должно быть только то, что ввел юзер. Значит ты не победил магические кавычки перед записью.

Нет. Не в том дело.
Я через phpmyadmin добавил просто кавычку без слеша.
А

$result = mysql_query ($query, $connection) ;
$res = mysql_fetch_array ($result, MYSQL_ASSOC) ;

каким то образом добавила перед этой кавычкой слеш.

А магические кавычки вообще отключены.

Спустя 5 минут, 7 секунд (26.04.2010 - 14:52) twin написал(а):
Этого просто не может быть. Что то ты напутал или phpmyadmin глючит.

Спустя 7 минут, 23 секунды (26.04.2010 - 14:59) Unlikely написал(а):
phpmyadmin показывает что стоит просто кавычка.

Может в самом mysql есть какая то подобная функция?

Спустя 6 минут, 59 секунд (26.04.2010 - 15:06) twin написал(а):
Нет. Где то ты просто напартачил.

Спустя 7 минут, 11 секунд (26.04.2010 - 15:13) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 12:06)
Нет. Где то ты просто напартачил.

db_config.php

<?PHP

$BASE_URL = "" ; // Базовый УРЛ

$DB_HOST = "localhost" ; // Адрес сервера
$DB_USER = "" ; // Логин
$DB_PASS = "" ; // Пароль
$DB_NAME = "" ; // Имя базы данных

?>


db_connect.php

<?PHP

header ('Content-Type: text/html; charset=UTF-8', true) ;

require_once "db_config.php" ;

$connection = "" ;


$connection = mysql_connect ($DB_HOST, $DB_USER, $DB_PASS) ;

if (!$connection) {
die ("Ошибка соединения с базой данных.<br />mysql_error: ".mysql_error()) ;
}

else {
$db_select = mysql_select_db ($DB_NAME) ;
if (!$db_select) {
die ("Ошибка выбора базы данных.<br />mysql_error: ".mysql_error()) ;
}

}


mysql_query ("set names utf8") or die ("Set names utf8 failed") ;

?>


settings.php

<?PHP

require "db_connect.php" ;

$query = "SELECT * FROM `settings`" ;
$result = mysql_query ($query, $connection) ;

if (!$result) {
die ("Ошибка выполнения запроса.<br />mysql_error: ".mysql_error()) ;
}

$res = mysql_fetch_array ($result) ;


$cleanarr = array();


foreach ($res as $key => $value) {
//$value = stripslashes ($value) ;
$cleanarr[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

// echo "<pre>" ;
// print_r($cleanarr);
// echo "</pre>" ;


?>

<form action="" name = "settings" method = "post">
<
input size = "30" name = "website_title" type = "text" value = "<?=$cleanarr['website_title'];?>" /> Title<br />
<
textarea cols="25" rows="4" name = "website_description"><?=$cleanarr['website_description'];?></textarea> Description<br />
<
textarea cols="25" rows="4" name = "website_keywords"><?=$cleanarr['website_keywords'];?></textarea> Keywords<br />
<
input size = "30" name = "website_email" type = "text" value = "<?=$cleanarr['website_email'];?>" /> Email<br />
<
input name = "submit" type = "submit" value = "Save Settings" /><br />
</
form>


И кавычка выводится так: \"

Спустя 13 минут, 45 секунд (26.04.2010 - 15:27) twin написал(а):
Значит в базу с бэкслэшем все же записал.

Спустя 2 минуты, 7 секунд (26.04.2010 - 15:29) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 12:27)
Значит в базу с бэкслэшем все же записал.

Перепроверил 3 раза. Там просто кавычка "

Спустя 3 минуты, 42 секунды (26.04.2010 - 15:33) twin написал(а):
Перепроверь 30 раз. Потому что этого не может быть.

Спустя 18 секунд (26.04.2010 - 15:33) Unlikely написал(а):
UPDATE `unlikely`.`settings` SET `website_title` = '" Unlikely' WHERE `settings`.`id` =1;

Спустя 2 минуты, 44 секунды (26.04.2010 - 15:36) twin написал(а):
И что это?

Спустя 1 минута, 6 секунд (26.04.2010 - 15:37) Unlikely написал(а):
\&quot; Вот так выглядит кавычка после

foreach ($res as $key => $value) {
//$value = stripslashes ($value) ;
$cleanarr[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

Спустя 1 минута, 46 секунд (26.04.2010 - 15:39) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 12:36)
И что это?

Это phpmyadmin вывел мне то, что я поменял. То есть добавил просто кавычку.

Спустя 1 минута, 3 секунды (26.04.2010 - 15:40) twin написал(а):
Ну значит у тебя Барабашка завелся в компе.
Зтого просто не может быть.

Спустя 5 минут, 20 секунд (26.04.2010 - 15:45) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 12:40)
Ну значит у тебя Барабашка завелся в компе.
Зтого просто не может быть.

Этого просто не может быть.
Даже если у меня на компе и есть какие то барабашки, они никак не могут повлиять.

Спустя 6 минут, 32 секунды (26.04.2010 - 15:52) twin написал(а):
Я тут взял пару уроков телепатии... А скажи, сколько строк в таблице?
Вот так попробуй ка запрос
$query = "SELECT * FROM `settings` WHERE `id` = 1 " ;

Спустя 2 минуты, 16 секунд (26.04.2010 - 15:54) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 12:52)
Я тут взял пару уроков телепатии... А скажи, сколько строк в таблице?
Вот так попробуй ка запрос
$query = "SELECT * FROM `settings` WHERE `id` = 1 " ;

1 строка.

Спустя 3 минуты, 41 секунда (26.04.2010 - 15:58) Unlikely написал(а):
$query = "SELECT * FROM `settings` WHERE `id` = 1 " ;

Никак не повлияло на результат.

Спустя 6 минут, 32 секунды (26.04.2010 - 16:04) twin написал(а):
Ну это уже просто неправда. Или ты издеваешься или выкинь свой комп.

Спустя 5 минут, 14 секунд (26.04.2010 - 16:09) twin написал(а):
Вот дамп
CREATE TABLE `test` (
`text` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `test`
--

INSERT INTO `test` VALUES ('
""""""""""');

Вот скрипт
     header ('Content-Type: text/html; charset=UTF-8', true) ;

require_once "db_config.php" ;

$result = mysql_query ("SELECT `test` FROM `test`") ;

echo mysql_result ($result, 0) ;


Что покажет?

Спустя 9 минут, 28 секунд (26.04.2010 - 16:19) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 13:04)
Ну это уже просто неправда. Или ты издеваешься или выкинь свой комп.

Я не у себя на компе этим занимаюсь. А на хостинге.

Спустя 46 секунд (26.04.2010 - 16:20) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 13:09)
Вот дамп
CREATE TABLE `test` (
`text` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `test`
--

INSERT INTO `test` VALUES ('
""""""""""');

Вот скрипт
     header ('Content-Type: text/html; charset=UTF-8', true) ;

require_once "db_config.php" ;

$result = mysql_query ("SELECT `test` FROM `test`") ;

echo mysql_result ($result, 0) ;


Что покажет?

Ща проверю.

Спустя 6 минут, 46 секунд (26.04.2010 - 16:26) Unlikely написал(а):
Warning: mysql_result(): supplied argument is not a valid MySQL result resource

Спустя 3 минуты, 48 секунд (26.04.2010 - 16:30) Unlikely написал(а):
Была ошибка в запросе.
"SELECT `test` FROM `test`"
сделал
"SELECT `text` FROM `test`"

вывело
\"\"\"\"\"\"\"\"\"\"

Спустя 1 минута, 39 секунд (26.04.2010 - 16:32) twin написал(а):
Пипец хостинг... Кто это, если не секрет?
Ну тут тебе придется действительно раздевать. Только если придется переносить на нормальный, будет ляп.

Спустя 15 минут, 26 секунд (26.04.2010 - 16:47) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 13:32)
Пипец хостинг... Кто это, если не секрет?
Ну тут тебе придется действительно раздевать. Только если придется переносить на нормальный, будет ляп.

Да хостинг локальный. То есть провайдер даёт хост бесплатно, если хочешь.
Написал вебмастеру ихнему, возможно это просто небольшая ошибка, или какое то ограничение.

А ляп-неляп... Ничего страшного не будет, просто функция проверит наличие этих слешей. Если не будет, значит ничего не сделает.


Тут то:

foreach ($res as $key => $value) {
$value = stripslashes ($value) ;
$cleanarr[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

у меня всё правильно написано? Или как то по другому нужно всё это делать?

Спустя 7 минут, 40 секунд (26.04.2010 - 16:55) twin написал(а):
Ну вообще то особо ничего страшного, просто функция съесть и нужные бэкслэши. А они бывают очень нужны...
Вот это лишние детали , ENT_QUOTES, "UTF-8", false
Вполне годится и просто
$cleanarr[$key] = htmlspecialchars ($value);
Отсюда следует, что если бы не дурацкий хостинг, можно было бы и без цикла
$res = array_map('htmlspecialchars', $res);

И лучше юзать не mysql_fetch_array() а mysql_fetch_assoc()

Спустя 19 минут, 58 секунд (26.04.2010 - 17:15) Unlikely написал(а):
Цитата (twin @ 26.04.2010 - 13:55)
Ну вообще то особо ничего страшного, просто функция съесть и нужные бэкслэши. А они бывают очень нужны...
Вот это лишние детали , ENT_QUOTES, "UTF-8", false
Вполне годится и просто
$cleanarr[$key] = htmlspecialchars ($value);
Отсюда следует, что если бы не дурацкий хостинг, можно было бы и без цикла
$res = array_map('htmlspecialchars', $res);

И лучше юзать не mysql_fetch_array() а mysql_fetch_assoc()

Всё ясно. Спасибо большое за потраченное на меня время smile.gif

Спустя 1 час, 47 минут, 52 секунды (26.04.2010 - 19:03) Unlikely написал(а):
Далее.

Вот сделал сохранение информации при нажатии на сабмит.

if ($_POST) {
foreach ($_POST as $key => $value) {
$value = stripslashes ($value) ;
$_POST[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

$query = "UPDATE `".$DB_NAME."`.`settings` SET `website_title` = '".$_POST['website_title']."',
`website_description` = '"
.$_POST['website_description']."',
`website_keywords` = '"
.$_POST['website_keywords']."',
`website_email` = '"
.$_POST['website_email']."' WHERE `settings`.`id` =1" ;

mysql_query ($query, $connection) ;

echo $query ;

}


Всё в принципе работает.
Вот только обратно данные в форму возвращаются только если обратиться к скрипту ещё 1 раз.
Я так понимаю, нужно делать ещё 1 запрос SELECT * FROM `settings` WHERE `id` = 1
и опять всё выводить в форму?

Спустя 16 часов, 39 минут, 40 секунд (27.04.2010 - 11:42) Unlikely написал(а):
magic_quotes_runtime
Оказалось включенным. huh.gif

Спустя 10 минут, 58 секунд (27.04.2010 - 11:53) Unlikely написал(а):
Результат $res = array_map('htmlspecialchars', $res);
Если в бд уже содержится преобразованный символ функцией htmlspecialchars то он преобразуется снова и получается что то вроде & amp ; quot ;

Спустя 2 минуты, 49 секунд (27.04.2010 - 11:56) Семён написал(а):
Если правильно понял, что тебе нужно:
htmlspecialchars_decode()

Спустя 6 минут, 26 секунд (27.04.2010 - 12:03) Unlikely написал(а):
Не, нужно при выводе данных из бд, преобразовать всякие символы htmlspecialchars. И не преобразовывать по новой & quot ; вот такие.


foreach( $res as $key => $value ) {
$res[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}

Так, всё работает.

Спустя 4 минуты (27.04.2010 - 12:07) Unlikely написал(а):
И тоже самое при записи данных в бд

foreach( $_POST as $key => $value ) {
$_POST[$key] = htmlspecialchars ($value, ENT_QUOTES, "UTF-8", false) ;
}
Быстрый ответ:

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