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 :: Проблема с insert [4]

 PHP.SU

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


 Страниц (4): « 1 2 3 [4]   

> Без описания
JustUserR
Отправлено: 20 Апреля, 2010 - 16:40:52
Post Id



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


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


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




viperdev пишет:
Спасибо большое за помощь всем, помогло mysql_real_escape_string, только появилась другая проблема в базу пишется только половина информации, а объем ее всего 60 килобайт, как с этим быть?
Пожалуйста! Не забывайте что данные необходимо экранировать всегда Насчет ограничения на размер данных записываемых в БД - какого типа у вас записываемое поле? (Проблема могла быть еще в наличии спецсимволов - но мы их старательно проэкранировали)


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



Участник


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


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




JustUserR
Так вот я пример и описал выше, чтоб люди поняли страшную силу кавычек!
 
 Top
viperdev
Отправлено: 21 Апреля, 2010 - 10:42:47
Post Id


Новичок


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


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




JustUserR пишет:
viperdev пишет:
Спасибо большое за помощь всем, помогло mysql_real_escape_string, только появилась другая проблема в базу пишется только половина информации, а объем ее всего 60 килобайт, как с этим быть?
Пожалуйста! Не забывайте что данные необходимо экранировать всегда Насчет ограничения на размер данных записываемых в БД - какого типа у вас записываемое поле? (Проблема могла быть еще в наличии спецсимволов - но мы их старательно проэкранировали)

Тип поля text, та часть информации которая записалась в бд, записалась идеально, пробовал на нормальном сервере т.е. не на денвере то же самое получается.
 
 Top
JustUserR
Отправлено: 21 Апреля, 2010 - 13:48:14
Post Id



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


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


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




ALEN пишет:
JustUserR Так вот я пример и описал выше, чтоб люди поняли страшную силу кавычек!
Да кавычки это важное дело - особенно когда дело заходит о нескольких уровнях вложенности и экранироваия
viperdev пишет:
Тип поля text, та часть информации которая записалась в бд, записалась идеально, пробовал на нормальном сервере т.е. не на денвере то же самое получается.
Попробуйте использовать LONGTEXT или MEDIUMBLOB (Это может быть особенно полезно если вы не хотите заботиться о кодировке данных в БД)


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


Новичок


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


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




JustUserR пишет:
ALEN пишет:
JustUserR Так вот я пример и описал выше, чтоб люди поняли страшную силу кавычек!
Да кавычки это важное дело - особенно когда дело заходит о нескольких уровнях вложенности и экранироваия
viperdev пишет:
Тип поля text, та часть информации которая записалась в бд, записалась идеально, пробовал на нормальном сервере т.е. не на денвере то же самое получается.
Попробуйте использовать LONGTEXT или MEDIUMBLOB (Это может быть особенно полезно если вы не хотите заботиться о кодировке данных в БД)

Не помогает, все равно записывается только часть данных.
 
 Top
JustUserR
Отправлено: 21 Апреля, 2010 - 17:05:38
Post Id



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


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


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




viperdev пишет:
Не помогает, все равно записывается только часть данных.
Судя по всему в записываемых данных встречается такой символ который не может быть записан при данных условиях - либо при экранировании и проверке строки запрос образается Такая проблема также может возникать если функция mysql_real_escape_string убирает символы многобайтовой кодировки которые не подходят под текущее соединение
Попробуйте просто вывести на экран SQL-запрос и посмотреть что отправляется на сервер БД на самом деле


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


Новичок


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


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




JustUserR пишет:
viperdev пишет:
Не помогает, все равно записывается только часть данных.
Судя по всему в записываемых данных встречается такой символ который не может быть записан при данных условиях - либо при экранировании и проверке строки запрос образается Такая проблема также может возникать если функция mysql_real_escape_string убирает символы многобайтовой кодировки которые не подходят под текущее соединение
Попробуйте просто вывести на экран SQL-запрос и посмотреть что отправляется на сервер БД на самом деле


Проблема решилась следующим образом:
перекодировал входящие данные из cp1251 при помощи iconv в utf-8,
заменил в бд поле text на longtext.

вот код скрипта может кому пригодится:
PHP:
скопировать код в буфер обмена
  1.  
  2. $host = "localhost";
  3. $dbname = "testtv";
  4. $dbuser = "tv";
  5. $dbpassword = "1";
  6. $db = mysql_connect($host,$dbuser,$dbpassword) or die("<h1>Unable to connect to the database</h1>");
  7. mysql_query('set names utf8');
  8. mysql_select_db($dbname,$db) or die("<h1>Unable to select database</h1>");
  9. $content = file_get_contents('http://tv.tut.by/tv/');
  10. $pos = strpos ($content, '<table width="100%" border="0" cellpadding="0" cellspacing="3">
  11. <tr>
  12.         <td><br><br><h2>');
  13. $content = substr ($content, $pos);
  14. $pos = strpos ($content, '<font size="-2">');
  15. $content = substr ($content, 0, $pos);
  16. $search = array ("/F1F1F0/","/tv.tut.by/");  
  17. $replace = array ("1b76c7","tv.tut.by");
  18. $content = preg_replace($search,$replace,$content);
  19. $content = iconv("CP1251", "UTF-8", $content);
  20. $in = mysql_real_escape_string ($content);
  21. $result =mysql_query("INSERT INTO `day_prog` SET `program`='".$in."'",$db);
  22. $resultout = mysql_query("select * from `day_prog`",$db);
  23. $outstr = mysql_fetch_array ($resultout);
  24. echo $outstr['program'];
  25.  

Большое спасибо всем за помощь.
 
 Top
JustUserR
Отправлено: 22 Апреля, 2010 - 13:37:21
Post Id



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


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


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




viperdev пишет:
Проблема решилась следующим образом: перекодировал входящие данные из cp1251 при помощи iconv в utf-8, заменил в бд поле text на longtext.
Большое спасибо всем за помощь.
Пожалуйста! Как видите дело действительно оказалось в неправильном экранировании при несовместимостим кодировок -принимаемых и отправляемых данных а также содинения БД и данных в нем


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



Участник


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


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




viperdev пишет:
Не помогает, все равно записывается только часть данных.


Уже давно посоветовал, если что-то не так как хочется при работе в БД, сам запрос выводите на экран - операция займет 2 секунды, но сразу будет видно какие ошибки в запросе. Даже опытным программистам приходится иной раз так поступать не замечая иной раз самые элементарные ошибки.
 
 Top
JustUserR
Отправлено: 23 Апреля, 2010 - 11:19:13
Post Id



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


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


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




ALEN пишет:
Уже давно посоветовал, если что-то не так как хочется при работе в БД, сам запрос выводите на экран - операция займет 2 секунды, но сразу будет видно какие ошибки в запросе. Даже опытным программистам приходится иной раз так поступать не замечая иной раз самые элементарные ошибки.
К слову такой способ отладки частенько применяется для CGI-приложений написанный на Perl и тестируемых прямо на web-сервере
Что касается вывода на экран то можно добавить два совета - во-первых выводимые данные обрамлять в дополнительные боковые кавычки (То есть вывод наподобие echo "'$my_data'" ) чтобы узнать путская ли переменная или в ней есть какой-то спецсимвол - и по этой же причине можно смотреть исходный сгенерированный HTML-код чтобы увидеть реально все спецсимволы (Которые могут быть не показаны при HTML-отображении)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (4): « 1 2 3 [4]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB