Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #56, ИЮЛЬ 2005 г.

Мобильный сервиз

Denis Mingulov

Спецвыпуск: Хакер, номер #056, стр. 056-014-4


"track_u" character varying(120) - название песни, оптимизированное для поиска (как и выше, шаблон для LIKE). Шаблон для поиска может полностью совпадать с названием песни, а может включать в себя два специальных символа, с которыми можно сопоставлять различные символы в значении данных. Это символ подчеркивания '_' - просто любой символ (ровно один) - и знак процента '%', то есть любое число символов (от ноля). Например, результат сравнения 'Let It Be' LIKE 'Let%' будет равен 'истине'.

Поиск (так должна выглядеть пустая форма WAP, которую будет выводить программа):

<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card id="card1" title="Ringtone Search">

<do type="prev"><prev/></do>

<do type="accept" label="Search">

<go method="get" href="srch.wml">

<postfield name="srch" value="$(srch)"/>

</go>

</do>

<!-- а вот здесь нужно вставить результаты поиска или просто список файлов -->

</card>

</wml>

На листинге ниже можно увидеть примерный текст скрипта на Perl (запрос уже сделан - реализуем полный поиск, заодно выводя результат под поисковой формой, рядом с комментарием).

my $dbh = DBI->connect ("dbi:Pg:dbname=pgdb", "user", "", { RaiseError => 1, AutoCommit => 0 });

my $artist_filter = undef;

my $srch = $Request->QueryString ("srch");

my $artist_filter = $Request->QueryString ("ar");

# если поиск

if ($srch) {

$sth = $dbh->prepare ("SELECT Artist, Track FROM RingtoneList WHERE Artist_U LIKE ? OR Track_U LIKE ? ORDER BY Artist, Track");

my $tmp = uc ("%" . $srch . "%");

$tmp =~ s/\s+/ /g;

$sth->execute ($tmp, $tmp);

} elsif (!$artist_filter) {

$sth = $dbh->prepare ("SELECT Artist, Track FROM RingtoneList ORDER BY Artist, Track");

$sth->execute;

} elsif ($artist_filter) {

$sth = $dbh->prepare ("SELECT Artist, Track FROM RingtoneList WHERE Artist = ? ORDER BY Artist, Track");

$sth->execute ($artist_filter);

}

# И выводим результат с возможностью перехода на него - просто в виде ссылок

Здесь мы соединяемся с базой данных, проверяем, был ли вызван скрипт для поиска информации (есть параметр 'srch') или же в результате перехода по имени певца (параметр 'ar'). Если просто поиск - ищем и в песнях, и в авторах. Иначе, если ищем по автору, то берем все его песни или просто выводим полный список.

Разумеется, разделение на страницы лучше делать отдельным параметром запроса к скрипту. Также ты можешь сделать отдельную страницу для перехода на исполнителя по алфавиту.

Коммерческий сервис

Ты создал какой-нибудь сервис и хочешь зарабатывать на нем деньги? Если да, то самое время начать как-нибудь продавать доступ к своему сайту (навечно или на какое-нибудь время), сделать невозможным доступ для незарегистрированных пользователей или предоставить им возможность посмотреть демонстрационную версию. Если есть желание продавать доступ отдельно, например к каждой странице, создавай отдельную короткоживущую ссылку (хотя бы 12 часов - делаем скидку на возможную временную недоступность GPRS), по которой человек сможет скачать нужный ему файл.

Назад на стр. 056-014-3  Содержание  Вперед на стр. 056-014-5