Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Служба Рассылок Subscribe.Ru

_ Здравствуйте! Выпуск номер 33 _
рассылки сайта РНР для всех!

Вы получили этот выпуск рассылки, так как являетесь подписчиком рассылок сайта http://subscribe.ru Рассылка выходит еженедельно, и предлагает Вам авторские материалы по теме программирования на скриптовом языке гипертекстового препроцессора РНР. Кроме того - есть система вопросов и ответов, обмен ссылками и баннерами, раздел Ваши письма и многое другое.
Вам доступен форум рассылки:
Офицальный форум сайта
Все вопросы и ответы из форума
будут публиковаться в рассылке!
Архив рассылки
заказать книги по РНР
(только Беларусь)

Технологии чата
окончание... Начало в предыдущем и предпредыдущем номерах

Когда все данные переданы, фреймовая структура построена в загрузчике, нужно опять это все перепроверить и что надо восстановить. Перепроверяются настройки чата и служебная информация, а восстанавливается только учетная запись вошедшего. Делается это тем же методом, что и в Windows 2000. Производим перебор всех учетных записей, хранящихся в базе данных. Напомню, нам нужно знать несколько вещей - переданный методом GET уникальный идентификатор пользователя, построенный на основе идентификатора пароля (сам пароль нигде не хранится, только его идентификатор), Ника и дополнительной строки. Первое у нас уже есть, так как оно передается из загрузчика методом GET, остальное - считывается из базы данных о пользователях. Итак, шифруем все подряд учетные записи точно тем же методом, что шифровался идентификатор пароля, Ник и дополнительная строка. Полученный результат сравнивается с переданным идентификатором пользователя, если они не совпадают - сверяем следующую учетную запись в базе, если совпадают - пользователь авторизован повторно. Если перебор окончен, а учетная запись не найдена - введен неверный пароль. Это кажется немного сложно, но зато дает гарантию на правильную авторизацию и защиту от входов под любым выбранным Ником. Конечно, я не настаиваю на абсолютности описанной защиты. Я глубоко убежден, что все, что сделал один человек, второй может переделать и исследовать. Но! Большой вопрос - стоит ли тратить свои усилия и знания на такой пустяк.
Описанная методика защиты не очень сложна, но накладывает некоторые ограничения на сервер. Если учетных записей достаточно много, нагрузка будет довольно большая. Можно пойти более легким путем - авторизовывать пользователя по идентификатору не каждый раз, а только один, в самом начале. Дальше можно передавать более простой идентификатор методом POST
(например, номер учетной записи в базе данных). Только это дает взломщику еще одну дырку в Вашем чате, а это не желательно.
С авторизацией покончено, пришла пора поговорить о работе чата как о едином механизме. С теми фреймами, которые отвечают за вывод информации все более-менее понятно. А вот окно, где выводятся сообщения, стоит рассмотреть подробнее. Средства HTML позволяют специальными методами заставить окно браузера периодически обновлять свое содержимое. Это не очень приятно на обычных страницах, но совершенно необходимо в чате. Страница с сообщениями посетителей будет обновляться в соответствии с жестко установленными, а чаще
изменяемыми настройками. Собственно, это самая простая часть всего чата, так как тут нужно только считать файл, куда пишутся сообщения от посетителей, отрезать лишнюю часть сообщений (чтобы остались только введенные последними) и вывести все на экран. Тут же можно задействовать фильтр матов и ограничение на длину сообщения или отдельного слова. Вот и все хитрости для этой части фреймов.
Вторая по простоте часть чата - это ввод сообщения. Тут тоже можно особо не утруждать себя, ограничившись выбором цвета и типа шрифта, выводом иконок, контролем вводимых сообщений и т.д. Но именно тут надо проверять авторизацию пользователя по цифровому идентификатору. Авторизация будет проводиться всякий раз, когда сообщение будет отправляться в чат после
нажатия кнопки ОТПРАВИТЬ В ЧАТ. Это снимает часть проблем по загрузке сервера, так как происходит отправка сообщения в чат не так уж часто. И если пользователь не авторизован, ввод сообщения становится недоступен. Он блокируется с выводом на экран предупреждающего сообщения.
Самое сложное - применить технологию, с помощью которой можно всегда знать, кто находится в данный момент в чате. Если отказаться от этого сервиса, все значительно упрощается, и чат очень слабо будет загружать сервер. Но ведь это не интересно, так что этот вариант мы пропустим, и перейдем к следующему, самому сложному по части программирования фрейму. В нем можно увидеть, кто и сколько времени присутствует в чате. Для реализации данной возможности нам придется и тут авторизовать посетителя по уникальному идентификатору, и
мало того, делать это с определенной периодичностью. Ведь нужно проверять, а не появился ли в чате кто-то новенький и не покинул ли чат кто-то из присутствующих. Чем чаще такие проверки, тем больше нагрузка на сервер. Но вот тут-то можно ограничиться единоразовой авторизацией, а дальше передавать простой идентификатор по методу GET. Его хоть и можно подделать, зато сказать в чате ничего не даст программа из предыдущего фрейма. Ведь там
будет реализована полноценная проверка данных.
Как правило, обновления можно делать раз в 15-20 секунд, а можно добавить специальную кнопочку или ссылку, нажав на которую пользователь обновит окно с Никами присутствующих в чате. Их, конечно, надо как-то учитывать. Делается это еще на этапе загрузчика фреймов. В специальный файл вносятся Ник входящего, время входа и контрольное время. Дальше, после входа описываемый сейчас фрейм, обновляясь с определенной периодичностью, вызывает запись в файл с данными о присутствующих в чате новой информации, но только той, что принадлежит именно ему. То есть - информация других пользователей остается неизменной, обновляется только персональное контрольное время. Заодно проверяется контрольное время других посетителей. Если разность контрольного времени и текущего времени больше установленного (как правило - в 2-3 раза больше чем время обновления фрейма), значит или с браузером этого посетителя нет связи, или он просто закрыл окно чата и ушел. В любом случае можно считать посетителя ушедшим и его данные стираются из файла данных о присутствующих в чате. Таким
образом, эти фреймы всех пользователей обновляют свое собственное контрольное время, что бы ни быть удаленным кем-то другим, и удаляют всех, чье контрольное время превысило установленный максимум. Дальше просто - надо только вывести на экран список из Ников, которые остались в файле. Это и есть список пользователей, присутствующих в чате в режиме on-line.
Вот и все технологии. Точнее, конечно, не все. За бортом остались такие вещи как персональные комнаты, отправка сообщений на ICQ и многое другое. Но это - признаки профессиональных чатов. А если Вы хотите себе именно такой, Вам придется воспользоваться платными программами. Или даже целыми наборами программ. Но если Вы хотите получить удовольствие от собственной разработки, если Вам достаточно простого и не навороченного чата на собственном сайте, Вы можете воспользоваться теми наработками, что описаны в данной статье. Еще раз повторюсь - я не претендую на полноту и законченность своих суждений. Моя цель - побудить Вас провести собственное исследование в области построения чатов. Я намеренно не приводил никаких кодов, что бы не вызвать копирования. Думайте, придумывайте, изменяйте, творите. Приглашаю Вас посетить описанный в этой стате чат в сети Интернет по адресу http://virtual.bresttelecom.by/index.phtml?chat/index.phtml   Там Вы сможете
увидеть работу чата, узнаете на собственном опыте все его достоинства и недостатки.

Кухарчик Андрей @ октябрь 2001
http://virtual.bresttelecom.by/php/
virtualphp@tut.by


Сайты в тему

Предлагаю Вам коллекцию сайтов, где Вы сможете отыскать различную информацию по поводу РНР. Если у Вас есть предложения по поводу расширения этого списка - я с удовольствием добавлю сюда еще один полезный ресурс. Присылайте свои ссылки и описания.

  • http://www.php.net/ - официальный сайт РНР. Масса информации, но только для тех, кто дружит с английским.
  • http://www.php-encoder.f2s.com - защита РНР скриптов UPDATED.
  • http://phpclub.net - Архив бесплатных PHP-приложений (вкл. E-commerce), форумы, чаты, рассылки, книги, обучение, хостинг.
  • http://www.devshed.com/Server_Side/PHP/ интересные статьи по PHP и не только.
  • http://ancient.dax.ru На сайте много готовых решений на PHP: форумы, чаты, гостевые книги и многое другое. Кроме того сам сайт реализован на php.
  • http://detail.phpclub.net/ - как обычно, о РНР.
  • http://firststeps.narod.ru/html/php/php.html
  • http://detail.phpclub.net/
  • http://phpclub.unet.ru
  • http://open.appideas.com/   сборник скриптов
  • http://programmingpub.com/scripts.html   скрипты на perl,php,python,tcl
  • http://px.sklar.com   php сборник скриптов
  • http://phplib.netuse.de   Здесь можно найти самую матёрую библиотеку на php(не отдельные скрипты, а цельное пособие по разработке), только не спешите подписываться на рассылки (авторы думают что все в мире должны знать немецкий
  • http://php.resourceindex.com/   коллекция скриптов
  • http://phpwizard.net   Tobias Ratschiller ничего не говорит?
  • http://www.umnik.f2s.com/ содержит информацию для вебмастера (по всем актуальным языкам веб-программирования), установка домашнего сервера Apache (разных версий)+MySQL+PHP+Perl. Также можно подписаться на рассылки
    "Вопросы и ответы по ОС" и "Будь достойным вебмастера". Имеются множество советов по компьютеру...
  • www.phpbuilder.com Здесь есть все! Форум, статьи, мануал, скрипты, да и вообще очень много профессионалов, тусующихся на сайте.
  • http://phpclasses.upperdesign.com/ Там находится масса классов на php, имеется рассылка на английском
    языке, регистрация бесплатная.
  • http://www.sourceforge.com - Вот IMHO очень полезный сайт. И не только для PHP-программистов, но и для всех остальных. Там десятки тысяч готовых примеров.

Где можно посмотреть

А и правда. РНР, да РНР! А где посмотреть как все это работает и оценить, стоит или нет заниматься этим... Правильное решение будет таким. Посетите сайты, указанные ниже, и посмотрите как они работают. Кстати, если хотите продемонстрировать всем свой проект или то, чего Вы достигли изучая РНР, присылайте ссылку и описание, и все это будет размещено здесь. Только не забудьте поставить у себя наш баннер, можно и не на главной, но буду не против :-) Ссылки на сайты будут вращаться по кругу по мере поступления.

http://virtual.bresttelecom.by - Виртуальный Брест. На РНР работают чат, форум, гостевая, объявления, статистика посещений, обмен компакт дисков, анекдоты.
www.gdekupit.ru Интернет-каталог Где купить в России. Каталог полностью автоматизирован. Регистрация, добавление нового города, Оформление Договора, выписка счета, служба рассылки и т.д. полностью автоматизировано. Все, кроме счетчика посещений на PHP и MySQL. Кстати, регистрация предприятий, расположенных в любом города России, абсолютно бесплатная.
http://www.ohrana.nsk.su - Практически весь сайт написан на PHP. Используется БД на MySQL.
http://www.webclub.lv   - Латвийский Клуб Веб-мастеров Наш сайт предназначен для всех кто творит и хочет творить Интернет. Мы предлагаем информацию, помощь и примеры по дизайну. Довольно обширная коллекция скриптов. Статьи, учебники и многое другое.
http://www.love24h.com/ru/   - международная служба знакомств, все анкеты (более 1500) с фото
http://www.freeglobus.com/ - сайт бесплатных игр (все со скриншотами и линками на загрузку)
http://trinet.wallst.ru - на PHP сделан каталог игр
www.nixers.com - сайт для поиска непостоянной работы в Ирландии. Short term, part-time and temporary jobs in Ireland.
http://karaganda.central.kz - "На связи Караганда" - содержание сайта полностью отделено от оформления.
http://moredeneg.wallst.ru - Сайт о Реальном заработке в сети. На сегодняшний день сайт почти полностью на PHP.
http://www.yanka.f2s.com - полностью написан на PHP. Работают следующие скрипты: новости, talk box, links, фотографии, гостевая, тексты, дневник.
http://softm.vov.ru - программы для бизнеса - это простые решения сложных задач
http://rec.gov.by - Сайт Центральной Комисси Республики Беларусь по выборам и проведению республиканских референдумов.
http://www.zgoda.f2s.com сайт белорусской опозиционной газеты "ЗГОДА" полностью сделан на php:"движок", гостевая, счетчик, голосование, обновление, а так же еще пару других мелких, но полезных фишек.
http://rec.gov.by - Сайт Центральной Комисси Республики Беларусь по выборам AK> и проведению республиканских референдумов.
www.saratoff.ru - "Саратовские народные новости". Новости политики, экономики, культуры, спорта и общественной жизни Саратовской области. Посетители сайта сами могут публиковать собственные новости на сайте. Удобная система администрированная, реализованная на принципиально новой технологии алгоритмизации, с использованием всех возможностей PHP и MySQL позволяет авторизованным пользователям самим создавать и администрировать новые разделы на портале.
www.ecsot.narod.ru  Это сайт ПП "Эксот", которое специализируется на изготовлении сепараторов для очистки сжатого воздуха от масла и влаги.
http://americansingles.to - знакомства, магазин. Много интересного, и вс ена РНР.
http://www.uvd.tula.ru - сайт УВД Тульской области.
http://www.andrey.nnov.ru "Сайт Андрея Зайчикова" - Поможет начинающим программистам стать профессионалами. Алгоритмы, статьи, книги, faq и многое другое.
www.puhlik.f2s.com - Система позволяет провести опрос (голосование) любой целевой аудитории (посетители сайта, участники форума и т.д.). Полностью написана на PHP4 с использование MySQL.
http://flower.lgg.ru - Доставка цветов и подарков
http://autodealer.ru - Все для авто. Поисковая ситема на запчасти. Програмное обеспечение для автобизнеса. Практически весь сайт написан на PHP. Используется БД на MySQL.


Почта рассылки


Обратите внимание: Поступило предложение...

Все, вопрос решен в сторону - БЫТЬ. Дальше, кому не очень интересно, просьба просто не читать и не беспокоиться. А дальше ...

Теперь в рассылке появится постоянная информация об платном обучении. Для начала - предложение заказать бесплатный урок. Для заказа нужно выслать пустое письмо с темой ЗАКАЗ по адресу interphp@tut.by. Все остальное - в ответе на это письмо.


Вопросы и ответы
задать вопрос

Предлагаю Вам присылать свои вопросы на адрес рассылки. Вопрос должен быть кратким, точным и по теме. Ответы на вопросы по мере знаний будут даваться мной, а если я не смогу дать Вам исчерпывающий ответ - кто-то из подписчиков обязательно поможет. А если Вы знаете ответ на заданный вопрос - не поленитесь ответить. Этим Вы очень поможете кому-то решить свою проблему. Синтаксис и грамматика - авторские.

Внимание! - вопросы, на которые никто не ответил не будут переноситься в следующий выпуск. Если вы так и не нашли ответ, попробуйте поточнее сформулировать свою проблему и изложить ее еще раз. Если Вы хотите, что бы авторство ответа указывалось в самом ответе, указывайте ссылку на себя в тексте ответа, тогда она пойдет в рассылку.

задать вопрос

Вопросы: 

  1. Можно ли с помощью PHP отправлять письма в определенное время, если на сайт в это время никто не заходит (т.е не использовать этот способ : некто заходит на сайт, а PHP смотрит: если число совпадает,
    тогда отправить)? Т.е резидентная программа. Заранее благодарен.
    ответить
  2. Тут вот какое дело. Пытаюсь подключить к php flash turbine. Прописываю ее в php.ini. Запускаю апача и он виснет, выдавая следующее:
    Unable to load dynamic library 'c:\php\extensions/turbine/php_turbine.dll' - Присоедененное к системе устройство не работает. При этом все остальные расширения говорят то же самое, хотя обычно молчат. Что за присоедененное устройство и почему не работает?
    ответить
  3. срочно нужна помощь: имеется 10 полей, причем они состоят таким образом:

    Имя : |-------|
    Текст : |------|

    Имя : |-------|
    Текст : |------|

    Имя : |-------|
    Текст : |------|

    Имя : |-------|
    Текст : |------|

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

    Name 1:<input type=text name="name[]">
    Name 2:<input type=text name="name[]">
    Name 3:<input type=text name="name[]">
    ...

    правильно? если правильно то ок, но это полдела :(, как они будут выглядеть у обработчика. Обработчик сам у меня такой:
    mail("mail@mail.ru","subj","\n $name");
    т.е. мне надо чтобы все значения полей вывелись аккуратно в теле письма т.е. примерно так должно выглядеть письмо

    Имя: имя
    Текст: текст

    Имя 2: имя 2
    Текст 2: текст 2

    ...

    вообще такое возможно?
    ответить
  4. Можно ли как-то на локальном компе поотправлять с помощью ПХП E-mailы разным людям? Мне нужна полная гарантия, что мейлы отправятся, так что нужен значит почтовый сервер, который работал бы на localhoste и программа, которая потом, когда соединюсь, отфутболила бы всё это мыло в безграничные просторы Интернета. Подскажите, пожалуйста, как это можна сделать, хотя бы теоретически.
    ответить
  5. Сервер отсылает письма (рассылка) с вложенным файлом в формате xls.

    $body="-----NextPart---\nContent-Type: text/plain;
    charset=koi-8r\n\n$LetterTxt\n\n-----NextPart---\nContent-Type:
    text/html;charset=koi8-r\n\n$LetterHTML
    \n-----NextPart---\nConent-Type: application/vnd.ms-excel;\n
    name=\"forma.xls\"\nContent-Disposition: attachment;\n
    filename=\"forma.xls\"\nContent-Transfer-Encoding: base64\n\n$f ";
    $subject = "=?koi8-r?B?7sXG1MXuz9fP09TJ?=";
    $headers = "From: $from\n";
    $headers .= "X-Sender: <$from>\n";
    $headers .= "X-Mailer: script\n";
    $headers .= "X-Priority: normal\n";
    $headers .= "Return-Path: <$from>\n";
    $headers .= "Mime-Version: 1.0\n";
    $headers .= "Content-Type: multipart/alternative;boundary=\"---NextPart---\"\n";
    mail("$email","$subject",$body,$headers);

    Письма отсылаются, но не все письма имеют вложенный файл. В чем может быть ошибка? Спасибо.
    ответить
  6. Имеем следующий код:

    <?PHP
    //$BaseURL - BaseURL to grab files

    $file = fopen($BaseURL, "r");
    if ($file) { $rf = fread($file, 200000); fclose($file); }
    print($rf);
    //Ищем </FORM> как флаг начала важной информации
    $rf=strtolower($rf);
    $s=explode("</form>",$rf);
    $main="";
    $i=2;$fi=count($s);
    while ($i<$fi):
    $s1=explode("<p>",$s[$i]);
    $ii=0;$fii=count($s1);
    while (($ii<$fii)&&($ii<1)):
    $main=$main.$s1[$ii];
    $ii=$ii+1;
    endwhile;
    $i=$i+1;
    endwhile;
    //print($main);
    print("<p>--------------------------------</p><p>");
    $main1="";
    $s=explode("<a href=",$main);
    $i=1;$fi=count($s);
    while ($i<$fi):
    $s1=explode(">",$s[$i]);
    $ii=0;$fii=count($s1);
    while (($ii<$fii)&&($ii<1)):
    if (substr($s1[0],-4)=="html")
    {$main1=$main1."<a href=".$BaseURL.$s1[0].">xx</a>\n\n";}
    $ii=$ii+1;
    endwhile;
    $i=$i+1;
    endwhile;
    print($main1."</p>");
    ?>

    он должен выводить все ссылки на html страницы архива рассылки (адрес указывается в $BaseURL). При запуске появляется сообщение:

    Warning: php_network_getaddresses: gethostbyname failed in D:\Inetpub\Alex_WEB\grab.php on line 4
    Warning: fopen("Тут BaseURL","r") - No error in D:\Inetpub\Alex_WEB\grab.php on line 4

    PHP стоит под Win 2000 Server. Доступ в Интернет через прокси-сервер. Смотрел логи прокси-сервера, там, пока скрипт выполняется идёт запрос к внешнему DNS-серверу. После этого вылазит ошибка. Может кто подскажет, как это лечится?. Заранее благодарен. Александр.
    ответить
  7. У меня в проьлема в том что мне достался сайт, но он выполнен в формате php который я незнаю, до этого пользовался  html и вот в проблема в том что я не могу изменить дизайн да и вообще что либо, так как я не разбираюсь в php, есть ли варианты редакторов позволяющие работать в режиме html с дальнейшем переходом на php, или же другой какой либо выход, буду блогодарен за ответ.
    ответить


    Ответы на заданные вопросы:
  1. У меня есть большая страница на ПХП. она долго загружается (из базы MySQL) и весит несколько
    мегабайт. ПХП выдаёт, что максимум ексикьюшн тайм иксидед 30 сек. А как увеличить это время. чтобы станица хоть час могла загружаться? У меня конфиги ПХП в файлах с расш. *.conf, только я там нечего не нашёл. Может я не то искал? Или не там? Спасибо. Синсерли.  Влад. (Fox по-нашему)
    Ответ:

    откройте файл php3.ini (для php3) и найдите там такую переменную max_execution_time и дайте там свое время в секундах. или откройте php.ini и найдите ту же строку.

    Используй функцию set_time_limit(int seconds) для установки максимального времени выполнения скрипта. Если нужна более подробная информация - пиши на l0g_err@xakep.ru

    В файле php.ini найди строку max_execution_time=30 и исправь как тебе надо puhlik

    Заходишь любым текстовым редактором в файл php.ini, который размещен в C:\WINDOWS,   C:\WINNT, C:\WTSRV (в зависимости от того, какая операционка) и ищешь параметр max_execution_time. Это и есть максимально допустимое время работы скрипта в секундах. Альтернатива: если не хочешь менять глобальные настройки php.ini, вызови в начале своего  скрипта функцию set_time_limit. Единственный аргумент - то самое максимальное время в секундах.Павел, Донецк, Украина. pavel@imail.dc.ukrtel.net

    Вставь в PHP скрипт строку:
    set_time_limit(0);
    Эта команда позволит выполняться скрипту бесконечно долго!

    set_time_limit
    set_time_limit -- Установка лимита на максимальное время работы скрипта
    Описание
    void set_time_limit(int seconds);
    Устанавливает длительность в секундах, во время которого скрипт должен быть выполнен. Если период превышен, то скрипт возвращает фатальную ошибку. По умолчанию лимит составляет 30 секунд или, если этот параметр установлен, значение max_execution_time в php3.ini. Если значение установлено в ноль(0), то лимит выключен. При вызова, set_time_limit() перезапускает счетчик времени исполнения
    с нуля. Другими словами, если установлен лимит по умолчанию 30 секунд, и прошло 25 секунд со времени запуска, то после вызова et_time_limit( 20 ) общее время будет составлять 45 секунд после с начала запуска скрипта.

    ini_set("max_execution_time","1000");
    ...
    ini_restore("max_execution_time");

    Привет Влад! Это частая проблема и состоит из двух частей:
    - timt limit в php лечится добавлением вызова функции set_time_limit(0); в начале скрипта.
    - time reply limit в ожидание ответа броузера от сервера - лечится выводом пробельчика в начале работы
    скрипта - echo " "; flush();. flush() - обязателен.Удачи.PS. Если не понятно - пиши мылом dbc@infomarket.ru

  2. У меня вопрос по PHP:
    Есть б.д. архивных новостей, table archive содержит следующие поля:
    $id - уникальный номер;
    $name- заголовок новости;
    $datum=time() - содержит текущее время в виде числа;
    $comment содержание новости;
    Файл main.php выводит заголовки новостей в убывающем порядке:
    $query="select * from $userstable where year='2001' order by datum desc";
    $result=MYSQL_QUERY($query);
    while($row=mysql_fetch_array($result)){
    echo "<a href='view.php?id=$row[id]'>".$row["name"]."</a><br>";
    }
    А файл view.php выводит саму новость.
    Так вот, мне бы хотелось организовать это более универсально (понимаю, что нужно использовать
    циклы, но
    как?), а то приходится делать несколько однотипных запросов, только меняя год в условии отбора.
    И, чтобы, в
    итоге содержимое выводилось в следющем виде:
    2001
    Заголовок6
    Заголовок5
    Заголовок4
    2000
    Заголовок3
    Заголовок2
    Заголовок1
    и т.д.
    Ответ:

    Попробоуй так:
    for ($step=2001; $step<2010; $step++)
    {
    $query="SELECT * FROM $userstable WHERE year='$step' ORDER BY datum
    DESC";
    $result=MYSQL_QUERY($query);
    echo"Год ".$step."<br>";
    while($row=mysql_fetch_array($result))
    {
    echo "<a href='view.php?id=$row[id]'>".$row["name"]."</a><br>";
    }
    } //for
    Должно выводиться с 2001 по 2010 года (начальное значение и диапазон выбери сам) :))) Если что непонятно - пиши на l0g_err@xakep.ru

    for ($ye=2001;$ye<1997;$ye--){
    $query="select * from $userstable where year='" . $ye . "' order by datum desc";
    $result=MYSQL_QUERY($query);
    дальше "разобрать" результат и вывести

  3. Как работать с DBF-файлами. Вернее с самим DBF-файлом работать я умею. У меня есть программа на Делфях которая делает записи в таких файлах. В главном файле есть поле с типом MEMO в котором содержаться записи находящиеся в файле с расширением *.DBM. Так вот я не знаю КАК взять с этого
    файла записи.
    Ответ:


    Ответов не было.

  4. я хочу сделать переадрессацию по 404-й ошибке, для чего в файле .htaccess пишу, чтоб по этой самой 404-й вызывалась my.php, в начале коротой я посылаю нормальный хедер 200: Ок. Но у меня
    выскакивает ошибка 500. Не подскажешь ли, что делать? С уважением, Cage
    Ответ:

    Возможно проблема в том, что ты не указываешь версию протокола. У меня всю жизнь работает тактая конструкция:
    <?
    ...
    $request = $REQUEST_URI; // строка запроса
    $request = eregi_replace( "/path/subpath_to_script/", "", $request);
    //отрезаем все то, что идет до скрипта
    if($request!=""): //Если прописан несуществующий путь
    header("http/1.0 200 Ok");
    ...
    endif;
    ...
    ?> Если непонятно - пиши на l0g_err@xakep.ru

  5. А как проверить число (дату) в следующем формате на корректность 00.00.0000 (причем первые два нуля это день и он не может превышать 31, вторые это месяц и не могут превышать 12, третьи год здесь все ОК) ??? Т.е. предположим пользователь вводит в тектовое окошко число 23.12.2001, скрипт проверяет его на корректность и выводит сообщение, что это правильное число. Если вводит что-нибудь вроде 41.32.2001, то это не правильно и выдается ошибка.
    Ответ:

    Насчёт проверки как формата даты — без понятия. Но если проверить просто цифры, то можно командой SubStr:
    00.00.0000 - это дд-мм-гггг.
    $Date это переменная, содержащая эти гг и дд.

    If (SubStr($Date,0,2) > 31 or SubStr($Date,3,2) > 12 Or SubStr($Date,6,4) > 2001) Echo 'Неверная
    дата';
    Кажись, так будет верно. Но! Не забывай, что день, месяц и год не могут быть меньше единицы. В этом случае Ифа усложняется:
    If (SubStr($Date,0,2) > 31 or SubStr($Date,3,2) > 12 Or SubStr($Date,6,4) > 2001 Or
    SubStr($Date,0,2) < 1 or SubStr($Date,3,2) < 1 Or SubStr($Date,6,4) < 1) Echo 'Неверная дата';
    Жутковато, зато работает. AL.mailto:alka@btsau.kiev.ua

    :) нужна хитрость :):
    <?
    if (empty($add)) {
    ?>
    <form method=post action="<? echo $PHP_SELF;?>">
    <input type=text name=day size=10>.<input type=text name=month size=10>.<input
    type=text name=year size=15><input type=submit name=add></form>
    <?
    }
    else {
    $intday=intval($day);
    $intmonth=intval($month);
    $intyear=intval($year);
    if ($intday > 31 && $intmonth > 12 && $intyear > 2999) {
    echo "error";
    }
    else {
    echo "ok";
    }
    }
    ?>

    Можно так:
    <?
    $parse_data = explode($request_data,"."); //разбиваем полученую
    строку на элементы массива, используя точку как разделитель
    /*
    В результате получаем:
    $parse_data[0] - дни
    $parse_data[1] - месяцы
    $parse_data[2] - годы
    После чего проверяем вхождение в диапазон
    */
    if
    ((($parse_data[0]>31)OR($parse_data[0]<0))OR(($parse_data[1]>12)OR
    ($parse_data[1]<0))OR(($parse_data[2]<0)OR($parse_data[2]>2010))):
    echo"Incorrect data";
    exit; // Завершение обработки скрипта
    endif;
    ?>
    Можно поступить по другому - через регулярные выражения: Вот код приложения, который реялизует оба метода:
    <?
    switch ($method)
    {
    case (1):
    if (ereg("^([4-9]{1}.+)|(^[2-9]{1}.+)",$request_data)):
    echo"Incorrect data";
    exit;
    else:
    echo"Correct data";
    endif;
    break;
    default:
    $parse_data = explode(".",$request_data);
    if
    ((($parse_data[0]>31)OR($parse_data[0]<0))OR(($parse_data[1]>12)OR
    ($parse_data[1]<0))OR(($parse_data[2]<0)OR($parse_data[2]>2010))):
    echo"Incorrect data";
    exit;
    else:
    echo"Correct data";
    endif;
    break;
    }
    ?>
    А вот тестовая страница:
    <html><head><title></title></head>
    <body><h4>Simple method</h4>
    <form action="data_test.php">
    <input type="text" name="request_data"><br>
    <input type="submit" value="go"></form><hr>
    <h4>Advanced Method (POSIX) </h4>
    <form action="data_test.php">
    <input type="hidden" mane="method" value="1">
    <input type="text" name="request_data"><br>
    <input type="submit" value="go">
    </form></body></html>
    Если что непонятно - пиши на l0g_err@xakep.ru

    Есть такая функция:
    checkdate (int month, int day, int year)
    Она и вернет true в случае корректной даты и false в противном. Алексей Мельник

    Проверка правильного написания email-а:
    if (!eregi("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,4}$", $email))
    print("Bad email: "$email"");  аналогично проверяй дату

    А слабо взять
    $mydate = "00.00.0000";
    $lazha = explode (".", $mydate);
    и проверить соответственно $lazha[0...2] на предмет вопроса? Если не получится - напиши eav@hotmail.ru  (Андрей, http://www.eav.vov.ru )

    cm. manual int checkdate (int month, int day, int year)
    $dd = explode(".","41.22.9999");
    $valid = checkdate($dd[1], $dd[0], $dd[2]); // именно так - int checkdate (int month, int day,
    int year)


  6. Кто может поделится информацией о РНР для чайников самое начальное пособие(как компилировать прогу и т.д.)
    Ответ:

    мне очень нравится прога EditPlus для компиляции и подсветки синтаксиса. А дальше дело в извилинах

    Там компилить ничего не надо. :))) Ты себе РНР поставил? Если да то пиши на l0g_err@xakep.ru расскажу кое чего. Полезную инфу ты можешь взять из архива данной рассылки ;)

  7. Привет, всем! Проблема есть у меня, может для кого и простая, но я пока не могу ее решить, знаний не хватает. Есть директория, в ней лежат текстовые файлы содержащие:
    npaper|#02|(02)|15 октября 2001|
    заголовок
    Автор
    Сам текс
    ______
    При обращении к директории, где лежат эти файлы мне надо прочитать, в первом случае, его первую
    строчку и вывести на экран и далее под этой строчкой вывести вторые строчки остальных файлов,
    чтобы получилось сделующее.
    npaper|#02|(02)|15 октября 2001|
    заголовок
    заголовок
    заголовок
    заголовок
    заголовок
    ...
    Потом при щелчке по определенному заголовку происходил вывод всего файла, но уже без перфой
    строчки. Вида:
    заголовок
    Автор
    Сам текс
    Ответ:

    У меня такое реально работает на ПХП на сайте www.doba.cv.ua Если заинтересовало, пиши на мыло обясню подробнее. Vitaly, mailto:james@sacura.net

  8. Например, у меня есть ссылки вида:
    2001
    ссылка1 ссылка2 ссылка3
    2000
    ссылка1 ссылка2 ссылка3
    и т.д.
    Так вот я разбила ссылки по годам, т.е.
    http://127.0.0.1/index.php?link=1
    загржается 1.php (соотв-т 2001 году)
    http://127.0.0.1/index.php?link=2
    загржается 2.php (соотв-т 2000 году)
    А "ссылка1 ссылка2 ссылка3", являются внтренними для каждого года, т.е. хотелось бы сослаться на них, с помощью якоря т.е. в файле 1.php я пишу: <a name="1"> Ссылка1</a>, а потом в броузере:
    http://127.0.0.1/index.php?link=1#1
    Но мне выдается ошибка Internal Server Error, нежели при такого вида ссылке нельзя использовать якоря? Ведь вводить второй уровень типа
    http://127.0.0.1/test/books/index.php?link=1&&name=1
    очень неудобно, так как в этом случае документ 1.php придется разбивать на поддокументы, что приведет к образованию кучи "матрешек",  можно ли как-нибудь иначе решить данную проблему, но не разбивая файлы?
    Ответ:


    Ошибка, скорее всего возникает из-за того, что ты используешь оператор switch подобным образом:
    switch ($link)
    {
    case 1:
    ...
    break;
    case 2:
    ...
    break;
    ...
    }
    Переменная передается в следующем виде:
    $link = <page>#<position>
    Решить проблему можно так:
    1.
    Страница со ссылками:
    <html><head><title></title></head><body>
    <h3>2001</h3>
    <a href="link.php?link=1#1">Article 1</a><br>
    <a href="link.php?link=1#2">Article 2</a><br>
    <a href="link.php?link=1#3">Article 3</a><br>
    <a href="link.php?link=1#4">Article 4</a><br>
    <hr>
    <h3>2002</h3>
    <a href="link.php?link=2#1">Article 1</a><br>
    <a href="link.php?link=2#2">Article 2</a><br>
    <a href="link.php?link=2#3">Article 3</a><br>
    <a href="link.php?link=2#4">Article 4</a><br>
    <a href="link.php?link=2#5">Article 5</a><br>
    <hr><h3>2003</h3>
    <a href="link.php?link=3#1">Article 1</a><br>
    <a href="link.php?link=3#2">Article 2</a><br>
    <a href="link.php?link=3#3">Article 3</a><br>
    <a href="link.php?link=3#4">Article 4</a><br>
    <a href="link.php?link=3#5">Article 5</a><br>
    </body></html>
    2. Скрипт для обработки:
    <?
    $link_on_page = explode("#",$link); // Здесь мы разбиваем переменную
    на страницу и якорь
    switch($link_on_page[0])
    {
    case 1:
    header("Location: 1.html".$link_on_page[1]);
    break;
    case 2:
    header("Location: 2.html".$link_on_page[1]);
    break;
    case 3:
    header("Location: 3.html".$link_on_page[1]);
    break;
    case 4:
    header("Location: 4.html".$link_on_page[1]);
    break;
    default:
    echo"page Default<br>";
    break;
    }
    ?>
    3. Шаблон страницы со статьями:
    <html><head><title>Page 1</title></head>
    <body>
    <a name="1">Article
    1</a><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br>
    <hr>
    <a name="2">Article
    2</a><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br>
    <hr>
    <a name="3">Article
    3</a><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br>
    <hr>
    <a name="4">Article
    4</a><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br>
    </body></html>
    Такой механизм работает без проблем. Если возникнут проблемы - пиши на l0g_err@xakep.ru

    >http://127.0.0.1/index.php?link=1#1
    помоему надо писать
    http://127.0.0.1/index.php#1?link=1

    Не знаю как ...#1, но у меня
    (http://www.eav.vov.ru/pract/stat/index.html?stat=all#stat2) работает.
    Андрей eav@hotmail.ru

  9. Вопрос по PHP:
    А как, с помощью цикла выводить данные в следующем табличном виде:
    Ссылка1 Ссылка4
    Ссылка2 Ссылка5
    Ссылка3 Ссылка6
    Т.е. чтобы данне разбивались по столбцам?
    Ответ:

    Во, придумал! Я сам делал раньше немного другую структуру, которорая выводила строки в виде:
    Строка1 Строка2
    Строка3 Строка4
    Вот скрипт, который выводит элементы массива в виде:
    Строка1 Строка4
    Строка2 Строка5
    Строка3 Строка6
    Массив, надеюсь сможешь сделать сам из чего угодно (в пиримере он задан жестко):
    <?
    $array_link = array("link1","link2","link3","link4","link5","link6","link7","link8",);
    $first_half = '';
    $second_half = '';
    $result_string = '';
    echo"<table border=1>";
    for ($i=0;$i<(sizeof($array_link)/2);$i++)
    {
    $first_half[$i] .= "<tr><td>".$array_link[$i]."</td>";
    }
    for ($i=(sizeof($array_link)/2);$i<sizeof($array_link);$i++)
    {
    $second_half[$i] .= "<td>".$array_link[$i]."</td></tr>";
    }
    for ($i=0;$i<sizeof($array_link);$i++)
    {
    $j = $i+(sizeof($array_link)/2);
    $result_string .=$first_half[$i].$second_half[$j];
    }
    echo$result_string;
    echo"</table>";
    ?>
    В результате получаем таблицу с нужной нам сортировкой. Если непонятно - пиши на l0g_err@xakep.ru  объясню поподробнее

    Смотря откуда получать данные. Например, есть массив ссылок:
    <? $links_array=array ( "<A href='link1'>Ссылка1</A>",
    "<A href='link2'>Ссылка2</A>",
    "<A href='link3'>Ссылка3</A>",
    "<A href='link4'>Ссылка4</A>",
    "<A href='link5'>Ссылка5</A>",
    "<A href='link6'>Ссылка6</A>" ); //заполняем массив
    $count=count($links_array); //считаем кол-во елементов
    $count=ceil($count/2); //округляем до большего кол-во/2
    ECHO ("<HTML><BODY><TABLE>");
    FOR ($i=0; $i<($count); $i++) {
    ECHO ("<TR><TD>".$links_array[$i]."</TD><TD>".$links_array[$i+$count]."</TD></TR>\n");
    //собственно вывод
    }
    ECHO ("</TABLE></BODY></HTML>"); ?>
    Чего не будет ясно, спрашивай мылом mailto:james@sacura.net Vitaly.

    Если сделать так:
    01 <TABLE><TH>Ссылки</TH>
    02 <?
    03 $cols = 2; // количество колонок со ссылками
    04 // Количество ссылок известно?
    05 // Если нет, то лучше их посчитать.
    06 // А еще лучше - загнать в массив $links (а где они еще могут храниться?)
    07 // Тогда -
    08 $rows = (int) (count($links)/$cols);
    09 for ($i=0; $i<=$rows ; $i++) {
    10 echo "<TR>\n";
    11 for ($j=0; $j<$cols; $j++) {
    12 echo "<TD>$links[$i+$j*$rows]</TD>\n";
    13 // если ссылка в виде URL, то, конечно надо дописать A HREF...
    14 }
    15 echo "</TR>\n";
    16 }
    17 ?>
    18 </TABLE>
    И все. Получится:
    Ссылка1 Ссылка4
    Ссылка2 Ссылка5
    Ссылка3 Ссылка6
    Если же надо
    Ссылка1 Ссылка2
    Ссылка3 Ссылка4
    Ссылка5 Ссылка6
    тогда
    09: for ($i=0; $i<=count($links); $i+=$cols) {
    12: echo "<TD>$links[$i+$j]</TD>\n";
    Удачи! Андрей | http://www.eav.vov.ru | eav@hotmail.ru

    задать вопрос


Обмен ссылками и баннерами

Предлагаю Вам стать участниками баннерообмена. Ваши ссылки и описания Ваших сайтов вы можете присылать по адресу рассылки - virtualphp@tut.by Все ссылки обязательно появятся в этой рассылке. Если есть желание разместить свой баннер 88*31 на сайте рассылки http://virtual.bresttelecom.by/php/ , укажите это дополнительно, и пришлите код своего баннера. В любом случае, Вам надо будет разместить у себя код баннера сайта рассылки, и только на главной страничке Вашего сайта.

Взять код моего баннера (на выбор) можно по адресу: http://virtual.bresttelecom.by/php/index.phtml?php/banner.html или воспользоваться этим:

<a href="http://virtual.bresttelecom.by/php/"><IMG SRC="http://virtual.bresttelecom.by/baner/8831.phtml"
alt="Виртуальный Брест" width="88" height="31" border="0"></a>

Наши друзья

Правила у меня стандартные - описания Ваших сайтов будут периодически (в зависимости от их количества) размещаться в рассылке. И конечно - будет отдельная страничка на сайте, на которой будут представлены все друзья сайта.

http://virtual.bresttelecom.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://price.bresttelecom.by - сайт прайсов фирм города Бреста. Поиск, подсчет, реклама и т.д.
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевог
о друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!
http://saleha.al.ru/anecdot/index.phtml   - самые новые и смешные анекдоты.
http://klepan.narod.ru  - Халява pliz! - реферал клуб.
http://www.ohrana.nsk.su - Название: Управления вневедомственной охраны г.Новосибирска. Описание: Услуги по охране квартири других объектов, сопровождение грузов. На сайте: интересные статьи, новости, криминальная хроника, вакансии и другая полезная информация!
http://www.programing.narod.ru - программирование на РНР
http://icebreaker.dax.ru - самый информативный сайт об ударных инструментах, здесь находится огромное количество полезной информации для ударника:фотографии,статьи,табулатуры,самоучители,ссылки и много чего ещё!
http://webd.hut.ru - AGS Design. Сайт для вебмастера. 1500+ изображений фонов, иконки и кнопки, отличная графика, скрипты, очень понятная документация по различным языкам программирования, изучение Фотошоп
от А до Я, и мн. др.
www.nokstr.dax.ru - Программы, статьи и примеры по Visual Basic, C++, Халява.
http://www.ancient.dax.ru - Ancient - Каталог Веб-Мастера. Бесплатные скрипты CGI, PHP, JAVA
WebCraft - всё для вебмастеров, увеличение вашего трафика на 200 посетителей в день.

http://softm.h1.ru/ - программы для бизнеса - это простые решения сложных задач
http://moskalyuk.com/links/index.htm . На сайте собрана коллекция ссылок, причем, как нетрудно убедиться, многие посвящены программированию и компьютерным наукам. По РНР отдельно пока ничего нет, просто в последнее время я увлекался языком Perl, кому-то может показаться интересным.
http://sos.dax.ru - Проект "SOS:Помощь пользователю". На сайте вы найдете множество статей, советов по компьютеру. Всегда свежий софт. А также вы сможете задать вопрос и получить на него моментальный ответ. Если вам нужна помощь - мы поможем вам!
http://www.uvd.tula.ru - сайт криминальной милиции УВД Тульской области. Здесь будет все, что касается милиции, права и жизни города Тулы.
http://www.pro-forex.com/ru/index.php - Большой проект финансовой тематики, полностью реализованный на PHP и MySql: Дилинговый Центр PRO-FOREX.COM
http://myvote.hut.ru - MyVote - голосование на Вашем сайте.Сервис для всех вебмастеров, которые хотят сделать свой сайт более интерактивным. Позволяет организовать опрос мненияпользователей на любом сервере.
http://kinfa.narod.ru/ "Для программистов, Web - мастеров, разработчиков и пользователей, интересующихся новыми возможностями языка HTML"
http://catsclub.boom.ru - Все о кошках в Кошкином Клубе
www.adelavida.com.ua - Юмор, Галерея совремённых художников, Советы по Виндозе, Полезные ссылки
http://www.sura.ru/maxwell Математика, Алгоритмы, Программирование. На сайте можно найти описания различных алгоритмов и методов, относящихся к различным математическим (и не только) дисциплинам.
http://rodinaaa.nm.ru - Велкам в "Уголок Родины", на персональную страницу Бориса Киреева aka Генерал Родина. Здесь Вы можете познакомиться с моим как бы литературнымтворчеством. Творчеством моих друзей.
ermakov.hut.ru - Не нажимайте на эту ссылку! Все равно на Абсолютно бесполезном сайте Вы не найдете ничего, кроме самых интересных кроссвордов, обычных и не очень, самых смешных анекдотов. Стоит ли идти на этот сайт для того, чтобы подписаться на лучшую кроссвордную рассылку Subscribe.ru?!


Подпишитесь на рассылки!

Рассылки Subscribe.Ru
Программируем на PHP - вопросы и ответы
Новости сайта Виртуальный Брест
Оптимизация и настройка компьютера
SOS:Помощь пользователю Интернета
Вэб-строительство Профессионалам
Кроссворды от К.Ермакова
JavaScript и PHP
:-) ШуТкИ - ШутКамИ (-:
Dummpy Daily eTips
Аббревиатуры и термины в компьютерном мире

Здесь будет публиковаться список рассылок, рекомендуемых к подписке. Если у Вас есть рассылка - предлагаю Вам обменяться подобной формочкой для подписчиков. Достаточно прислать мне код рассылки и ее название.


автор рассылки Андрей Кухарчик / http://virtual.bresttelecom.by/php



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное