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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как применить htmlspecialchars сразу ко всему выводу из БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
mikpankov
Отправлено: 19 Июня, 2011 - 21:44:58
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Для защиты, при выводе из БД использую
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 достаточно для защиты вывода из БД?

Спасибо.

(Отредактировано автором: 19 Июня, 2011 - 21:45:30)

 
 Top
EuGen Администратор
Отправлено: 19 Июня, 2011 - 22:05:46
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




1. http://www.php.su/functions/?array_map
2. Зависит от того, где будут использоаться данные.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever Модератор
Отправлено: 19 Июня, 2011 - 22:26:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




PHP:
скопировать код в буфер обмена
  1. $myrow=mysql_fetch_row($sql запрос вроде select 1,2,...999)
  2.  
  3. foreach($myrow as &$v) $v = htmlspecialchars($v);
  4.  

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

(Отредактировано автором: 19 Июня, 2011 - 22:26:54)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
mikpankov
Отправлено: 19 Июня, 2011 - 23:01:03
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




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 прямо под этим:

Для чего используется символ & в данном случае?
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Июня, 2011 - 23:04:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)





А для чего "&" - это ссылка - в соседней теме обсуждается сейчас
 
 Top
mikpankov
Отправлено: 19 Июня, 2011 - 23:15:03
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
А для чего "&" - это ссылка - в соседней теме обсуждается сейчас


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

например:


дают соответственно "о г а н"
 
 Top
EuGen Администратор
Отправлено: 19 Июня, 2011 - 23:18:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




В данном примере лучше все же собрать массив и потом уже с ним работать.

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

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

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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever Модератор
Отправлено: 19 Июня, 2011 - 23:18:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




mikpankov пишет:
Если так, то unexpected '&', expecting T_VARIABLE or '$' in ...тра-та-та.php line 14

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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
mikpankov
Отправлено: 19 Июня, 2011 - 23:30:49
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




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]
 
 Top
OrmaJever Модератор
Отправлено: 20 Июня, 2011 - 00:33:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




я для этого и написал & перед $v. Без & результат совсем другой. Тогда можно переписать так
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. foreach($myrow as $k => $v) $arr[$k] = htmlspecialchars($v);
  3. print_r($arr);

но место этого лутше использовать array_map() как писал EuGen
и кстате в примере со сылкой нужно выводить не $v а $myrow

(Отредактировано автором: 20 Июня, 2011 - 00:35:17)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
mikpankov
Отправлено: 20 Июня, 2011 - 11:52:04
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




OrmaJever пишет:
я для этого и написал & перед $v. Без & результат совсем другой. Тогда можно переписать так
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. foreach($myrow as $k => $v) $arr[$k] = htmlspecialchars($v);
  3. print_r($arr);



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

А вот как должен выглядеть вариант с array_map() в моём случае, понять не могу.
 
 Top
OrmaJever Модератор
Отправлено: 20 Июня, 2011 - 12:05:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Да довольно не сложно. В описании функции и пример хороший есть
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);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
mikpankov
Отправлено: 20 Июня, 2011 - 12:12:11
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




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)

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

(Отредактировано автором: 20 Июня, 2011 - 12:15:50)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB