Справочник по PHP - white cat
Шрифт:
Интервал:
Закладка:
В файл form.html запишем:
<form action=golos.php method=post><table cellspacing cellpadding=0 border=0>
<tr><td align=center colspan=2><B>Голосование:</B></td></tr>
<tr><td align=center colspan=2><B>Ваше мнение о сайте:</B></td></tr>
<tr><td><input type=radio name=otv value=1 checked></td><td>Просто супер!</td></tr>
<tr><td><input type=radio name=otv value=2></td><td>Нормальный.</td></tr>
<tr><td><input type=radio name=otv value=3></td><td>Так себе.</td></tr>
<tr><td><input type=radio name=otv value=4></td><td>Мне все равно.</td></tr>
<tr><td><input type=radio name=otv value=5></td><td>Плохой.</td></tr>
<tr><td><input type=radio name=otv value=6></td><td>Хуже не видел!</td></tr>
<tr><td colspan=2 align=center><input type=submit name=golos value="Голосовать"></td></tr></table</form>
После нажатия кнопки Голосовать переменная $otv перейдет на обработку сценарием в файле golos.php
В файл data.txt надо записать начальные данные, которые затем будут оттуда считаны и обработаны.
Создайте файл data.txt и в текстовом редакторе запишите в него следующие строки:
Результаты голосования:000000
Первая строка у нас учитываться не будет.
В остальные шесть строк надо ввести нули, нажимая после каждой цифры клавишу Enter.
В файле golos.php, который у нас отвечает за обработку результатов, напишем следующее:
<html>
<head>
<title>Обработка голосования</title>
</head>
<body>
<?php
if(@$golos) {
// Здесь мы запускаем обработку данных только если
// была нажата клавиша Голосовать
$file_name="data.txt";
// Переменная $file_name задает имя файла с результатами
$file=file($file_name);
// Записываем файл с данными в массив $file
$file_len=count($file);
// $file_len - количество строк в файле data.txt
for($i=1,$n=0;$i<$file_len;$i++) {
$file[$i]=trim($file[$i]);
$n=$n+$file[$i];
};
// В этом цикле мы убираем символы перевода строки и записываем в
// переменную $n сколько человек уже проголосовало
echo "<center><h2>Спасибо, Ваше мнение учтено!</h2></center>";
$file[$otv]++;
$n++;
// Здесь мы учитываем номер ответа, который пришел к нам из формы,
// увеличив соответствующее значение в массиве и число проголосовавших на 1
$rez="Результаты голосования:n";
// Переменная $rez будет содержать данные о голосовании,
// которые затем запишем обратно в файл
for($i=1;$i<$file_len;$i++) $rez.=$file[$i]."n";
$rez=trim($rez);
[email protected]($file_name,"w");
// Здесь мы создаем новый файл, в который затем запишем обновленные данные
if($file_rec) {
$counter=fputs($file_rec,$rez);
// Запись обновленных данных в файл data.txt
fclose($file_rec);
}
else echo "Произошла ошибка записи результатов!";
for($i=1;$i<$file_len;$i++) $pr[$i]=round(($file[$i]/$n)*100);
// Записали в массив $pr, сколько процентов от общего числа голосовавших
// занимает каждый ответ
// Далее идет кусок HTML-кода, который
// отвечает за вывод наших данных на экран
?>
<center><h2>Ваше мнение о сайте:</h2></center><BR>
<table border=1 align=center>
<tr><td>
<B>Просто супер! (<?php echo $file[1];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[1];?>" height=15>
</td></tr>
<tr><td>
<B>Нормальный. (<?php echo $file[2];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[2];?>" height=15>
</td></tr>
<tr><td>
<B>Так себе. (<?php echo $file[3];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[3];?>" height=15>
</td></tr>
<tr><td>
<B>Мне все равно. (<?php echo $file[4];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[4];?>" height=15>
</td></tr>
<tr><td>
<B>Плохой. (<?php echo $file[5];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[5];?>" height=15>
</td></tr>
<tr><td>
<B>Хуже не видел! (<?php echo $file[6];?>):</B>
</td><td>
<img src="img.php?pr=<?php echo $pr[6];?>" height=15>
</td></tr>
</table>
<table border=1 align=center>
<tr><td align=center><B>Всего проголосовало:</B></td></tr>
<tr><td align=center><?echo $n." человек";?></td></tr>
</table>
<?
};
?>
</body>
</html>
Записав в атрибут SRC тега <IMG> значение "img.php?pr=количество процентов" мы тем самым передаем файлу img.php (который отвечает за вывод графической информации) значение, на основании которого будет на лету сгенерировано изображение голосования.
Далее приведу листинг файла img.php:
<?php
$otstup=35;
// $otstup - задает отступ, в прелелах которого
// в картинку впишем процентное значение
$string=$pr."%";
// $string - содержит значение процентов плюс знак процента
$im=imageCreate($pr*2+$otstup,15);
// Здесь создаем идентификатор, при помощи
// которого мы будем работать с картинкой
$fon=imageColorAllocate($im,220,20,60);
$fon1=imageColorAllocate($im,255,20,147);
// Задаем цвет фона
$col_b=imageColorAllocate($im,0,0,0);
// Задаем цвет обводки
$shrift=imageColorAllocate($im,255,255,255);
// Цвет вывода процентного значения
imageFill($im,2,2,$fon);
// Заполнили наш прямоугольник основным фоном
$x1=0;$x2=$pr*2+$otstup-1;
$y1=0;$y2=14;
// Формирование улов для обводки контуром
imageLine($im,$x1,$y1,$x2,$y1,$col_b);
imageLine($im,$x2,$y1,$x2,$y2,$col_b);
imageLine($im,$x2,$y2,$x1,$y2,$col_b);
imageLine($im,$x1,$y1,$x1,$y2,$col_b);
imageLine($im,$x1+$otstup,$y1,$x1+$otstup,$y2,$col_b);
// Создание контура и разделяющей полосы
if($pr!=0) imageFill($im,$otstup+1,2,$fon1);
// Если значение процента не равно 0, то заполняем
// правую часть цветом $fon1
imageString($im,3,5,1,$string,$shrift);
// Пишем в правую часть картинки процентное значение
header("Content-type: image/png");
imagePng($im);
imageDestroy($im);
// Здесь производим вывод полученной картинки в
// стандартный поток вывода и уничтожаем идентификатор
?>
Отправка писем при помощи PHP
Отправка писем при помощи PHP
Рано или поздно каждый владелец сайта сталкивается с необходимостью отправки писем непосредственно с сайта через скрипт, а не через почтовые программы. Это могут быть письма, отправляемые скриптом гостевой книги, сообщающее владельцу сайта что у него в гостевой появилось новое сообщение, или форумом, для оповещения о новом вопросе.
Во всех этих случаях необходима именно автоматическая отправка писем миную разнообразные почтовые программы и утилиты.Сделать это можно при помощи функции mail(), которую мы сейчас и будем изучать.
Синтаксис функции mail():
bool mail(string $to, string $subject, string $msg [, string $header]);
Функция mail() посылает письмо с темой $subject и содержанием $msg по адресу $to.
Если Вы хотите, чтобы письмо ушло по нескольким адресам, разделите их пробелами.
Само сообщение может быть многострочным. Для перехода на новую строку поставьте знак перехода на новую строку "n" в конце каждой строки.
mail("[email protected]", "my subject", "stroka1nstroka2nstroka3");
Или тотже самое можно записать так:
mail("[email protected]", "my subject", "stroka1
stroka2
stroka3");
В четвертом необязательном параметре $header можно указать заголовки нашего сообщения.
Под заголовками я подразумеваю информацию, передаваемую вместе с письмом почтовому клиенту, которая будет содержать некоторые технические данные, такие как: кодировка письма, имя отправителя, обратный адрес отправителя и т.д. Это схоже с использованием тега <META> в HTML.
Чтобы было более понятно, что из себя представляют заголовки, и где они находятся в письме, откройте почтовый клиент и посмотрите на любое письмо в том виде, как оно пришло (Для Outlook это можно сделать нажав правой клавишей мыши на сообщение-Свойства-Подробно-Исходное сообщение).
Как мы видим, письмо представляет простой текстовой файл, состоящий из двух общих разделов:Вверху идут заголовки письма, затем через две строки идет само письмо.
Заголовков письма достаточно много, но не все они используются при написании скрипта отправки почты.
Вот некоторые наиболее часто используемые:
Я не зря выше привел пример отправки письма со словами латинского алфавита. Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее. Русских кодировок существует огромное множество. И от того, насколько умело Вы перекодируете письмо, будет зависеть прочтет ли получатель его, или не будет возиться с установкой нужной кодировки и просто удалит его в корзину.