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 :: вывод из базы и <input>
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Такая проблемма! Есть админка, в которой добавляются и редактируются статьи...
Проблемма в том, что при добавлении статьи, к примеру в при вводе поля title, возникают траблы с одинарными кавычками! Тоесть они нормально вводятся, заносятся в базу, без проблем выводятся на сайте, но когда открыть форму редактирования этой статьи, то из базы эта форма заполняться не корректно... Вопрос в том что одинарные кавычки не выводяться в строку вида
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Тоесть в базе кавычки есть и на сайте выводяться, а в эту форму не хотят
Попробуйте прокэранировать данный текст с точки зрения HTML-сущностей - а именно применить функцию htmlentities для выводимого текста подставляемого в input
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
garvey
Отправлено: 16 Июня, 2010 - 16:41:08
Частый посетитель
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010 Откуда: Minsk
Попробуйте прокэранировать данный текст с точки зрения HTML-сущностей - а именно применить функцию htmlentities для выводимого текста подставляемого в input
$result_cat = mysql_query("SELECT * FROM base WHERE id='$id'",$db);
if (!$result_cat){
print "<div class='error'>Произошла ошибка при выводе информации. Сообщите Администратору о данной проблеме Admin@master.com.ua.<br><strong>Код ошибки:</strong>";
include ("blocks/footer.php");
exit(mysql_error());}
if(mysql_num_rows($result_cat) > 0){
$myrow_cat = mysql_fetch_array($result_cat);}
else {
print "<div class='error'>Ошибка вывода данных! В таблице нет инфорации!</div>";
include ("blocks/footer.php");
exit();}
if ($info==1){print"<div class='post_nice'><font class='post_nice_text'>Информация успешно обновлена!</font></div><br>";}
if ($info==2){print"<div class='post_bed'><font class='post_bed_text'>Информация не обновлена!</font></div><br>";}
if ($info==3){print"<div class='post_bed'><font class='post_bed_text'>Поле title может содержать не более 90 символов</font></div><br>";}
$result_ed = mysql_query("SELECT * FROM cat",$db);
if (!$result_ed){
print "<div class='error'>Произошла ошибка при выводе информации. Сообщите Администратору о данной проблеме Admin@master.com.ua.<br><strong>Код ошибки:</strong>";
include ("blocks/footer.php");
exit(mysql_error());}
if(mysql_num_rows($result_ed) > 0){
$myrow_ed = mysql_fetch_array($result_ed);}
else {
print "<div class='error'>Ошибка вывода данных! В таблице нет инфорации!</div>";
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Ну тоже... одинарные кавычки не выводяться
Вообще в таких случаях кавычки могут теряться на различных этапах - например в PHP-скрипте в неправильном экранировании или подстановке данных при выводе - или уже в самом HTML-документе по причине того что они при выводе не были прокэранированы должным образом и были интерпретированы как границы аттрибутов - ведь в HTML-аттрибутах у тегов действуют свои правила экранирования и обратные слеши здесь то сути игнорируются
Поэтому для диагностики можно посмотреть сам исходный HTML код - а именно проверить прсутствует ли в нужном месте одинарные кавычки и каким образом они вставлены и проэкранированы Если у вас внутри аттрибута так и имеются сами символы одиночных кавычек заместо их HTML-кодированных эквивалентов - то вероятно функция htmlentities не сработала по причине несовпадения кодировок выводимого текста и самих представлений данных в PHP-скрипте
Поэтому попробуйте использовать следующий синтаксис $tt = htmlentities($myrow_cat['title'],ENT_QUOTES,"Кодировка выводимых данных"); - после чего кавычки должны проэкранироваться правильно и ваша форма заработает
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 17 Июня, 2010 - 18:02:02
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Спасибо... работает $tt = htmlentities($myrow_cat['title'],ENT_QUOTES,"windows-1251");
ну даже в таком виде , без указания кодировки, работало $tt = htmlentities($myrow_cat['title'],ENT_QUOTES);
maroz89
Отправлено: 17 Июня, 2010 - 21:32:32
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
maroz89 пишет:
Вообще в таких случаях кавычки могут теряться на различных этапах - например в PHP-скрипте в неправильном экранировании или подстановке данных при выводе
мм.. еще такой вопрос, а как нужно экранировать данные при выводе? При вводе использую mysql_real_escape_string.. А при выводе.. ну код вы сами видете... Просто из базы вставляю и все!! Обьясните плиз!!!
isle
Отправлено: 18 Июня, 2010 - 03:37:35
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
Я больше как-то аналог использую - htmlspecialchars.
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010 Откуда: Minsk
Помог: 3 раз(а)
Цитата:
Я больше как-то аналог использую - htmlspecialchars.
При занесении в базу нужно ОБЯЗАТЕЛЬНО использовать mysql_real_escape_string. Это безопасно и правильно. И в базе у нас не хранятся разные кавычки. А выводится в зависимости от настроек "магических кавычек".
Если они выключены - перед выводом обрабатывать строку не надо.
Если включены - stripslashes.
Но лучше отключайте. Все равно в php 6 их не будет.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Спасибо... работает $tt = htmlentities($myrow_cat['title'],ENT_QUOTES,"windows-1251");
Ну даже в таком виде , без указания кодировки, работало $tt = htmlentities($myrow_cat['title'],ENT_QUOTES);
Пожалуйста! Вообще при выводе определенных спецсимволов требуется их экранирование - однако тип такого экранирования зависит от конкретного интерпретатора или парсера Например чтобы добиться аналогичного автоматического HTML-экранирования можно посмтуить следующим образом - вывести данные в невидимый div-тег и из нег в помощью JS-скрипта перенести данные в value соответствующей формы - в таком случае спецсимволы уже не будут является частью реального HTML-кода и обращение будет уже к самому представлению данных
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 18 Июня, 2010 - 13:35:29
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
всем огромное спасибо..
JustUserR
Отправлено: 19 Июня, 2010 - 10:39:40
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
isle пишет:
Можно так:
$a = stripslashes($b);
$b = addslashes($a);
Сделать именно таким образом обход опции magic_quotes без явного получения информаци была ли она включена не получится - дело в том что функция stripslashes производит снятие еще одного уровня экранирования - и соответственно если в вашем реальном представлении строки были символы типа слеша и кавычки например для экранированного вывода в JS-коде - поэтому если magic_quotes уже была выключена то работа с такими данными может привести к ошибке
Также функции addslashes и mysql_real_escape_string это вовсе не одно и то же - особенно в случае если кодировка и сравнение в БД отличаются от кодировки различных данных в PHP-скрипте
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.