Лекции     Книги     Рефераты    
Диплом, курсовая на заказ

Пишем движок галлереи изображений. Часть 3: Комментарии к картинкам.

news date июля.23.2008    categories Web-программирование > PHP    comments (0)

В этой части мы напишем систему комментариев к каждой картинке и защитим отправку сообщения – капчей (см. в прошлых уроках).
Будем редактировать файл – big.php.

В самом начале файла проверяем не передан ли параметр POST:

if($_POST[‘name’] and $_POST[‘content’]){

}

Теперь, если параметр передан, производим запись комментария в файл:

$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘a’);
fwrite($fp, ‘
’. $_POST[‘name’].’::’. $_POST[‘content’].’’);
fclose($fp);

Всё, с записью закончили. Теперь создадим HTML форму для отправки данных:

<hr>
<form method=”post”>
Имя:<input type=”text” size=”50″ maxlength=”40″ name=”name” value=”">
<br>Коментарий:<br><textarea name=”content” rows=”10″ cols=”60″></textarea>
<br><input type=”submit” value=”Отправить” class=”button”>
</form>

И приступим непосредственно к отображению всех комментариев. В файл производилась запись по шаблону: имя::сообщение. Теперь нужно это всё правильно отделить и отобразить. Проверим, есть ли комментарии в файле:

$file = file_get_contents(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’);
if($file==”"){
echo(‘Коментариев нет!’);
}else{

}

Если есть комментарии, отображаем их:

foreach ($array as $item)
{
$parts = explode(‘::’, $item);
echo(‘<hr>Имя: ‘.$parts[0].’<br>’.$parts[1].’<hr>’);
}

По своему усмотрению можно добавлять свои поля, такие как: дата, время, e-mail и др. Записывать их через “::” и вызываются по очереди переменной .$parts[“n”], где n – порядковый номер информации, записанной в файл. Обратите внимание, что первый номер – номер “0”.

Для работ без ошибок – проверяем файл на существование:

if(file_exists(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’)){}else{
$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘w’);
}

Записываем в самое начало. Если файл отсутствует, то он создастся.
Теперь встраиваем защитную капчу, которую мы писали в ходе предыдущих уроков.
Создаем файл с названием capcha.php и помещаем его в корень. Вот содержимое этого файла:

<?php
$image = imagecreatefromjpeg(‘capch/capch_’.rand(0,9).’.jpg’);
$textcolor = imagecolorallocate($image, 0, 0, 0);
$rand=file_get_contents(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”);

imagettftext($image, 20, 1, 1, 30, $textcolor, “capch/”.rand(0,9).”.ttf”, $rand);

header(‘Content-type: image/jpeg’);
imageJPEG($image);
?>

А в файл big.php мы добавим:

$file=”basecapch.php”;

$array=file($file);
$rand=$array[rand(0,count($array)-1)];
$rand = ereg_replace(” +”, “”, $rand);
$rand = ereg_replace(”
“, “”, $rand);

$fp=fopen(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”,”w+”);
fwrite($fp,$rand);
fclose($fp);

Каждый файл для капчи создается под каждый ip – разный.

Также создаем basecapch.php с фразами, применяемыми для капчи и папку “capch” с шрифтами.

Применяем капчу для нашей системы комментариев. Проверяем данные:

$capcha=file_get_contents(“temp/”.$randnum.”_capcha_”.$randnum.”_”.$randnum.”.txt”);
If($capcha=$_POST[‘capcha’]){
//Выполняем наш код
}else{
Echo(‘Код введен неверно!’);
}

Всё! Теперь начало файла big.php целиком выглядит так:

<?
if(file_exists(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’)){}else{
$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘w’);
}

$file=”basecapch.php”; # имя файла, где хранятся фразы

$array=file($file);
$rand=$array[rand(0,count($array)-1)];
$rand = ereg_replace(” +”, “”, $rand);
$rand = ereg_replace(”
“, “”, $rand);

$fp=fopen(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”,”w+”);
fwrite($fp,$rand);
fclose($fp);

if($_POST['name'] and $_POST['content']){

$capcha=file_get_contents(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”);

if($capcha=$_POST['capcha']){
//Выполняем наш код
$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘a’);
fwrite($fp, ‘
‘. $_POST['name'].’::’. $_POST['content'].”);
fclose($fp);
}else{
echo(‘Код введен неверно!’);
}
}

?>

Теперь добавляем HTML. Создаем файл capcha.html с содержимым:

<a href=”capcha.html” mce_href=”capcha.html”><img src=”capcha.php” mce_src=”capcha.php”></a>

И в файле big.php, где форма для отправки комментариев, помещаем следующий код:

Код: <IFRAME src=”capcha.html” mce_src=”capcha.html” width=”130″ height=”50″ scrolling=”no” frameborder=”0″></IFRAME><input type=”text” size=”20″ maxlength=”40″ name=”capcha” value=”">

Всё! И система защиты от автоматической отсылки сообщений тоже готова! Весь файл big.php у меня выглядит так:

<?
if(file_exists(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’)){}else{
$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘w’);
}

$file=”basecapch.php”; # имя файла, где хранятся фразы

$array=file($file);
$rand=$array[rand(0,count($array)-1)];
$rand = ereg_replace(” +”, “”, $rand);
$rand = ereg_replace(”
“, “”, $rand);

$fp=fopen(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”,”w+”);
fwrite($fp,$rand);
fclose($fp);

if($_POST['name'] and $_POST['content']){

$capcha=file_get_contents(“temp/”.$_SERVER['REMOTE_ADDR'].”_capcha.txt”);

if($capcha=$_POST['capcha']){
//Выполняем наш код
$fp=fopen(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’, ‘a’);
fwrite($fp, ‘
‘. $_POST['name'].’::’. $_POST['content'].”);
fclose($fp);
}else{
echo(‘Код введен неверно!’);
}
}

?>
<HTML>
<HEAD>
<META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=windows-1251″>
<TITLE></TITLE>
</HEAD>
<BODY TEXT=”#000000″ BGCOLOR=”#FFFFFF”>
<table border=1 CellSpacing=0 CellPadding=0 Width=”100%” align=”center”>
<tr>
<td>
<a href=”index.php” mce_href=”index.php”>Главная</a>
</td>
</tr>
</table>
<table border=1 CellSpacing=0 CellPadding=0 Width=”90%” align=”center”>
<tr>
<td>
<?
print(‘|’);
foreach (glob(“photos_*”) as $filename) {
$name=file_get_contents(“name-cat/$filename.name”);
print “<a href=index.php?cat=$filename>$name</a> | “;
}
?>
</td>
</tr>
</table>
<table border=1 CellSpacing=0 CellPadding=0 Width=”90%” align=”center”>
<tr>
<td>
<center>
<?php

if($_GET['photo']){
print(“<img src=”.$_GET['dir'].” mce_src=”.$_GET['dir'].”/”.$_GET['photo'].”>”);

if(file_exists(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.rat’)){
}else{
$fp=fopen(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.rat’,'w’);
fwrite($fp, “0::0″);
fclose($fp);
}
$arr = file(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.rat’);
foreach ($arr as $item)
{
$parts = explode(‘::’, $item);
$sum=$parts[1]+1;
$bal=$parts[0]+$_POST['rat'];
$rel=”$bal::$sum”;
}
if(file_exists(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.ip’)){}
else{
fopen(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.ip’,'w’);
}
$string=file_get_contents(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.ip’);
if(eregi($_SERVER['REMOTE_ADDR'],$string))
{
$cou=$parts[0]/$parts[1];
$cou=round($cou);
print(‘<br><img src=”rates/img/’.$cou.’.gif” mce_src=”rates/img/’.$cou.’.gif”>’);
}

else
{

if($_POST['rat']){

$fp=fopen(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.rat’,'w’);
fwrite($fp, $rel);
fclose($fp);
$fp=fopen(‘rates/’.$_GET['dir'].’-’.$_GET['photo'].’.ip’,'w’);
fwrite($fp, $_SERVER['REMOTE_ADDR']);
fclose($fp);
}

?>

<form method=POST>
<label for=’rat’>
1-<input type=’radio’ name=’rat’ value=’1′>| 2-<input type=’radio’ name=’rat’ value=’2′>| 3-<input type=’radio’ name=’rat’ value=’3′>| 4-<input type=’radio’ name=’rat’ value=’4′>| 5-<input type=’radio’ name=’rat’ value=’5′><input type=”submit” value=”Голосовать”></label>
</form>

<?
}

}else{

}
echo(“<center><b>Коментарии:</b></cener><hr>”);
$array = file(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’);
$file = file_get_contents(‘coments/’.$_GET[dir].’_’.$_GET[photo].’.txt’);
if($file==”"){
echo(‘Коментариев нет!’);
}else{
foreach ($array as $item)
{
$parts = explode(‘::’, $item);
echo(‘<hr>Имя: ‘.$parts[0].’<br>’.$parts[1].’<hr>’);
}
}
?>
<hr>
<form method=”post”>
Имя:<input type=”text” size=”50″ maxlength=”40″ name=”name” value=”">
<br>Коментарий:<br><textarea name=”content” rows=”10″ cols=”60″></textarea>
<br>Код: <IFRAME src=”capcha.html” mce_src=”capcha.html” width=”130″ height=”50″ scrolling=”no” frameborder=”0″></IFRAME><input type=”text” size=”20″ maxlength=”40″ name=”capcha” value=”">
<br><input type=”submit” value=”Отправить” class=”button”>
</form>
</center>
</td>
</tr>
</table>
</BODY>
</HTML>

Использованные функции:

file_exists – Проверить наличие указанного файла или каталога
ereg_replace – Заменяет регулярное выражение
Imagecolorallocate — Распределяет цвет для изображения
fopen – Открывает файл или URL
file – Читает содержимое файла и помещает его в массив
explode – Разбивает строку на подстроки
glob — Находит файловые пути, совпадающие с шаблоном
opendir — Открыть каталог
readdir — Получить элемент каталога по его дескриптору
file_get_contents — Получить содержимое файла в виде одной строки<p


Обсуждения

Нет комментариев к “Пишем движок галлереи изображений. Часть 3: Комментарии к картинкам.”

Добавить комментарий

Вы должны войти



© 2009 - 2010 | Webteach.ru | Образовательный портал