Архив метки: mysql

ЧПУ для сайта php+mysql часть 1

Копирование полей в базе mysql

Для реализации мне потребовалось создать в базе поле titleEn c английским вариантом русского заголовка страницы title.

в phpmyadmin создаем новое поле titleEn в нужной таблице.

И копируем туда данные из русской версии заголовков:

1
UPDATE `table_name` SET `titleEn`=`title`
UPDATE `table_name` SET `titleEn`=`title`

 Транслитерация заголовков в базе

Для перевода используем простую функцию

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function translitIt($str){
$tr = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d",
"Е"=>"e","Ё"=>"yo","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"yo","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
" "=> "-", "."=> "", "/"=> "-"
);
return strtr($str,$tr);
}
function translitIt($str){
$tr = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d",
"Е"=>"e","Ё"=>"yo","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"yo","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
" "=> "-", "."=> "", "/"=> "-"
);
return strtr($str,$tr);
}

После чего убираем лишние символы

1
2
$fl = translitIt($fl);
$fl = preg_replace('/[^A-Za-z0-9_\-]/', '', $fl);}
$fl = translitIt($fl);
$fl = preg_replace('/[^A-Za-z0-9_\-]/', '', $fl);}

Заголовок получает вид: kak-propisat-klyuch-v-standartnoy-signalizacii из исходного Как прописать ключ в стандартной сигнализации

Автоматизируем процесс

Можно создать скрипт, для автоматической замены всего поля таблицы на транслит

Полезные для этого дела запросы к базе:

Вывод всех таблиц в базе database_name

1
$sql = "SHOW TABLES FROM database_name";
$sql = "SHOW TABLES FROM database_name";

Вывод всех полей в таблице table_name

1
$sql = "SHOW COLUMNS FROM `{table_name}`";
$sql = "SHOW COLUMNS FROM `{table_name}`";

и соответственно запись новых значений в поля базы
Обновление в таблице
table_name установить значение поля field равным fieldvalue где значение поля field равно fieldrus(то есть старому значению)

1
$editfl = mysql_query ("UPDATE table_name SET field='fieldvalue' WHERE field='fieldrus'");
$editfl = mysql_query ("UPDATE table_name SET field='fieldvalue' WHERE field='fieldrus'");

Далее

Теперь мы имеем валидный адрес для каждой страницы сайта, к которому мы можем обращатся через базу и настроить красивые url’ы через rewrite_modeule apache. to be continued…

 

Импорт / Экспорт базы mysql > консоль

Импорт базы данных

В принципе можно воспользоваться командой :

1
mysql -u root -p root_pass db_name < db_name.sql
mysql -u root -p root_pass db_name < db_name.sql

но она содержит подводные камни в виде того, что если например база уже создана, то импорт может оказаться неудачным.

Самым лучшим выходом из ситуации будет ипморт напрямую через cli MySQL :

Заходим в MySQL:

1
mysql -u Login -p DB_name -h Host 
mysql -u Login -p DB_name -h Host 

(вместо Login и DB_name вводим данные пользователя БД и хост, например localhost)

Выбираем базу данных:

1
 use db_name 
 use db_name 

(вместо db_name вводим название БД)

Делаем импорт файла в выбранную бд:

1
source db_name.sql 
source db_name.sql 

(вместо db_name.sql вводим название файла дампа БД или путь до файла, если вы находитесь не в той папке, где лежит файл)

Экспорт базы данных

Делаем экспорт посредством удобного mysqldump :

1
mysqldump -uLogin -pPassword db_name > db_name.sql
mysqldump -uLogin -pPassword db_name > db_name.sql

Да поможет вам phpmyadmin)))