Последнее обновление:
July 6, 2020

Есть мысль... Жми, напиши!
Что имеем: Постов : 140 Авторов: 1 Категорий: 22

Установка каретки в определенное положение в TMemo и в других контролах.

[ratings]
Procedure setline(memo:TMemo;Linepos,charpos:integer);
Begin
with memo do
begin
selstart:=perform(EM_LineIndex,LinePos,charpos)+charpos;
perform(EM_ScrollCaret,0,0);
SetFocus;
end;
end;
Views :

2086

человеко понятный url (чпу), пример: http://mysite/статьи/чпу

[ratings] Наверняка хотелось видеть ссылки вида http://mysite.ru/стать/чпу вместо http://mysite.ru/stati.php?stat=44
Создаем текстовый файл .htaccess, кладем в корень, в нем пишем строки:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /navig.php?path=$0 [L,QSA]

navig.php — будет обрабатывать url
в нем пишем:

$qs=$_GET["path"];
$cs=mb_convert_encoding($qs, 'HTML-ENTITIES', 'UTF-8'); //--для нормальной работы с кирилицей, иногда не надо.
echo $cs;
?>

а можно еще так: http://mysite/статьи/чпу?lang=rus
и: $_GET["lang"];
впринципе все. удачи.

Views :

1099

Переносы строки и Json

[ratings] Столкнулся с такой проблемой, есть текст с переносом строки внутри
Привет
Как дела?

Когда пытаюсь передать её через Ajax под видом JSON получается следующее
{custom:»Привет
Как дела?»}

Работающий перенос строки останавливает работу скрипта. Надо было убрать перенос для js, но что бы он одновременно работал в форме куда этот текст и вставлялся

$value = preg_replace(‘#[\n\r]+#’, «\\n», $value);
Теперь все стало работать так как текст выглядит так
{custom:»Привет\nКак дела?»}

Views :

8575

Варианты формата даты mysql

%a Короткое название недели (Вск..Пнд)
%b Короткое название месяца (Феб..Мaр)
%c Месяц числом (0..12)
%D суфикс для ангийских чисел(0th, 1st, 2nd, 3rd, …)
%d День с ведущим нулём (00..31)
%e День (0..31)
%f Микросекунды (000000..999999)
%H Час с ведущим нулём, начало от нуля (00..23)
%h Час с ведущим нулём (01..12)
%I Час с ведущим нулём (01..12)
%i Минуты с ведущим нулём (00..59)
%j День в году (001..366)
%k Час, отсчет от нуля (0..23)
%l Час (1..12)
%M Month name (January..December)
%m Номер месяца с ведущем нулём (00..12)
%p AM or PM
%r Время, 12 часовой формат (hh:mm:ss и AM or PM)
%S Секунды (00..59)
%s Секунды (00..59)
%T Время, 24 часовой формат (hh:mm:ss)
%U Неделя (00..53), первый день недели Воскресенье
%u Неделя (00..53), первый день недели Понедельник
%V Номер недели в году (01..53), где неделя начинается с Воскресенья; используется с %X
%v Номер недели в году (01..53), где неделя начинается с Понедельника; используется с %x
%W Название недели (Sunday..Saturday)
%w Номер недели (0=Воскресенье..6=Суббота)
%X Год, 4 числа, где нелеля начинается с Воскресенья; использовать с %V
%x Год, 4 числа, где нелеля начинается с Понедельника; использовать с %v
%Y Год 4 числа
%y Год, 2 числа
%% Знак процент
Пример использования: SELECT date_format(‘2009-05-13’, ‘%W, %e %M %Y’)
Выведет:  Wednesday 13 may 2009
set lc_time_names=’ru_RU’; — а если добавить перед запросом это, то:
Выведет: Среда 13 май 2009

Views :

777

REGEXP в MySQL

SELECT * FROM prices where tkey REGEXP ‘^toy’;
Вернет все записи где текст в колонке tkey начинается с букв “toy”.
SELECT * FROM prices where tkey  REGEXP ‘[[:digit:]]’;
Вернет все записи где  в колонке tkey только цифры.
^ — означает начало слова
$ — конец
. — Соответствие любому символу (включая перевод строки).
a* — Соответствие любой последовательности из нуля или более символов «a».
a+ — Соответствие любой последовательности из одного или более символов «a».
a? — Соответствие как нулю, так и одному символу «a».
de|abc — Соответствие как последовательности de, так и последовательности abc.
(abc)* — Соответствие нулю или более вхождениям последовательности abc.
[а-ЯЁё] — в слове могут быть буквы только Русского алфавита.
[а-ЯЁёa-Z] — русскаго и англикого

Пример использования:
SELECT * FROM users WHERE email REGEXP «^[a-z]+@+(mail)+\.+[a-z]{2,3}$»
Вернет все записи из таблицы users где email пользователя находится на сервере mail (например pupkin@mail.ru)
Разберем по порядку:
[a-z]+ — говорит что начинаться строка должна только с букв английского алфавита, далее
@+ — говорит о том что должен быть знак собаки, далее
(mail)+ — говорит о том, что далее после сабаки должно идти слово mail, далее
\.+ — говорит о том что дальше должна идти точка («\» — знак экранирования, т.е. необходимо ставить перед «.» и «\» — если хотите включить их в диапазон значений), далее
[a-z]{2,3} — говорит о том что после точки может быть от двух до трех символов из букв английского алфавита

Views :

2518

Длина текста в поле mysql

[ratings] SELECT word FROM tgameworld where length(word) = 25
В этом запросе будут показывать строки где длина не первышает 25 символов.

Views :

1216

Получить новое за день, неделю, месяц из MySQL

[ratings] В таблице есть поле created где ввиде timestamp указана дата публикации статьи. С помошью запроса можно получить
статьи за день:
SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) = CURRENT_DATE();
за неделю:
SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) > Date_sub(CURRENT_DATE(), INTERVAL 1 WEEK );
за месяц:
SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) > Date_sub(CURRENT_DATE(), INTERVAL 1 MOUTH );

Views :

1140

Проверка на существование записи, или COUNT против EXISTS

[ratings] Недавно потребовалось оптимизировать один проект. Поначалу работал неплохо, но производительность уменьшалась прямопропорционально*2 колву использования.
Первым стал падать мускул сервак, решено было начать с оптимизации запросов к базе.
Начну, пожалуй, с проверки существования записи.
Один из способов это дать запрос с использование Count
Select count(id) from some_table where ….
Другой использовать функцию Exists
Select exists(select * form some_table where ….)
на первый взгляд делают они одно и тоже кроме того что есть большая разница в скорости. Вот результаты тестов на таблице с 120.000.000 записями
SELECT COUNT(*) — 21 min 47.54 sec
SELECT * from table limit 1; —
0.25 sec
SELECT id from table limit 1; —
0.29 sec
SELECT IF EXISTS… — 0.03 sec

Ну как разница?)

Views :

1432

jquery обнуление формы

По идеи для обнуления формы надо использовать команду
$.(‘#form_id’).reset();
Но не пашет.  А пашет так:

$.('#form_id').each(function(){
this.reset();
});
Views :

2447

PHP mail() кодировка сообщения. Отправка почты с картинкой. mail_mime.

Приветствую!

Наверняка Вам приходилось отправлять почту из php? И наверняка зачастую хотелось присобачить какие-нить файлы, показать картинку?
Окей. Сейчас расскажу немножко про отправку почты и один интерессный класс — mail_mime.

Первая часть — обычное письмо.

Самый простой способ отправить письмо при помощи PHP — воспользоваться стандартной функцией mail().
Она имеет следующий синтаксис:
mail(email, тема, сообщение, дополнительные заголовки, дополнительные параметры)
вернет true, если письмо было принято к доставке (не означает что доставлено).

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

mail("nobody@example.com", "Тема письма", "Сообщение", "From: webmaster@example.com");
Но вместо сообщения у получателя скорее всего отобразятся иероглифы.

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

$params=array(
   "From: webmaster@example.com",
   "Content-type:plain/text;charset=utf-8" //-- Задаём тип письма и кодировку. PHP файл должен быть сохранён в этой же кодировке
);
$to="nobody@example.com";
$subject="Тема письма";
$message="Сообщение";
$params=implode("\r\n",$params); //-- Объединяем параметры в строку. Разделитель \r\n обязателен.
mail($to, $subject, $message, $params);
Теперь текст сообщения должен отобразиться нормально. НО тема письма всё равно останется в кракозябрах =(

Дело в том, что тема письма должна быть записана следующим образом:
=?<кодировка>?B?<текст в base64>?=

Изменим наш код с учётом этого:

function header_encode($str, $data_charset, $send_charset)
{
   if($data_charset != $send_charset) {
     $str=iconv($data_charset,$send_charset.'//IGNORE',$str); //-- при необходимости изменим кодировку самого текста
   }
   
   return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
}

$params=array(
   "From: webmaster@example.com", 
   "Content-type:text/plain;charset=utf-8" //-- Задаём тип письма и кодировку. PHP файл должен быть сохранён в этой же кодировке
);
$to="nobody@example.com";
$subject=header_encode("Тема письма", "UTF-8", "UTF-8");
$message="Сообщение";
$params=implode("\r\n",$params); //-- Объединяем параметры в строку. Разделитель \r\n обязателен.
mail($to, $subject, $message, $params);
Теперь всё должно отобразиться корректно.

Теперь про mail_mime.

Для начала, скачайте последнюю версию и распакуйте к себе на сайт в папку Mail.
Далее привожу пример использования:

include 'Mail.php';
include 'Mail/mime.php';

$text ='Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = 'myimg.jpg';
$crlf = "\n";
$hdrs = array(
'From' => 'you@yourdomain.com',
'Subject' => 'Test mime message'
);

$mime = new Mail_mime(array('eol'=>$crlf));

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =&Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);




Что бы теперь отобразить саму картинку в html версии письма, достаточно прописать: <img alt=»» src=»имя файла картинки с расширение» />

На этом пока что всё. Надеюсь будет полезно.

Views :

23359