Можно ли массово удалить в Mysql такой код?

12
C
На сайте с 17.05.2012
Offline
69
clb
1452

Таблица jos_content, поле fulltext, 500 материалов (500 id). Можно ли массово удалить в Mysql (в поле fulltext у 500 материалов) такой код? Например используя постоянные выражения?

<table  cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>разное содержимое</table>
siv1987
На сайте с 02.04.2009
Offline
427
#1

Можно, если установить эту библиотеку.

А что мешает написать пару строк на php для удаления по регулярке?

C
На сайте с 17.05.2012
Offline
69
clb
#2

Какой должен быть код на php?

TaP3aH
На сайте с 13.12.2006
Offline
66
#3

А просто запрос не подойдет?

UPDATE jos_content SET `fulltext` = REPLACE( fulltext, SUBSTRING( fulltext FROM LOCATE( '<table cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>разное содержимое</table>', fulltext ) ) , '' ) ;

C
На сайте с 17.05.2012
Offline
69
clb
#4

Между <table> и </table> разное содержимое у 500 материалов. Можно ли использовать тут регулярное выражение (.*?) ? Такой код сработает?

UPDATE jos_content SET `fulltext` = REPLACE( fulltext, SUBSTRING( fulltext FROM LOCATE( '<table cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>(.*?)</table>', fulltext ) ) , '' ) ;

TaP3aH
На сайте с 13.12.2006
Offline
66
#5
clb:
Между <table> и </table> разное содержимое у 500 материалов. Можно ли использовать тут регулярное выражение (.*?) ? Такой код сработает?

UPDATE jos_content SET `fulltext` = REPLACE( fulltext, SUBSTRING( fulltext FROM LOCATE( '<table cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>(.*?)</table>', fulltext ) ) , '' ) ;

Пардон, думал разное содержание это и есть текс, бывает...)

Помню как-то эпидемия была, что на всех движках DLE в фул стори и в шорт стори появились коды iframe или script, и все было бы ничего, если бы в каждой новости не был свой шифрованный урл, т.е. у меня на сайте сейчас 110 тысяч новостей и в каждой был <script .... и урл скрипты для каждой новости был разный 1512515 55151515 12о5и12

ну вообщем удалял я это следующим образом:

update dle_post set`short_story`=replace(short_story,SUBSTRING(short_story FROM LOCATE('<script',short_story)),''),
full_story=replace(full_story,SUBSTRING(full_story FROM LOCATE('<script',full_story)),'') where LOCATE('<script',full_story)>0

может под себя подгоните и поможет.

siv1987
На сайте с 02.04.2009
Offline
427
#6

Такой запрос подойдет если только таблица находится в конце записи, иначе вместе с ней удалится и все что после нее.

clb:
Какой должен быть код на php?

Примерно такой


<?php

mysql_connect("хост", "логин", "пароль")
or die ("Could not connect to MySQL");
mysql_select_db ("имя_бд")
or die ("Could not select database");

$rname = "имя_поле";
$table = "таблица";

$res = mysql_query( "SELECT * FROM {$table}" ) or die( mysql_error() );
while( $row = mysql_fetch_assoc($res) )
{
$patt = "#<table [^>]+>(.+?)</table>#"; //regexp выражение для удаления нужного кода
if( preg_match( $patt, $row[$rname] ) )
{
$row[$rname] = preg_replace( $patt, '', $row[$rname] );

mysql_query( "UPDATE `{$table}` SET `{$rname}`='".mysql_real_escape_string($row[$rname])."' WHERE id={$row['id']}" ); //id заменить на свой индентфифкатор записи
}
}
?>

Заменить требуемые значения на свои

для подключения к бд: хост, логин, пароль, имя бд

для работы с таблицей: имя_поле (в каком поле находится нужная запись), таблица (имя таблицы)

Если бд работает в utf8, добавить после mysql_select_db

mysql_query("SET NAMES 'utf8'");

C
На сайте с 17.05.2012
Offline
69
clb
#7
siv1987:
//id заменить на свой индентфифкатор записи

А если id 500 штук (с 1400 до 1900)? Как сразу все обработать?

siv1987
На сайте с 02.04.2009
Offline
427
#8
clb:
А если id 500 штук (с 1400 до 1900)? Как сразу все обработать?

id, имеется ввиду имя поле. Оно не обязательно может быть id, встречается и fid, и pid и тд. Если у вас оно так и называется, значит оставляйте так.

ЗЫ.

Автор не несёт ответственности за работу скрипта.

Обязательно сделайте бэкап таблицы.

Прежде чем запускать скрипт, проверьте тщательно все настройки.

C
На сайте с 17.05.2012
Offline
69
clb
#9

Удалиться именно этот блок?

<table cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>разное содержимое</table>

Просто есть там еще 2 таблицы (но они без стилей, то есть таблица которая вверху только одна).

siv1987
На сайте с 02.04.2009
Offline
427
#10
clb:
Удалиться именно этот блок?

Нет, удалятся все таблицы. Вы, в паттерне, пишите регулярку для конкретной таблицы.

$patt = "#<table cellpadding='0' align='right' cellspacing='0' style='margin-left:10px; margin-right:25px; margin-top:0px;'>(.+?)</table>#";

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий