Programming and Exciting Things

Външен достъп до mysql базите данни на хостинг провайдъра

Published on 29.06.2010

Както знаете повечето (всички) хостинг доставчици не разрешават отдалечен достъп до базата данни (в случая mysql). За разглезани хлапета като мен, които си харесват GUI приложенията това е малко кофти. Интересното е че същитете тези хостинг доставчици предлагат SSH достъп до акаунта, което е добре дошло и ще ни свърши перфектна работа. Та какво ни трябва ? 1. plink.exe 2. HeidiSQL 3. SSH достъп до акаунта сваляме plink.exe някъде на хард диска отваряме HeidiSQL натискаме бутончето New и създаваме нов профил, от Network type избираме SSH тунел Избор на мрежовия тип конфигурация в HeidiSQL настройките за User/Pass си ги нагласяте спрямо mysql user/pass за достъп на хостинг акаунта. След това превключвате табчето горе на SSH tunnel Избор на настройки за SSH тунел на HeidiSQL попълвате полетата за host,user,pass, ако разполагате и с pkk добавяте и него, поглеждате още веднъж дали всичко е както трябва и смело натискате Open и само след това сте в базата си данни :) На мен лично ми върши чудесна работа и не ми се налага да влизам през putty или чрез phpMyAdmin, да ровичкам по базата. PS: За HeidiSQL ще пиша някой следващ ден :)

[php] премахане на всички img тагове от string

Published on 28.06.2010

function remove_image_from_strings($content) {
		$content = preg_replace("/<img[^>]+\>/i", "", $content); 
		return $content;
	}
Още една малка фунцкия която от подаден стринг ичиства всички < img > тагове

Намиране и извеждане на изображенията от подаден стринг (php)

Published on 28.06.2010

    /**
     * Намиране и извеждане само на снимките от даден стринг
     * @param string $data
     * @return array images
     */
    function find_images($data) {
        $images = array();
        preg_match_all('/(img|src)\=(\&quot;|\')[^\&quot;\'\&gt;]+/i', $data, $media);
        unset($data);
        $data = preg_replace('/(img|src)(\&quot;|\'|\=\&quot;|\=\')(.*)/i', &quot;$3&quot;, $media[0]);
        foreach ($data as $url) {
            $info = pathinfo($url);
            if (isset($info['extension'])) {
                if (($info['extension'] == 'jpg') || ($info['extension'] == 'JPG') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png'))
                    array_push($images, $url);
            }
        }
        return $images;
    }
Една малка функция която "събира" всички изборажение (хтмл таг [html]<img>[/html]) в масивче.

Успешен upgrade на Wordpress

Published on 26.06.2010

И така след няколко разменини е-mail съобщения с Superhosting вече и аз си обнових версията на Wordpress. Не смятам да пиша кои са новостите нито да хваля излишно платформата, но си заслужава да се отбележи че на пръв поглед всичко което ползвам работи без проблеми, което си е приятна изненада спрямо предишнимия ми опит с обновяването на други open source системи като joomla. Новата тема на административния интерфейс леко ме дразни но предполагам че ще свикна и с него :)

Създаване на Mysql Trigger

Published on 16.06.2010

Първо какво са тригерите в Mysql ? В общи линии това са обекти които са асоциирани с таблица и се активират при изпълняването на INSERT, UPDATE, DELETE в асоциираната им таблица. Синтаксиса за създаване на trigger под mysql e

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_body
Какво искам да постигна ... В общи линии целта ми е много проста, имам таблица с езикови низове и при обновяване на даден низ от тази таблица, предишната му стойност да се записва в друга таблица с цел справка при необходимост. Така нека първо да създадем таблицата към която ще "вържем" тригера.
CREATE TABLE `site_languages` (
`site_languages_id` INT(10) NOT NULL AUTO_INCREMENT,
`site_languages_key` VARCHAR(250) NOT NULL,
`site_languages_value` TEXT NULL,
`site_languages_lang` CHAR(5) NULL DEFAULT NULL,
`site_languages_file` CHAR(5) NOT NULL,
PRIMARY KEY (`site_languages_id`),
INDEX `site_languages_key` (`site_languages_key`),
INDEX `site_languages_lang` (`site_languages_lang`)
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=1
и след това таблицата където ще се пазят старите версии на езиковия низ.
CREATE TABLE `site_languages_versions` (
`site_languages_id` INT(10) NOT NULL AUTO_INCREMENT,
`site_languages_lang_id` INT(10) NOT NULL DEFAULT '0',
`site_languages_key` VARCHAR(250) NOT NULL,
`site_languages_value` TEXT NULL,
`site_languages_lang` CHAR(5) NULL DEFAULT NULL,
`site_languages_timestamp` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`site_languages_id`),
INDEX `site_languages_key` (`site_languages_key`),
INDEX `FK_site_languages_versions_site_languages` (`site_languages_lang_id`),
CONSTRAINT `FK_site_languages_versions_site_languages` FOREIGN KEY (`site_languages_lang_id`)    REFERENCES `site_languages` (`site_languages_id`) ON UPDATE NO ACTION ON DELETE CASCADE
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
пс: в примерния код има добавени и Foreign keys-ове които можете да премахнете :) Така нека създадем и тригера който ще свърши работата :)
DELIMITER //
CREATE TRIGGER `before_site_languages_update` BEFORE UPDATE ON `site_languages`
FOR EACH ROW BEGIN
INSERT INTO `site_languages_versions` (`site_languages_key`,`site_languages_lang_id`,
`site_languages_value`,`site_languages_lang`)
VALUES (OLD.`site_languages_key`,OLD.`site_languages_id`, OLD.`site_languages_value`,OLD.`site_languages_lang`);
END//
DELIMITER ;
Ta нека се опитам да обясня какво се случва ред по ред.
CREATE TRIGGER `before_site_languages_update` BEFORE UPDATE ON `site_languages` 
С този ред създаваме тригер с име "before_site_languages_update" който ще се задейства преди да се обнови таблицата site_languages, именно този ред " BEFORE UPDATE ON" посочва кога да се задейства въпросния тригер. След това имаме "FOR EACH ROW BEGIN" с който казваме че за всеки ROW
INSERT INTO `site_languages_versions` (`site_languages_key`,`site_languages_lang_id`,
`site_languages_value`,`site_languages_lang`)
VALUES (OLD.`site_languages_key`,OLD.`site_languages_id`, OLD.`site_languages_value`,OLD.`site_languages_lang`);
Взимаме старата информация с "OLD." и го добавяме в 'site_languages_versions' таблицата. Завършваме с "END//". Ами това е :) Изглежда простичко но върша добра работа. Важно е да се знае че тригерът не може да се асоциира с темп таблица или view, също така създаването на тригери е налично от версия 5.0.2 на Mysql Линкове: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html