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

Программируем на PHP - вопросы и ответы. 6 Кирпичей под обстрел


Информация от Владельца Рассылки...
http://virtual.brest.by - портал Виртуальный Брест

http://bel-host.info - Хостинг для ваших сайтов




Познавательная рассылка "Программируем на PHP - вопросы и ответы."
Уважаемый подписчик!
PHP есть скриптовый язык, позволяющий делать много полезностей Web-дизайнеру. Рассылка дает ответы на многие вопросы и учит правильно использовать это мощное средство. Вся работа построена на опубликовании шаг за шагом ряда статей с примерами, а кроме этого будет раздел вопросов и ответов, где Вы получите исчерпывающий ответ на свои вопросы.

А.Ю. Фоменко

"6 Кирпичей под обстрел"



Добрый день!

Сегодня у нас вводится новая главная рубрика. Условно её можно назвать "6 Кирпичей под обстрел". Она находится сразу после моего Вам приветствия. Которое Вы сейчас читаете.

Посвящена она кирпичной технологии создания сайта. И была предложена одним из активных участников рассылки Александром. Вдохновила Александра на это моя авторская технология погружения в PHP программирования новичка. Желающего изучить PHP. Её имя "6 Кирпичиков"

Подробности смотрите по ссылке: "6 Кирпичиков"

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

"Подступы К "6 Кирпичикам", Или
Если Вы Решили Начать
Изучать Программирование На PHP,
То Самый Простой Вариант
Стартовать - Это Применить "6 Кирпичей"


Лично я не знаю ни одного другого разумного способа применения PHP языка (и интерпретатора) кроме использования для построения и "начинки" сайтов.

Александр (winbond)

В прошлом выпуске Александр предложил устроить что-то вроде конкурса на звание "Лучший кладочник кирпичей в рассылке" (-: Я поддержал эту инициативу. Вместе со мной её поддержали ещё ряд подписчиков-экспертов. Они прислали свои варианты на этот конкурс.

Незамедлительно публикую их.

Здравствуйте saitkakprizvanie,

Задача с колонками решается очень просто. Это сделано на моём сайте: http://www.russia.alakurtti.ru На сайте остаются неизменными не только левое и правое поле, но так же верхнее и нижнее. Что касается исходников, то это делается так:

Пример построения сайта просто с тремя колонками:

Файл index.php
<?
$div=1;
include ("main.inc");
?>

файл main.inc
<html>
<head>
<title></title>
</head>

<body>
<table border="0" width=100%>
<tr>
<td width="20%">
<?include ("navigation.inc");?>
</td>
<td>
<?include ("text.inc");?>
</td>
<td width="20%">
<?include ("sponsors.inc");?>
</td>
</tr>
<table>
</body>
</html>

Файл navigation.inc
<a href="index.php">Главная</a><br>
<a href="youpage2.php">Страница 2</a> <a href="youpage3.php">Страница 3</a>

Файл text.inc
<?
if($div==1){
include ("index.inc");
}
if($div==2){
include ("youpage2.inc");
}
if($div==3){
include ("youpage3.inc");
}
?>

Файл sponsors.inc
<?
....
Что-то
....
?>

Файл index.inc <?
....
Что-то
....
?>

Аналогично index.php делаются страницы youpage2.php и youpage3.php, только меняется значение переменной $div на 2 и 3 соответственно.

В файлах index.inc, youpage2.inc и youpage3.inc любой текст, который должен отображаться в браузере. Именно он будет меняться при переходе со страницы на страницу.

В файле sponsors.inc любой текст. Этот текст будет постоянен на всех страницах.

--
С уважением, spaser



Здравствуйте, saitkakprizvanie. Извините!

Это прикол?

Тогда я не понял в чем "изюминка".

А include зачем?

Или имеется ввиду технология AJAX, тогда совершенно другое дело. Кстати могу поделиться собственным опытом, как методами PHP узнать, включена ли поддержка JS у клиента.

--
С уважением, SABOR



Да в принципе ничего сложного. Создаем файл с разширением PHP, назовем его index.php. Средствами HTML создаем определенный бланк или форму, как угодно. Т.е. разбиваем его на три колонки. Информацию в средней колонке можено гененрировать при помощи определенного GET-запроса, например, index.php?cmd=text. А дальше, средствами PHP, выбирая условием, например:   <?php
if ($cmd == "text")
 {
 echo "Сгенерирован такой-то текст.";
 }
?>  

Вот в принципе и все. Или можно вместо echo вставить инфу из какого-либо файла функцией include().

С уважением, Иванов В.И.





Здравствуйте А.Ю., На сайте http://066.jino-net.ru/demo/bricks выложил свои кирпичи. Оформление немного передрал с Вашего сайта. Как вам?

--
С уважением, Александр (winbond)




Вот пока и все варианты кирпичей. Которые с помощью технологии PHP помогут Вам вступить на увлекательную тропу программирования на PHP. Напомню, мой Вариант кирпичей называется "6 Кирпичиков", а его описание находится по этому адресу: http://sitesozdat.com/saitphpsait.php

Применяйте на практике кирпичи. Присылайте мне свои отзывы, мнения о них. Практические примеры работы... Пишите

"Вопрос-ответ"


Вопрос 3


а подскажите все-таки сервис, который __из php делает html__! а именно, динамические страницы php переделывает в статику... очень надо)

Ответ 3


Есть такой сервис. Только я его сам писал. Если нужно пришлю.

=----------------=
Ильжан Нусратуллин



Для перевода php в html существует прекрасный комплекс под названием "Денвер-2". Этот комплекс полностью подходит для программирования "ручками". Даже при локальном тестировании сайта адрес нужно вводить точно также как будто вы в интернете. Комплекс совершенно бесплатный.

Он включает в себя интерпретатор PHP, сервер Апач, базу данных MySQl и интерпретатор пёрл. Также он полностью автоматезирован и краткий справочник по использованию на русском языке. Скачать его можно здесь: http://denwer.ru Берите самую последнюю версию.

--
С уважением, spaser



Вопрос 5


Здравствуйте, saitkakprizvanie.

Скажите, как сделать, чтобы заказ с интернет-магазина отправлялся на сотовый телефон, также как на e-mail?

--
С уважением, Вячеслав

Ответ 5


Отправляй заказ по схеме +номер_мобильника@url_operatora , но здесь есть два нюанса, смс должно быть в латинице до 150 символов (в зависимости от длины исходящего емаил) и придется составлять свою базу емаил операторов или найти оператора который поддерживает рассылку емаил смс другим операторам.

С ув. Евгений Киселев

http://reseller.org.ua



Вопрос 7


Здравствуйте saitkakprizvanie,

Я занимаюсь программированием на PHP уже давно, но у меня пару дней назад возник такой вопрос: как сделать загрузку java приложений с собственного сайта на собственный мобильник? Wap страницу я создал. Мобильник её видит, но как осуществить саму загрузку? Чтобы предупредить вопросы добавлю: мобильник не поддерживает загрузку java приложений через дата-кабель или ик порт, а игр я купил на диске много. Да и свои приложения планируется создавать для всех.

--
С уважением, spaser

Ответ 7


Сделай ссылку на jad файл, в котором должна быть строка MIDlet-Jar-URL:
ira.jar

ira.jar - имя мидлета

Естественно в по указанному url должен быть jar файл.

С ув. Евгений Киселев

http://reseller.org.ua



Вопрос 8


Подскажите, а как создать с помощью РНР маленький портал?

--
Angel7

Ответ 8


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

А вообще чтение документации + пара книг решает практически все вопросы, в том числе и написание портала.

С ув. Евгений Киселев

http://reseller.org.ua



Вопрос 9


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

Как отправлять письма с вложениями? Если нетрудно, укажите исходный код с комментариями.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
С уважением, Ведин Константин.
Удачи и до встречи!



Ответ 9


Здравствуйте, saitkakprizvanie.

Для отправки писем с вложениями с Сети можно найти специальные классы на PHP. Кроме того надо разобраться со спецификацией MIME

В качестве примера приведу свой код, работающий на сайте www.ddwshop.com Типа универсальная программа отправки писем с вложениями Файл rs_send.inc

********************************************
<?php
# Установки по умолчанию
$from = "От кого ";
$message = "Сообщение";
$subject = "Тема";
$attach=array();

# Фунуция отправки
function sendmail($from, $to, $subject, $message, $file, $file_name, $attach){
$headers = "";
$unique_sep = md5(uniqid(time()));
$filedata = implode(file($file), '');

$headers .= "From: $from\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$unique_sep\";\n";
$headers .= "charset=\"WINDOWS-1251\"\n Content-Transfer-Encoding: binary\n\n";
$headers .= "--$unique_sep\n";

$headers .= "Content-Type: text/html; name=\"$file_name\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: inline\n\n";
$headers .= chunk_split(base64_encode($filedata));
$headers .= "--$unique_sep\n";

if (isset($attach) and count($attach)>0){
$unique_sep1 = md5(uniqid(time()));
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/related; boundary=\"$unique_sep1\";\n";
$headers .= "charset=\"WINDOWS-1251\"\n Content-Transfer-Encoding: binary\n\n";
$headers .= "--$unique_sep1\n";
for ($x=0;$x $arr_attach=explode("|",$attach[$x]);
$file = $arr_attach[0];
$file_name = $arr_attach[1];
$contenttype = $arr_attach[2];
$filedata = implode(file($file), '');
$headers .= "Content-Type: $contenttype; name=\"$file_name\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: attachment\n\n";
$headers .= chunk_split(base64_encode($filedata));
if ($x $headers .= "--$unique_sep1\n";
}else{
$headers .= "--$unique_sep1--\n";
}
}
}
$headers .= "--$unique_sep--\n";

mail($to, $subject, $message, $headers);

}
# Конец функции отправки
?>
********************************************
Ну и собственно скрипт создания письма и вложений Файл rs.php Скрипт, естественно сокращен
********************************************
<?php
require "rs_send.inc";

# Определяемся кому чего отправлять
$to="email@получателя";
# ОТПРАВЛЯЕМ
$file = "out/newtov.html";
$file_name = "newtov.html";
$attach=array();
$attach[]="out/slogan.gif|slogan.gif|image/gif";
$attach[]="out/kat_1.gif|kat_1.gif|image/gif";
$attach[]="out/kat_2.gif|kat_2.gif|image/gif";
$attach[]="out/kat_3.gif|kat_3.gif|image/gif";
sendmail($from, $to, $subject, $message, $file, $file_name, $attach);
exit;
?>
********************************************

--
С уважением,
Александр Ролланович Каратаев
компания DDW
тел: 7+(3272) 55-02-18
факс: 7+(3272) 296 731



Доброго времени суток saitkakprizvanie,

Вот готовый класс для отправки писем. Можно отправлять простой текст, html, тескт+вложение, html+вложение.

<?php
/*
© 2006 Сеник Алексей Владимирович aka MrSlim

*/

// Класс для отправки почтовых сообщений
class Mailer
{
var $headers; // (string) Заголовки
var $subject; // (string) Тема письма
var $body; // (string) Тело письма
var $text; // (string) Текст письма (txt)
var $html; // (string) Текст письма (html)
var $from; // (string) От кого
var $to; // (string) Кому
var $contentType; // (string) content_type
var $charset; // (string) Кодировка
var $aAttaches; // (array) Прикрепленные файлы
var $htmlTemplate; // (string) Шаблон для html-письма
var $boundary; // (string) Метка

// Конструктор класса
function Mailer()
{
$this->contentType = 'text/plain';
$this->charset = 'Windows-1251';
$this->attached = array();
$this->boundary = '----'.substr(md5(uniqid(rand(),true)),0,16);
$this->htmlTemplate = '{body}';
}

// Добавить заголовок
function DoHeader($header)
{
$this->headers .= $header."\r\n";
}

// Прикрепить файл
function Attach($filePath,$mimeType)
{
if (file_exists($filePath))
{
$fileName=basename($filePath);
$attach ="Content-Type: $mimeType; name=\"$fileName\"\r\n";
$attach.="Content-Disposition: attachment; filename=\"$fileName\"\r\n";
$attach.="Content-Transfer-Encoding: base64\r\n";
$attach.="\r\n";
$attach.=base64_encode(file_get_contents($filePath))."\r\n";
$this->aAttaches[] = $attach;
}
}
// Добавить HTML
function AddHtml($html)
{
$this->html.=$html."\r\n";
}

// Установить шаблон
function SetTemplate($path)
{
if (file_exists($path)) $this->htmlTemplate = file_get_contents($path);
}
// Отправить
function Send()
{
$countAtt=count($this->aAttaches);
$this->headers ="From: {$this->from}\r\n";
$this->headers.="MIME-Version: 1.0\r\n";
if (!$this->html && !$countAtt)
{
$this->headers.='Content-Type: text/plain; charset='.$this->charset."\r\n";
$this->body = $this->text;
}
elseif ($this->html && !$countAtt)
{
$this->headers.='Content-Type: text/html; charset='.$this->charset."\r\n";
$fields=array();
$fields['{title}']=$this->subject;
$fields['{body}']=$this->html;
$this->body = strtr($this->htmlTemplate,$fields);
}
elseif (!$this->html && $countAtt)
{
$this->headers.="Content-Type: multipart/mixed; boundary=\"{$this->boundary}\"\r\n";
foreach ($this->aAttaches as $attach)
{
$this->body .= "--{$this->boundary}\r\n";
$this->body .= $attach;
}
$this->body .= "--{$this->boundary}--\r\n";
}
elseif ($this->html && $countAtt)
{
$this->headers.="Content-Type: multipart/mixed; boundary=\"{$this->boundary}\"\r\n";
$this->body .= "--{$this->boundary}\r\n";
$this->body.="Content-Type: text/html; charset={$this->charset}\r\n";
$this->body.="Content-Transfer-Encoding: 8bit\r\n";
$this->body.="\r\n";
$fields=array();
$fields['{title}']=$this->subject;
$fields['{body}']=$this->html;
$this->body .= strtr($this->htmlTemplate,$fields);
foreach ($this->aAttaches as $attach)
{
$this->body .= "--{$this->boundary}\r\n";
$this->body .= $attach;
}
$this->body .= "--{$this->boundary}--\r\n";
}
@mail($this->to, $this->subject, $this->body, $this->headers);
//echo $this->headers.br.$this->body;
}

} // End of class Mailer

?>

Пример использования

<?php
$Message = new Mailer(); // Создаем экземпляр класса
$Message->from = 'Ot Menya '; // От кого
$Message->to = 'vasya@pupkin.ru'; // Кому
$Message->subject = 'Превед кросавчег!'; // Тема письма
$Message->html = 'Привет Вася'; // Текст письма (html)
$Message->SetTemplate('template_name.tpl'); // Шаблон (не обязательно)
$Message->Attach('image_name.jpg','image/jpeg'); // Прикрепляем файл
$Message->Send(); // Отправка
?>

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

Если что не понятно, пишите: mailto:Admin@PC-inform.ru

--
С наилучшими пожеланиями, http://PC-inform.ru
Алексей aka MrSlim



У функции mail, как известно, 3 обязательных параметра. Есть еще четвертый, необязательный. Это заголовки письма - пары "Имя: Значение", разделенные символами "\r\n". Пример:

Content-Type: multipart/related
From:
X-еще-какие-нибудь-заголовки: ...

Для письма с вложениями Content-Type должен быть multipart/related Тело письма, соответственно, должно быть в этом формате и включать в себя все вложения. Описание формата - RFC1521

---+---------------
С наилучшими пожеланиями,
Mr.Black
http://www.mrblack.pp.ru
---+---------------
Программа "Simple RAS Dialer" http://www.srdialer.h14.ru



Любой e-mail - это только текстовый файл и ничего больше.

Верхняя часть файла - служебная информация: кому, от кого, когда, тема и т.д.

Далее почтовая программа пишет, что в мыле есть вложение

Content-Type: Multipart/Mixed;
и генерирует разделительную черту:
boundary="Boundary-00=_Wr6qEx93hy7tbIs"

Далее текст мыла и вложения будет разделяться этой разделительной чертой, которая
начинается с двух тире:
--Boundary-00=_Wr6qEx93hy7tbIs
Content-Type: text/plain;
charset="koi8-u"
Content-Transfer-Encoding: base64
Content-Disposition: inline

Здесь закодированный base64 текст если Transfer-Encoding: base64 (см на 2 строки выше).
Снова разделительная черта:
--Boundary-00=_Wr6qEx93hy7tbIs

Информация о вложении и само вложение
Content-Type: image/jpeg;
name="100_0861.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="100_0861.jpg"

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAE
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ

Заканчивается вложение разделительной чертой и двумя тире в конце.
--Boundary-00=_Wr6qEx93hy7tbIs--

=-=-=-=-=-=-=-=
Виктор Лукошкин



Вопрос 10


Здравствуйте.
Я начинающий пользователь PHP средств, так что может вопрос глупый, если не очень, тогда опубликуйте его в рассылке, если можно, т.к. почта до меня иногда почему то не доходит.

Вопрос:
Есть у меня html-страница, с формой:

<FORM ACTION="sendmail.php" method="post">
Ф.И.О.: <INPUT TYPE="Text" size="30" maxlength="40" NAME="user">
<INPUT type="Submit" value="Отправить">
<INPUT type="Reset" value="Очистить"> </FORM>

А так же есть сам файл sendmail.php со следующим содержимым:

<html><body>
<?
$Mail = "email@mail.com";
$Tema = "test";
$Body = $user;
mail($Mail, $Tema, $Body);
?>
</body></html>

Так вот вопрос - При нажатии на кнопку "Отправить" на мой E-mai приходит письмо с Темой - test, но в теле письма написано user... Как сделать так, что бы Ф.И.О., введеные пользователем в форме, прислались на мое мыло в теле письма.

-------------------------------------
С уважением,Алексей.
Написано 27.06.2006.

Ответ 10


Доброго времени суток saitkakprizvanie,

Очевидно, что на сервере стоит register_globals Off По этому к GET-переменным нужно обращатся через глобальный массив - $_GET. И вообще возьмите за правило, ко всем переменным окружения обращаться через соотвествующие массивы, это: $_GET, $_POST, $_COOKIE, $_SESSIONS, $_SERVER

<? $Mail = "email@mail.com";
$Tema = "test";
$Body = $_GET['user'];
mail($Mail, $Tema, $Body);
?>

--
С наилучшими пожеланиями, http://PC-inform.ru
Алексей aka MrSlim



Вместо $Body = $user; пробуйте $Body = $_POST["user"]

-----
С уважением, Лев



Поле user будет передаваться скрипту методом post, и соответственно будет находиться в массиве

$_POST['user'].
$user будет создаваться только при включённой
register_globals.


Итого: вместо $Body = $user; Вам надо написать
$Body = $_POST['user'];

=-=-=-=
"Fedos"



Здравствуйте saitkakprizvanie,

Значит что-то не так ;)

Для прямой передачи параметра с формы в скрипт в php.ini должно быть включено register_globals=On, иначе нужно писать $Body = $_POST['user']; может в этом причина...

--------------------------------------------

З поваго Strange_V



*
* <FORM ACTION="sendmail.php" method="post">
Ф.И.О.: <INPUT TYPE="Text" size="30" maxlength="40" NAME="user">
<INPUT type="Submit" value="Отправить">
<INPUT type="Reset" value="Очистить"> </FORM>

<?php
$Mail = "email@mail.com";
$Tema = "test";
$Body = $_POST['user'];//см register_globals
mail($Mail, $Tema, $Body);
?>



У вас в настройках PHP отключено использование глобальных переменных, поэтому в строке

$Body = $user;

переменная $user не определена, и PHP автоматически создает эту переменную со строковым значением "user" (которое Вы и получаете в письме).

Проблема решается таким способом: вместо этой строки в скрипте напишите такую:

$Body=$_POST["user"]; // Использовать поле "user" из формы

И всего делов!

С уважением, Blackcat

P.S. Кстати, советую посмотреть справочную информацию о предопределенных переменных в PHP: $_POST, $_GET, $_SESSION и др., пригодится в будущем.



Вопрос 11


Здравсивуйте 1.Как по средствам PHP реализовать

<select name="borderstyle">
<option value="ridge">ridge</option>
<option value="groove">groove</option>
<option value="double">double</option>
<option value="inset">inset</option>
<option value="outset">outset</option>
</select>

Ответ 11


А при чем здесь PHP ?

--
С наилучшими пожеланиями, http://PC-inform.ru
Алексей aka MrSlim



Переменная $_POST["borderstyle"] будет содержать выбранную опцию из списка, если будет отправлена форма содержащая Ваш код то есть такая форма:

<form action = "" method = "POST" >
<select name="borderstyle">
<option value="ridge">ridge</option>
<option value="groove">groove</option>
<option value="double">double</option>
<option value="inset">inset</option>
<option value="outset">outset</option>
</select>
<input type = "SUBMIT" >
</form>

И на странице Вы можете исползовать это значение вписав в html код например такое - в описании стиля.

-----
С уважением, Лев



Очень душевно задан вопрос! Думаю ответы, типа "используй echo ()" дадут и без меня. А по делу -- хотелось бы поточнее узнать что нужно сделать. Если нужно в теле скрипта вывести приведенный кусок HTML-кода, то это проще простого. Нужно закрыть тэг РНР, т.е. написать ?>, вставить этот код и открыв тег РНР (<?) продолжить скрипт.

Т.е. надо всегда помнить, что хоть файлы скриптов и имеют расширение .php но интерпретатор срабатывает только на участок кода, выделенный <? и ?>. Посему мы можем в любом нужном нам месте чередовать код РНР и обычный HTML.

Это очень удобно с точки зрения "читабельности" кода и существенно сокращает обьем страницы. Если же интересует каким образом данные указанного поля выбора (SELECT) обработать в скрипте, то для этого нужно обрабатывать переменную $_POST[borderstyle] или $_GET[borderstyle] (в зависимости от выбранного метода передачи данных из формы в тэге <FORM ...... method=".....">).

Значением этой переменной будет имя выбранного пользователем пункта. Т.е. при выборе первого пункта, значение переменной $_POST[borderstyle] или $_GET[borderstyle] будет "ridge". В ответе на вопрос 10 есть вся нужная информация.

С уважением, Владимир Руденко.



<select name="borderstyle">
<option value="ridge">ridge</option>
<option value="groove">groove</option>
<option value="double">double</option>
<option value="inset">inset</option>
<option value="outset">outset</option>
</select>

<?php
$borderstyles=array('ridge', 'groove', 'double', 'inset', 'outset');
print '<select name="borderstyle">';
foreach ($borderstyles as $borderstyle)
{
print '




Информация от Владельца Рассылки...
http://virtual.brest.by - портал Виртуальный Брест

http://bel-host.info - Хостинг для ваших сайтов

В избранное