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>

 PHP.SU

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


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

> Без описания
maroz89
Отправлено: 16 Июня, 2010 - 13:46:09
Post Id


Новичок


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


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




Такая проблемма! Есть админка, в которой добавляются и редактируются статьи...
Проблемма в том, что при добавлении статьи, к примеру в при вводе поля title, возникают траблы с одинарными кавычками! Тоесть они нормально вводятся, заносятся в базу, без проблем выводятся на сайте, но когда открыть форму редактирования этой статьи, то из базы эта форма заполняться не корректно... Вопрос в том что одинарные кавычки не выводяться в строку вида
CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type='text' value='' name='old_login' size='60'>
  2.  

тоесть в базе кавычки есть и на сайте выводяться, а в эту форму не хотят! Пробовал менять инпат на текст
CODE (htmlphp):
скопировать код в буфер обмена
  1. <textarea  cols='85' rows='20' name='text' type='text'></textarea>

Нормально выводятся, а вот в инпат не хотят никак! Сравнение формы редактирования и базы показа на картинке! Прошу помощи!

П.С. извинясь заренее, может вопрос более относится к разделу хтмл...
Прикреплено изображение (Нажмите для увеличения)
1.jpg

(Отредактировано автором: 16 Июня, 2010 - 13:47:30)

 
 Top
JustUserR
Отправлено: 16 Июня, 2010 - 13:55:22
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




maroz89 пишет:
Тоесть в базе кавычки есть и на сайте выводяться, а в эту форму не хотят
Попробуйте прокэранировать данный текст с точки зрения HTML-сущностей - а именно применить функцию htmlentities для выводимого текста подставляемого в input


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
garvey
Отправлено: 16 Июня, 2010 - 16:41:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




PHP:
скопировать код в буфер обмена
  1. echo "<input type='text' value='".$variable."' name='old_login' size='60'>";
 
 Top
maroz89
Отправлено: 16 Июня, 2010 - 17:17:27
Post Id


Новичок


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


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




garvey пишет:
PHP:
скопировать код в буфер обмена
echo "<input type='text' value='".$variable."' name='old_login' size='60'>";


так и есть
CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type='text' name='title' Value='".$myrow_cat['title']."' size='50'>

JustUserR пишет:
Попробуйте прокэранировать данный текст с точки зрения HTML-сущностей - а именно применить функцию htmlentities для выводимого текста подставляемого в input

сделал так
CODE (htmlphp):
скопировать код в буфер обмена
  1. ..............
  2.  
  3. $num_title=strlen($myrow_cat['title']);
  4. $tt = htmlentities($myrow_cat['title']);
  5.  
  6. print
  7. "<table border='0' width='730' class='adm_text'>
  8.  <tr><td ><form action='Update_change.php' method='post' name='form_ad' style='margin-left:10px'>
  9. <img  src='img/pencil_add.jpg'> Введите оглавление (не более 68 символов)<br><input type='text' name='title' Value='".$tt."' size='50'>";print" ".$num_title."  символа(ов)<br>";
  10. .......

ну тоже... одинарные кавычки не выводяться

Привожу весь код редактирования заметок
CODE (htmlphp):
скопировать код в буфер обмена
  1. /*Форма редактирования заметок----------------------------------------------------------------------------------*/
  2. case(1);
  3. $result_cat = mysql_query("SELECT * FROM base WHERE id='$id'",$db);
  4. if (!$result_cat){
  5. print "<div class='error'>Произошла ошибка при выводе информации. Сообщите Администратору о данной проблеме Admin@master.com.ua.<br> <strong>Код ошибки:</strong>";
  6. include ("blocks/footer.php");
  7. exit(mysql_error());}
  8. if(mysql_num_rows($result_cat) > 0){
  9. $myrow_cat = mysql_fetch_array($result_cat);}
  10. else {
  11. print "<div class='error'>Ошибка вывода данных! В таблице нет инфорации!</div>";
  12. include ("blocks/footer.php");
  13. exit();}
  14. if ($info==1){print"<div class='post_nice'><font class='post_nice_text'>Информация успешно обновлена!</font></div><br>";}
  15. if ($info==2){print"<div class='post_bed'><font class='post_bed_text'>Информация не обновлена!</font></div><br>";}
  16. if ($info==3){print"<div class='post_bed'><font class='post_bed_text'>Поле title может содержать не более 90 символов</font></div><br>";}
  17. $num_title=strlen($myrow_cat['title']);
  18. $tt = htmlentities($myrow_cat['title']);
  19. print
  20. "<table border='0' width='730' class='adm_text'>
  21.  <tr><td ><form action='Update_change.php' method='post' name='form_ad' style='margin-left:10px'>
  22. <img  src='img/pencil_add.jpg'> Введите оглавление (не более 68 символов)<br><input type='text' name='title' Value='".$tt."' size='50'>";print" ".$num_title."  символа(ов)<br>";
  23. print"<img  src='img/gen.png'> Введите ключевые фразы<br><input type='text' name='meta_d' Value='".$myrow_cat['meta_d']."' size='60'><br>
  24.  
  25. <img  src='img/gen.png'> Введите ключевые слова<br><input type='text' name='meta_k' Value='".$myrow_cat['meta_k']."' size='60'><br>
  26. <img  src='img/text_align_left.jpg'>Введите краткое описание<br>
  27. <input type='hidden' name='id' value='".$id."'>
  28. <input type='hidden' name='menu' value='".$menu."'>
  29. <textarea  cols='85' rows='5' name='description'  type='text'>".$myrow_cat['description']."</textarea>
  30. <br>
  31. <img  src='img/text_align_left.jpg'>Введите текст заметки<br>
  32. <textarea  cols='85' rows='20' name='text' type='text'>".$myrow_cat['text']."</textarea>
  33. <br>
  34. <img  src='img/link.png'> Введите путь к картинке<br><input type='text' size='50' name='mini_img' Value='".$myrow_cat['mini_img']."'><br>
  35. <img  src='img/silhouette.png'> Введите автора статьи<br><input type='text' size='50' name='author' Value='".$myrow_cat['author']."'><br><br>
  36. <center>Выберете категорию для заметки
  37. <img  src='img/category.png'> <select name='category' >";
  38.  
  39. $result_ed = mysql_query("SELECT * FROM cat",$db);
  40. if (!$result_ed){
  41. print "<div class='error'>Произошла ошибка при выводе информации. Сообщите Администратору о данной проблеме Admin@master.com.ua.<br> <strong>Код ошибки:</strong>";
  42. include ("blocks/footer.php");
  43. exit(mysql_error());}
  44. if(mysql_num_rows($result_ed) > 0){
  45. $myrow_ed = mysql_fetch_array($result_ed);}
  46. else {
  47. print "<div class='error'>Ошибка вывода данных! В таблице нет инфорации!</div>";
  48. include ("blocks/footer.php");
  49. exit();}
  50.  
  51. Do {
  52. if($myrow_ed['id']==$myrow_cat['cat']){
  53. printf ("<option value='%s' selected>%s</option>",$myrow_ed['id'],$myrow_ed['cat_name']);
  54. }
  55. Else{
  56. printf ("<option value='%s'>%s</option>",$myrow_ed['id'],$myrow_ed['cat_name']);
  57. }}
  58. While($myrow_ed  = mysql_fetch_array($result_ed));
  59. print"</select>
  60.  &nbsp;&nbsp;&nbsp;  <img  src='img/date.png'> Дата добавления <input type='text' value='".$myrow_cat['date']."' name='date'><br></center>
  61. </td>
  62. </tr></table><br>
  63. <center><input type='submit' class='search_but'  value='         Обновить         ' name='button'></center>
  64. </form>";
  65. break;

(Отредактировано автором: 16 Июня, 2010 - 17:23:20)

 
 Top
JustUserR
Отправлено: 17 Июня, 2010 - 10:34:16
Post Id



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


Покинул форум
Сообщений всего: 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/
 
 Top
maroz89
Отправлено: 17 Июня, 2010 - 18:02:02
Post Id


Новичок


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


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




Спасибо... работает $tt = htmlentities($myrow_cat['title'],ENT_QUOTES,"windows-1251");
ну даже в таком виде , без указания кодировки, работало $tt = htmlentities($myrow_cat['title'],ENT_QUOTES);
 
 Top
maroz89
Отправлено: 17 Июня, 2010 - 21:32:32
Post Id


Новичок


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


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




maroz89 пишет:
Вообще в таких случаях кавычки могут теряться на различных этапах - например в PHP-скрипте в неправильном экранировании или подстановке данных при выводе


мм.. еще такой вопрос, а как нужно экранировать данные при выводе? При вводе использую mysql_real_escape_string.. А при выводе.. ну код вы сами видете... Просто из базы вставляю и все!! Обьясните плиз!!!
 
 Top
isle
Отправлено: 18 Июня, 2010 - 03:37:35
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




Я больше как-то аналог использую - htmlspecialchars.

Можно так:

$a = stripslashes($b);
$b = addslashes($a);

(Отредактировано автором: 18 Июня, 2010 - 03:39:41)

 
 Top
garvey
Отправлено: 18 Июня, 2010 - 10:45:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Цитата:
Я больше как-то аналог использую - htmlspecialchars.

При занесении в базу нужно ОБЯЗАТЕЛЬНО использовать mysql_real_escape_string. Это безопасно и правильно. И в базе у нас не хранятся разные кавычки. А выводится в зависимости от настроек "магических кавычек".
Если они выключены - перед выводом обрабатывать строку не надо.
Если включены - stripslashes.

Но лучше отключайте. Все равно в php 6 их не будет.
 
 Top
JustUserR
Отправлено: 18 Июня, 2010 - 12:52:13
Post Id



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


Покинул форум
Сообщений всего: 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/
 
 Top
maroz89
Отправлено: 18 Июня, 2010 - 13:35:29
Post Id


Новичок


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


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




всем огромное спасибо.. Подмигивание
 
 Top
JustUserR
Отправлено: 19 Июня, 2010 - 10:39:40
Post Id



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


Покинул форум
Сообщений всего: 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/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB