Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как применить htmlspecialchars сразу ко всему выводу из БД
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Как применить htmlspecialchars сразу ко всему выводу из БД

Страниц (1): [1]
 

1. mikpankov - 19 Июня, 2011 - 21:44:58 - перейти к сообщению
Для защиты, при выводе из БД использую
PHP:
скопировать код в буфер обмена
  1.  
  2. $myrow=mysql_fetch_row($sql запрос вроде select 1,2,...999)
  3. $myrow[1]=htmlspecialchars($myrow[1]);
  4. $myrow[2]=htmlspecialchars($myrow[2]);
  5. $myrow[999...]
  6. ...
  7. \\Вывод:
  8.  
  9. echo " тут выводим первое данное $myrow[1], затем второе $myrow[2] ...$myrow[999]"
  10. ...
  11.  


Вопрос 1: Можно ли написать массив вроде
???

Вопрос 2: Я так понимаю, что htmlspeсialchars достаточно для защиты вывода из БД?

Спасибо.
2. EuGen - 19 Июня, 2011 - 22:05:46 - перейти к сообщению
1. http://www.php.su/functions/?array_map
2. Зависит от того, где будут использоаться данные.
3. OrmaJever - 19 Июня, 2011 - 22:26:37 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $myrow=mysql_fetch_row($sql запрос вроде select 1,2,...999)
  2.  
  3. foreach($myrow as &$v) $v = htmlspecialchars($v);
  4.  

а если так? Закатив глазки
4. mikpankov - 19 Июня, 2011 - 23:01:03 - перейти к сообщению
EuGen пишет:
http://www.php.su/functions/?array_map


Спасибо, изучу днём на свежую голову)

EuGen пишет:
Зависит от того, где будут использоаться данные.


Данные используются для публичного просмотра.


OrmaJever пишет:
PHP:
скопировать код в буфер обмена

$myrow=mysql_fetch_row($sql запрос вроде select 1,2,...999)

foreach($myrow as &$v) $v = htmlspecialchars($v);



а если так? Закатив глазки


Если так, то unexpected '&', expecting T_VARIABLE or '$' in ...тра-та-та.php line 14
строка 14 прямо под этим:

Для чего используется символ & в данном случае?
5. DeepVarvar - 19 Июня, 2011 - 23:04:30 - перейти к сообщению

А для чего "&" - это ссылка - в соседней теме обсуждается сейчас
6. mikpankov - 19 Июня, 2011 - 23:15:03 - перейти к сообщению
DeepVarvar пишет:
А для чего "&" - это ссылка - в соседней теме обсуждается сейчас


Изучил соседнюю тему, понял, зачем &.
Но всё равно ошибка почему-то вылазит.
если использовать без &, то выводит какие-то отдельные буквы

например:
PHP:
скопировать код в буфер обмена
  1. echo $v[1] $v[2] v[3] $v[4]


дают соответственно "о г а н"
7. EuGen - 19 Июня, 2011 - 23:18:00 - перейти к сообщению
В данном примере лучше все же собрать массив и потом уже с ним работать.

mikpankov пишет:
$v = htmlspecialchars($v);

- не стоит забывать, что $v в этом примере есть массив, содержащий поля из таблицы.

А собирать массив лучше потому, что потом может потребоваться еще что-нибудь, кроме вывода.
8. OrmaJever - 19 Июня, 2011 - 23:18:27 - перейти к сообщению
mikpankov пишет:
Если так, то unexpected '&', expecting T_VARIABLE or '$' in ...тра-та-та.php line 14

возможно BOM символы? сохраните в кодировке без BOM
9. mikpankov - 19 Июня, 2011 - 23:30:49 - перейти к сообщению
OrmaJever пишет:
mikpankov пишет:
Если так, то unexpected '&', expecting T_VARIABLE or '$' in ...тра-та-та.php line 14

возможно BOM символы? сохраните в кодировке без BOM


хм.. Все файлы без BOM.
У меня windows-1251.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. foreach($myrow as $v) $v = htmlspecialchars($v);
  2.  
  3. echo "$v";


Даёт содержимое последнего столбца из выбранных.
А $v[1] соответственно его первую букву.

Мне же нужно получить это содержимое таким образом: $v[5]
10. OrmaJever - 20 Июня, 2011 - 00:33:41 - перейти к сообщению
я для этого и написал & перед $v. Без & результат совсем другой. Тогда можно переписать так
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. foreach($myrow as $k => $v) $arr[$k] = htmlspecialchars($v);
  3. print_r($arr);

но место этого лутше использовать array_map() как писал EuGen
и кстате в примере со сылкой нужно выводить не $v а $myrow
11. mikpankov - 20 Июня, 2011 - 11:52:04 - перейти к сообщению
OrmaJever пишет:
я для этого и написал & перед $v. Без & результат совсем другой. Тогда можно переписать так
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. foreach($myrow as $k => $v) $arr[$k] = htmlspecialchars($v);
  3. print_r($arr);



Это работает отлично!

А вот как должен выглядеть вариант с array_map() в моём случае, понять не могу.
12. OrmaJever - 20 Июня, 2011 - 12:05:18 - перейти к сообщению
Да довольно не сложно. В описании функции и пример хороший есть
PHP:
скопировать код в буфер обмена
  1.  
  2. $new_arr = array_map('htmlspecialchars', $myrow);
  3. print_r($new_arr);
  4. // если $myrow больше не где не используется лутше написать так
  5. $myrow = array_map('htmlspecialchars', $myrow);
  6. print_r($myrow);
13. mikpankov - 20 Июня, 2011 - 12:12:11 - перейти к сообщению
OrmaJever пишет:
Да довольно не сложно. В описании функции и пример хороший есть
PHP:
скопировать код в буфер обмена
  1.  
  2. $new_arr = array_map('htmlspecialchars', $myrow);
  3. print_r($new_arr);
  4. // если $myrow больше не где не используется лутше написать так
  5. $myrow = array_map('htmlspecialchars', $myrow);
  6. print_r($myrow);


Там в описании вместо htmlspecialchars другая функция прописана. Нужно было просто сообразить заменить одно на другое. Сам бы вряд ли догадался.
вы мне открыли глаза на то, что функции можно и таким образом использовать, а не только htmlspecialchars($b)

Спасибо огромное всем! Прекрасно работают оба варианта.

 

Powered by ExBB FM 1.0 RC1