Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена адресов изображений в ячейке таблицы
 
 автор: pautina   (12.01.2012 в 17:02)   письмо автору
88.3 Кб
 
 

Здравствуйте Уважаемое сообщество.
Мне нужно заменить все адреса рисунков в html коде, Сам код содержится в ячейке таблицы.
sql файл который создаёт таблицу прикрепил.
в html коде все рисунки вида

<img height="262" src="/lessons/les1689/01.jpg" width="450" />
<img height="33" src="/lessons/les1689/02.jpg" width="442" />
<img height="23" src="tools/Elliptical Marquee.jpg" width="27" />
...

нужно заменить на

<img height="262" src="images/lessons/les1689/01.jpg" width="450" />
<img height="33" src="images/lessons/les1689/02.jpg" width="442" />
<img height="23" src="images/tools/Elliptical Marquee.jpg" width="27" />
...

Но замены нет, просто в строке всё работало, в ячейке замены не происходит

<?php       
  header
("Content-Type: text/html; charset=UTF-8");      
  
$conn mysql_connect ("localhost""root""")     
            or die (
"Соединение не установлено!");     
  
mysql_select_db("bd_photoshop-portal"$conn);     
      
  
$query "SELECT * FROM material_content_into3";       
  
$cat mysql_query($query);       
  if(!
$cat) exit("Ошибка выполнения запроса - ".mysql_error()."<br />".$query);       
  if(
mysql_num_rows($cat))       
  {       
    while(
$catagory mysql_fetch_assoc($cat))     
    {         
     
// preg_match_all('#src="([^"]+)"#i', $catagory['Field 3'], $matches); // показывает ссылку для изображения 
      
$newField_3 preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i''$1/images/lessons/'$catagory['Field 3']); // Замена адреса изображения в строке  
     // <img height="547" src="/lessons/les1677/1.jpg" width="450" /> менняется на   
     // <img height="547" src="/images/lessons/les1677/1.jpg" width="450" /> 
      
$newField_3 preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)tools/#i''$1/images/tools/'$catagory['Field 3']);     
      
     
//$newField_3 = array(); 
        
     //if (sizeof($matches[1]))  
     //    foreach($matches[1] as $link){      
     //        $newField_3[] = $link;                 
     //        echo $link."<br />";           
     //     }  
       
     // $newField_3 = $link;  
           
      // Запрос для обновления     
     
          
$query "UPDATE material_content_into3       
                    SET `Field 3` = '
{$newField_3}'       
                    WHERE ID = 
{$catagory['ID']}";                                 
          if(!
mysql_query($query))       
          {       
            exit(
"Ошибка выполнения запроса - ".mysql_error()."<br />".$query);       
          }     
          echo 
'Запрос выполнен успешно';           
    }       
  }       
?>

Замена происходит но срабатывает она только на 1 запись либо

$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)tools/#i', '$1/images/tools/', $catagory['Field 3']); 

либо

$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $catagory['Field 3']);

Почему замена не выполняется в 2 строках

   
 
 автор: pautina   (18.01.2012 в 15:00)   письмо автору
88.3 Кб
 
   для: pautina   (12.01.2012 в 17:02)
 

Ни могли бы вы посмотреть этот скрипт, он позволяет делать замену в адресах рисунков.
Файл который формирует таблицу прикрепил.

<?php       
  header
("Content-Type: text/html; charset=UTF-8");      
  
$conn mysql_connect ("localhost""root""")     
            or die (
"Соединение не установлено!");     
  
mysql_select_db("bd_photoshop-portal"$conn);     
      
  
$query "SELECT * FROM material_content_into3";       
  
$cat mysql_query($query);       
  if(!
$cat) exit("Ошибка выполнения запроса - ".mysql_error()."<br />".$query);       
  if(
mysql_num_rows($cat))       
  {       
    while(
$catagory mysql_fetch_assoc($cat))     
    {         
     
// preg_match_all('#src="([^"]+)"#i', $catagory['Field 3'], $matches); // показывает ссылку для изображения 
      
$newField_3 preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i''$1/images/lessons/'$catagory['Field 3']); // Замена адреса изображения в строке  
     // <img height="547" src="/lessons/les1677/1.jpg" width="450" /> менняется на   
     // <img height="547" src="/images/lessons/les1677/1.jpg" width="450" /> 
      
$newField_3 preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)tools/#i''$1/images/tools/'$catagory['Field 3']);     
      
       
// Запрос для обновления     
     
          
$query "UPDATE material_content_into3       
                    SET `Field 3` = '
{$newField_3}'       
                    WHERE ID = 
{$catagory['ID']}";                                 
          if(!
mysql_query($query))       
          {       
            exit(
"Ошибка выполнения запроса - ".mysql_error()."<br />".$query);       
          }     
          echo 
'Запрос выполнен успешно';           
    }       
  }       
?>

Замена происходит но срабатывает она только на 1 запись либо

$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)tools/#i', '$1/images/tools/', $catagory['Field 3']); 

либо

$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $catagory['Field 3']);

Почему замена не выполняется в 2 строках одновременно,
а то сейчас приходится коментарить 1 строку, запускать скрипт и затем коментарить 2 строку и опять запускать скрипт.

   
 
 автор: Lotanaen   (18.01.2012 в 15:17)   письмо автору
 
   для: pautina   (18.01.2012 в 15:00)
 

ну так во втором и последующих случаях нужно уже работать не с $catagory['Field 3'], а с $newField_3.
Вот так в данном случае:
$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $newField_3 );

вообще-то эта тема к форуму РНР относится, а не MySQL...

   
 
 автор: pautina   (19.01.2012 в 06:23)   письмо автору
 
   для: Lotanaen   (18.01.2012 в 15:17)
 

с

$newField_3 = preg_replace('#(<img\s[^>]*?\bsrc\s*=\s*[\'"]?)/lessons/#i', '$1/images/lessons/', $newField_3);

замена не сработала
может нужно использовать не $newField_3 а catagory['newField_3'] правильно ли описано,
хотя наверно нет нужно менять $catagory['Field 3']); ведь в этом столбце делаем замену.
Как считаете что можно сделать?

   
 
 автор: Lotanaen   (19.01.2012 в 12:06)   письмо автору
 
   для: pautina   (19.01.2012 в 06:23)
 

после обеих этих двух строчек вставьте
echo $newField_3."<br>";

и скопируйте сюда что выводится на экран

   
 
 автор: pautina   (19.01.2012 в 12:27)   письмо автору
 
   для: Lotanaen   (19.01.2012 в 12:06)
 

Давайте я Вам прямо из ячейки дам.
Тут по кодировке в браузере иероглифы выводятся.
[поправлено модератором]
Заменилась только строка <IMG height=23 src="/images/tools/Elliptical Marquee.jpg" width=27>

   
 
 автор: Lotanaen   (19.01.2012 в 12:39)   письмо автору
 
   для: pautina   (19.01.2012 в 12:27)
 

и зачем мне эта простыня? я же попросил что вас сделать?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования