За последние 24 часа нас посетил 17401 программист и 1718 роботов. Сейчас ищут 1515 программистов ...

Экранированние выводимых данных

Тема в разделе "PHP и базы данных", создана пользователем SiUna, 5 май 2012.

  1. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Подскажите как правильно заэкранирование выводимые данные из БД.
    В базе у меня могут хранится теги или например <!--текст-->, что не выводится, потому что комментарий.
    Код (Text):
    1.  
    2. for ($i=1; $i<$n+1; $i++)
    3.          {
    4.            $sql_data = mysql_fetch_array($row1);
    5. echo "<b>Вопрос № ".$record.": </b>";
    6. echo $sql_data['question']."<br />";
    7. echo "<b><u>Правильный ответ:</u></b> 1) ".$sql_data['r_answer']."<br />";
    8. echo "2) ".$sql_data['w_answer1']."<br />";
    9. echo "3) ".$sql_data['w_answer2']."<br />";
    10. echo "4) ".$sql_data['w_answer3']."<br />";
    11. echo "5) ".$sql_data['w_answer4']."<br />";
    12. echo "<br />";
    13. $record=$record+1;
    14. }
    Если нетрудно какую функцию и как использовать примером. Спасибо
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  4. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Несовсем поняла как её вставлять в запрос:
    Код (Text):
    1.  
    2. $query2 = "SELECT
    3. mysql_real_escape_string('question'),
    4. mysql_real_escape_string('r_answer'),
    5. mysql_real_escape_string('w_answer1'),
    6. mysql_real_escape_string('w_answer2'),
    7. mysql_real_escape_string('w_answer3'),
    8. mysql_real_escape_string('w_answer4')
    9. FROM `test`
    10. LIMIT ".$records.", $N";
    Так не работает)
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Да вроде тут вопрос стоял как раз про экранирование выводимых из б.д. данных )
     
  6. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Да мне пример нужен именно на запросе, а то я непонимаю-_- я уже так попробовала:
    Код (Text):
    1.  
    2. $query2 = "SELECT
    3. `question` as quest,
    4. `r_answer` as r_an,
    5. `w_answer1` as w_an1,
    6. `w_answer2` as w_an2,
    7. `w_answer3` as w_an3,
    8. `w_answer4 as w_an4  
    9. FROM `test` LIMIT ".$records.", $N,
    10. mysql_real_escape_string($quest),
    11. mysql_real_escape_string($r_an),
    12. mysql_real_escape_string($w_an1),
    13. mysql_real_escape_string($w_an2),
    14. mysql_real_escape_string($w_an3),
    15. mysql_real_escape_string($w_an4)";
    Оно просто не работает ошибку выдает что чето с аргументами, может нетуда ставлю, но по тем примерам немогу понять как работает-_-
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Объясни ещё раз, чего хочешь добиться? Чтобы если в базе данных есть html-теги - они печатались на экране в браузере, а не выполнялись им как команды? Или я неправильно понял вопрос?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    редактор используй нормальный и таких вопросов не будет. =)
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    для экранирования вводимых в базу данных (чтобы в данных одиночная кавычка не проскочила — причина sql-injection) применяют mysql_real_escape_string
    Код (PHP):
    1. $sql = "insert into x(fld) values('{$s}')"; // скажи коварным кавычкам нет!
    2.  
    для экранирования выводимых на страницу данных (для нейтрализации тегов html) применяют htmlspecialchars
    Код (PHP):
    1. echo '<img alt="' . htmlspecialchars($fld, ENT_QUOTES, 'UTF-8') . '" src="blablabla" />'; // здесь мы страхуемся от тегов и от кавычек
    2.  
     
  10. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Да, именно так и нужно.
    А можно это на примере запроса вывода из базы, а то я не совсем понимаю куда именно эту функцию ставить(
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Эту функцию применять при выводе данных в браузер :)
    Код (PHP):
    1. $res = mysql_query('SELECT `name`, `city` FROM `users`');
    2. if($res and mysql_num_rows($res) > 0) {
    3.     while($row = mysql_fetch_assoc($res)) {
    4.         echo('Имя: ' . htmlspecialchars($row['name']) . ', город: ' . htmlspecialchars($row['city']));
    5.     }
    6. } 
     
  12. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Спасибо большое!
     
  13. FalkoN

    FalkoN Активный пользователь

    С нами с:
    1 апр 2011
    Сообщения:
    184
    Симпатии:
    0
    Адрес:
    Екатеринбург
    ваще нефиг в базу теги засовывать! )
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) с чего это вдруг?