|
|
|
| Как при помощи формы с двумя полями - НАЙТИ и ЗАМЕНИТЬ - заменить во всех полях таблицы одно слово (словосочетание) на другое внутри текстов, с учетом регистра? Раньше скачивал БД, производил у себя замену и закачивал обратно, но БД уже большая и такие операции ставятся все проблематичнее. | |
|
|
|
|
|
|
|
для: SS
(15.12.2005 в 13:14)
| | А насколько актуален учёт регистра? Дело в том, что представление строк в MySQL ведётся без учёта регистра (можно извратится через бинарные строки, но не уверен, что здесь получится). Вообще замену строк следует проводить при помощи встроенной функции MySQL - REPLACE()
UPDATE tbl SET field = REPLACE(field,"что заменяем","на что заменяем")
|
| |
|
|
|
|
|
|
|
для: cheops
(15.12.2005 в 13:39)
| | Спасибо! Получилось, работает.
Два нюанса:
1. Поиск и замена по слову целиком.
2. Как вывести результат замены на экран и выделить жирным, что заменил и в каком id. | |
|
|
|
|
|
|
|
для: SS
(15.12.2005 в 21:15)
| | 1) Не очень понял...
2) Знаете чего подумал... Вы наверняка слышали о Wikipedia http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=10179 - on-line энциклопедии, которую может редактировать любой желающий - там используется wiki-движок на PHP+MySQL который позволяет осуществлять контроль версий при многопользовательской правке, движок разумеется свободный и его вполне можно найти. Возможно, вам будет интересен wiki-движок, так как он позволяет не просто осуществлять банальную правку, но и показывать изменения между версиями, осущетвлять откаты на более ранние варианты и вообще достаточно удобный. | |
|
|
|
|
|
|
|
для: cheops
(15.12.2005 в 22:27)
| | 1. Сейчас замена происходит по любой части слова. Это не всегда удобно. Нужно целое слово заменить на целое слово.
2. У Википедии свои цели, у нас - свои. Смысл вывода результатов замены - просмотреть, все ли правильно заменено и если в какой-то строке что-то не то поменялось - сразу же исправить. | |
|
|
|
|
|
|
|
для: SS
(16.12.2005 в 20:02)
| | 1) Хм... а не должно бы... вы разбиваете фразу на части или как? Как выглядит блок замены? | |
|
|
|
|
|
|
|
для: cheops
(17.12.2005 в 00:09)
| | В точности, как Вы и подсказали. | |
|
|
|
|
|
|
|
для: SS
(17.12.2005 в 01:11)
| | Так а вы не разбивайте, а прямо подставляйте то, что ввёл пользователь. | |
|
|
|
|
|
|
|
для: cheops
(17.12.2005 в 13:03)
| | Я ничего не разбиваю.
Выглядит все так:
$find=$_POST['find'];
$replace=$_POST['replace'];
$query = "SELECT *
FROM table";
$ctn = mysql_query($query);
if(!$ctn) exit(mysql_error());
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if($dbcnx)
{
if(@mysql_select_db($dbname,$dbcnx))
if(!empty($find))
{
$query = "UPDATE table SET field = REPLACE(field,'$find','$replace')";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
}
}
|
2. И как насчет вывода результатов замены? Это возможно? | |
|
|
|
|
|
|
|
для: SS
(19.12.2005 в 03:33)
| | Хм... так вроде и должен заменять фразу на фразу, не очень понятно в чём сложность?
PS Вас так могут быстро поломать после блока
<?php
$find=$_POST['find'];
$replace=$_POST['replace'];
?>
|
добавьте
<?php
if (!get_magic_quotes_gpc())
{
$find = mysql_escape_string($find);
$replace = mysql_escape_string($replace);
}
?>
|
PS В данном случае скорее всего SQL-инъекция невозможна, но в других может сработать. | |
|
|
|
|
|
|
|
для: cheops
(19.12.2005 в 14:36)
| | Спасибо за подсказку!
Так, объясняю, что я имею ввиду под словом целиком.
Нужно искомое слово целиком поменять на образец.
Т.е., например, ищем лес и меняем на луг.
Поменять только лес целиком, - никаких лестниц, колес, блестящих и т.д. - а именно так, любую часть слова, сейчас и меняет, поэтому результат такой замены абсолютно непредсказуем. | |
|
|
|
|
|
|
|
для: SS
(21.12.2005 в 05:16)
| | А... понятно. К сожалению, регулярные выражения в MySQL развиты не очень и заменить их средствами MySQL не получится, наверное придётся выносить замену в PHP. | |
|
|
|