WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Программирование на php на примере галереи в 3 вариантах.


Прислал: Тотоев Александр [ 13.09.2001 @ 12:41 ]
Раздел:: [ Статьи по PHP ]


Добрый день!


Предлагаю вашему вниманию пример программирования на языке php с использованием баз данных mysql (в одном из вариантов программы) на примере создания галереифотографий, картинок и т.п. Картинки в предпросмотре должны быть определенной ширины (чтобы не расползалась страница). Подобный вариант используется мной здесь (2 вариант) и здесь (1 вариант).

Галерея имеет следующие свойства:

  • предпросмотр;
  • навигация "вперед-назад";
  • навигация по номерам страниц галереи;
  • наличие описаний к картинкам;
  • администрирование описаний к картинкам;
  • варианты 2 и 3 имеют возможность изменять порядок вывода картинок;
  • вариант 3 сделан с использованием базы mysql
  • варианты 1 и 3 легко преобразуемы в галерею с возможностью дополнения галереи посетителями;
  • если вы обнаружили еще какие-то свойства галереи, буду рад выслушать ваше мнение по адресу totoeval@mtu-net.ru
Вариант 1

Программа ищет файлы картинок в указанном ей каталоге с маленькими картинками (предпросмотр). Затем она ищет описания для выводимых картинок в текстовом файле. Определяет кол-во картинок и создает навигацию по галерее. Определяет размеры картинок и выводит их с описаниями и с яваскриптом на каждой картинке, который открывает большой вариант картинки в новом окне с размерами на 40 пикселей больше размера картинки с возможностью скроллинга, если таковой окажется необходим для просмотра картинки полностью (при малом размере экрана).

Вот собственно и код варианта:

<html>
<head>
<TITLE>Photo-galery</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1251">
<LINK REL=STYLESHEET TYPE="text/css" href="../../style.css">

</head>
<body leftmargin=0 topmargin=0 marginwidth="0" marginheight="0">

<table width=650 cellspacing=0 cellpadding=5 border=0 cols=2><tr><td>
<div align="center">
<br>
<p align="center" class="zag-main">Картинная галерея.</p>
<?
// Пишем переменные, которые зависят от Вас
//
$scrpic=10; // максимальное кол-во фоток на
странице$big='../pic/big_regats/'; // путь к большим картинкам
$small='../pic/small_regats/'; // путь к малым картинкам
$ini=$DOCUMENT_ROOT.'/avrora/pic/read/read_regats.ini'; // путь к файлу с текстами к картинкам
//
//В данном случае, файл строится так: строка с названием картинки (без расширения файла)
//затем строка с подписью к картинке
//затем название следующей картинки и так далее.
//
//Например:
//1
//Моя первая фотография
//rt
//моя фотография rt.jpg
//.... и так до последней картинки. Если подписи к картинке нет, то надо оставлять пустую строку.
//
//
$kav="'"; // одинарные кавычки пригодятся нам потом в таком виде
// для отображения в браузере в яваскрипте. Там необходимо иметь оба вида кавычек,
// а для php надо еще поставить выводимое выражение в кавычки.
$podp='увеличить'; // надпись под картинкой,
// побуждающая клиента нажать на картинку для увеличения
//
$style_zag2='zag2-main'; // стили текста на странице
$style_osn='osn-main'; // стили текста на странице
$style_link='link'; // стили текста на странице
//
//
//сама программа
$text=file($ini); // читаем файл с подписями к картинкам в массив $text
$dir=$small; // указываем путь к каталогу малых фотографий
$handle=opendir($dir); // читаем заголовок каталога
$si=0; // счетчик файлов в папке
while ($file = readdir($handle)) { // читаем файл, пока не закончатся
if ($file!="..") { // исключаем из списка файлов "." и ".." (корень и верхний каталог).
$pic[$si]=$file; // присваиваем текущему элементу массива с именами файлов имя текущего файла
$si++; // плюсуем к счетчику файлов в папке 1
}
} // следующий файл
$maxpic=count($pic)-1; // сколько файлов в папке с малыми картинками

if ($begin=="") { // если на страницу зашли впервые, то $begin присваеваем 1
$begin=1;
}
$end=$begin+$scrpic-1; // $end - номер последней картинки на странице
if ($end>$maxpic) { // если последний номер на странице больше кол-во картинок в папке,
// то он равен последнему
$end=$maxpic;
}
$beginrew=$begin-$scrpic; // при переходе назад, начинаем показывать картинки с номера,
//равному "первый номер текущей страницы минус кол-во картинок на странице"
$beginfw=$begin+$scrpic; // при переходе вперед, начинаем показывать картинки с номера,
//равному "первый номер текущей страницы плюс кол-во картинок на странице"
$hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.' class='.$style_zag2.'>назад</a>';
// создаем ссылку "назад"
$hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.' class='.$style_zag2.'>вперед</a>';
// создаем ссылку "вперед"
$navig=$hrefrew.' || '.$hreffw; // ставим между ссылками "назад-вперед" символ "||"
if ($beginrew<=0) { // если мы на первой странице, то ссылка назад не нужна
// $hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.' class='.$style_zag2.'>назад</a>';
$navig=$hreffw;
}
if ($beginfw>$maxpic) { // если мы на последней странице, то ссылка вперед не нужна
// $hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.' class='.$style_zag2.'>вперед</a>';
$navig=$hrefrew;
}
// вывод на экран номеров страниц галереи
$scrmax=ceil($maxpic/$scrpic); // вычисляем, сколько страниц с картинками
for ($scr=1; $scr<=$scrmax; $scr++) { // начиная с первого номера до кол-ва страниц галереи
$beginsrc=($scr-1)*$scrpic+1; // вычисляем номер картинки,
// с которого будут выводиться картинки на странице
if ($beginsrc==$begin) { // если страница текущая,
// то ее номер выводим в виде простого текста, а не ссылки
echo '  <span class='.$style_zag2.'>'.$scr.'</span>  ';
}
else { // если страница не текущая, то выводим ссылку на нее и передаем параметры:
// номер картинки, с которой начать выводить на этой странице
echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.' class='.$style_zag2.'> '.$scr.' </a> ';
}
}
echo '<p align=center class='.$style_zag2.'>'.$navig.'</p>';
// вывод на экран навигации "вперед-назад"

for ($i=$begin; $i<=$end; $i++) { // начиная с первой картинки на странице,
// перебираем картинки вплоть до последней на странице
for ($j=0; $j<sizeof($text); $j++) { // читаем файл ини и собираем описания
$name_file=explode(".",$pic[$i]); //выделяем в названии файла его имя (без расширения)
if (trim($text[$j])==$name_file[0]) { // ищем название картинки,
// предварительно обрезав пробелы вокруг названия картинки в файле
// (если текущее название картинки $pic[$i] совпадает с проверяемым $text[$j])
$descript=trim($text[$j+1]);
// если картинка найдена, то в $descript пишем описание к картинке
}
else { // если название картинки не совпадает с искомым, то плюем на него
}
}
$photo=$big.$pic[$i];
// присваиваем $photo имя малого файла+путь к папке с большими картинками
$size=getimagesize($photo); // читаем информацию о картинке
$width=$size[0]+40; // получаем ширину картинки и + 40 (свободное поле вокруг картинки)
$height=$size[1]+40; // получаем высоту картинки и + 40 (свободное поле вокруг картинки)
$sxp=$size[2]; // получаем тип (расширение файла картинки)
$smphoto=$small.$pic[$i];
// присваиваем $smphoto имя малого файла+путь к папке с малыми картинками
$smsize=getimagesize($smphoto); // читаем информацию о картинке
$smwidth=$smsize[0]; // получаем ширину картинки
$smheight=$smsize[1]; // получаем высоту картинки
$smexp=$smsize[2]; // получаем тип (расширение файла картинки)
$winstat='toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,
width='.$width.',height='.$height; // статус открываемого окна с большой картинкой

// выводим таблицу галереи.
// если номер картинки четный, то картинка слева, а описание справа и наоборот
// делаем это для неужасного внешнего вида галереи
// Вы можете разположить картинки как Вам заблагорассудится.
// итак:
?><table width=420 cellspacing=0 cellpadding=5 border=0 cols=2><tr><?
// выводим одинаковую часть кода таблицы дл ячейки картинки
//Далее выводим картинки в ячейках таблиц с описаниями. Делаем все с "предпросмотром"
//"предпросмотр предпочтителен, потому что не надо сразу грузить большие файлы,
//а клиент если захочет, сам загрузит то, что его заинтересовало в новых окнах.
//
if ($i/2==ceil($i/2)) { // если номер картинки на странице четный
echo '<td width=210 rowspan=2>
<p align=right class='.$style_osn.'>'.$descript.'</p>
</td><td hight='.($smheight+2).'>
<table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000" border=0><tr><td>
<a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');">
<img src='.$smphoto.' width='.$smwidth.' height='.$smheight.' border=0 alt="увеличить">
</a>
</td></tr></table>
</td></tr>
<tr><td valign=top>
<center>
<a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.'
</a>
</center>
</td></tr></table>';
}
else { // если номер картинки нечетный
echo '<td align=left><table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000"><tr>
<td hight='.($smheight+2).'>
<a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');">
<IMG SRC='.$smphoto.' width='.$smwidth.' height='.$smheight.' border=0 alt="увеличить">
</a>
</td></tr></table>
</td>
<td width=210 rowspan=2>
<p align=left class='.$style_osn.'>'.$descript.'</p>
</td></tr>
<tr><td valign=top>
<center>
<a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.'
</a>
</center>
</td></tr></table>';
}
}
// вывод на экран "вперед-назад"
echo '<p align=center class='.$style_zag2.'>'.$navig.'</p>';
// вывод на экран номеров страниц
echo '<div align=center>';
for ($scr=1; $scr<=$scrmax; $scr++) {
$beginsrc=($scr-1)*$scrpic+1;
if ($beginsrc==$begin) {
echo '  <span class='.$style_zag2.'>'.$scr.'</span>  ';
}
else {
echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.' class='.$style_zag2.'> '.$scr.' </a> ';
}
}

?>

</div>
</td></tr></table>
</body>
</html>



Программа администрирования текстов описаний:

Была применена в моей статье Импортирование информации с чужого сайта на свой сайт в свой дизайн. Я считаю этот способ самым проостым для начинающего программиста. Более сложный способ обновления я собираюсь сделать в будущих статьях.
Конечно, можно делать более серьезные интерфейсы, но в этом варианте, который конечно не рассчитан на ламера, можно быстро править сразу все позиции.
Вот собственно код:


<html>
<head>
<title>admin weather</title>
</head>
<body>
<?php
$adr=$DOCUMENT_ROOT."/avrora/pic/read/read_regats.ini"; // адрес файла, в котором и будут записываться названия файлов с описаниями
$password='pass'; // простенькая система авторизации
$eror='Password eror!';
$old=file($adr); // читаем то, что сейчас есть в файле
if ($submit) { // проверяем на нажатость кнопки
if ($pass==$password) {
$fp=fopen($adr,"w");
fwrite ($fp, $ini); // записываем в файл измененные данные
fclose($fp);
$old=file($adr);
}
else {
echo $eror;
}
}
?>

<form method=post action="<?php echo $PHP_SELF?>"> // информация, введенная в форму, обрабатывается этим же файлом
password:<input type=text name=pass><br>
inicialisation:<textarea name="ini" rows=15 cols=60>
<?
for ($i=0; $i<sizeof($old); $i++) {
echo $old[$i], ""; // выводим на экран текущий вариант файла
}
?>
</textarea>
<br>
<input type=submit name="submit" value="Enter">
</form>

</body>
</html>



В этом варианте, файл создаем так, как написано в комментарии к программе:
1
Моя первая фотография
rt
моя фотография rt.jpg


, где 1 и rt - имена файлов, а строки под ними соответственно описания к ним.


Вариант 2


Отличие этого варианта отпредыдущего в том, что:
Программа читает файл инициализации галереи.
В каждой строке такая конструкция (так надо заполнять файл для этого варианта!):
1.jpg|Моя первая фотография
rt.jpg|моя фотография rt.jpg
где символ "|" - это разделитель между описанием и именем файла картинки.

Как видно, в этом варианте надо писать в файле имя файла картинки с расширением. Если это вам это очень мешает, то можете переделать так, чтобы было в файле только имя, а расширение определялось бы автоматически, основываясь на первом примере.
Алгоритм такого варианта будет:
определитьимя картинки, считать имена файлов в папке с файлами, обрезая у имен файлов расширения, находим нужный, сравнивая каждый раз с тем, что взяли из файла. Именно совпавший и будет искомым.

Далее программа, создав массив из имен и описаний картинок, определяет, на какой странице галереи клиент находится и выводит ему соответственно ту или иную страницу.
Сам движок галереи остается тем же, как вы наверное заметили.
Изменяются некоторые его части.
Вот сам код:


<html>
<head>
<TITLE>Photo-galery</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1251">
<LINK REL=STYLESHEET TYPE="text/css" href="../../style.css">

</head>
<body leftmargin=0 topmargin=0 marginwidth="0" marginheight="0">

<table width=650 cellspacing=0 cellpadding=5 border=0 cols=2><tr><td>
<div align="center">
<br>
<p align="center" class="zag-main">Картинная галерея.</p>
<?
// Пишем переменные, которые зависят от Вас
//
$scrpic=10; // максимальное кол-во фоток на
странице$big='../pic/big_regats/'; // путь к большим картинкам
$small='../pic/small_regats/'; // путь к малым картинкам
$ini=$DOCUMENT_ROOT.'/avrora/pic/read/read_regats1.ini'; // путь к файлу с текстами к картинкам
//
//В данном случае, файл строится так: строка с названием картинки (без расширения файла)
//затем строка с подписью к картинке
//затем название следующей картинки и так далее.
//
//Например:
//1|Моя первая фотография
//rt|моя фотография rt.jpg
//.... и так до последней картинки. Если подписи к картинке нет, то надо оставлять пустую строку.
//
//
$kav="'"; // одинарные кавычки пригодятся нам потом в таком виде
// для отображения в браузере в яваскрипте. Там необходимо иметь оба вида кавычек,
// а для php надо еще поставить выводимое выражение в кавычки.
$podp='увеличить'; // надпись под картинкой,
// побуждающая клиента нажать на картинку для увеличения
//
$style_zag2='zag2-main'; // стили текста на странице
$style_osn='osn-main'; // стили текста на странице
$style_link='link'; // стили текста на странице
//
//
//сама программа
$text=file($ini); // читаем файл с подписями к картинкам в массив $text
for ($i=0; $si<sizeof($text); $i++) { // читаем файл ини и сохраняем имена картинок.
$si=$i+1;
$string=explode("|",$text[$i]);
$pic[$si]=$string[0]; // присваиваем текущему элементу массива с именами файлов имя текущего файла
$description[$si]=$string[1];
}

$maxpic=count($pic); // сколько файлов в папке с малыми картинками

if ($begin=="") { // если на страницу зашли впервые, то $begin присваеваем 1

$begin=1;
}$end=$begin+$scrpic-1; // $end - номер последней картинки на странице
if ($end>$maxpic) { // если последний номер на странице больше кол-во картинок в папке,
// то он равен последнему
$end=$maxpic;
}
$beginrew=$begin-$scrpic; // при переходе назад, начинаем показывать картинки с номера,
//равному "первый номер текущей страницы минус кол-во картинок на странице"
$beginfw=$begin+$scrpic; // при переходе вперед, начинаем показывать картинки с номера,
//равному "первый номер текущей страницы плюс кол-во картинок на странице"
$hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.' class='.$style_zag2.'>назад</a>';
// создаем ссылку "назад"
$hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.' class='.$style_zag2.'>вперед</a>';
// создаем ссылку "вперед"
$navig=$hrefrew.' || '.$hreffw; // ставим между ссылками "назад-вперед" символ "||"
if ($beginrew<=0) { // если мы на первой странице, то ссылка назад не нужна
// $hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.' class='.$style_zag2.'>назад</a>';
$navig=$hreffw;
}
if ($beginfw>$maxpic) { // если мы на последней странице, то ссылка вперед не нужна
// $hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.' class='.$style_zag2.'>вперед</a>';
$navig=$hrefrew;
}
// вывод на экран номеров страниц галереи
$scrmax=ceil($maxpic/$scrpic); // вычисляем, сколько страниц с картинками
for ($scr=1; $scr<=$scrmax; $scr++) { // начиная с первого номера до кол-ва страниц галереи
$beginsrc=($scr-1)*$scrpic+1; // вычисляем номер картинки,
// с которого будут выводиться картинки на странице
if ($beginsrc==$begin) { // если страница текущая,
// то ее номер выводим в виде простого текста, а не ссылки
echo '  <span class='.$style_zag2.'>'.$scr.'</span>  ';
}
else { // если страница не текущая, то выводим ссылку на нее и передаем параметры:
// номер картинки, с которой начать выводить на этой странице
echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.' class='.$style_zag2.'> '.$scr.' </a> ';
}
}
echo '<p align=center class='.$style_zag2.'>'.$navig.'</p>';
// вывод на экран навигации "вперед-назад"

for ($i=$begin; $i<=$end; $i++) { // начиная с первой картинки на странице,
// перебираем картинки вплоть до последней на странице
$descript=$description[$i];
$photo=$big.$pic[$i];
// присваиваем $photo имя малого файла+путь к папке с большими картинками
$size=getimagesize($photo); // читаем информацию о картинке
$width=$size[0]+40; // получаем ширину картинки и + 40 (свободное поле вокруг картинки)
$height=$size[1]+40; // получаем высоту картинки и + 40 (свободное поле вокруг картинки)
$sxp=$size[2]; // получаем тип (расширение файла картинки)
$smphoto=$small.$pic[$i];
// присваиваем $smphoto имя малого файла+путь к папке с малыми картинками
$smsize=getimagesize($smphoto); // читаем информацию о картинке
$smwidth=$smsize[0]; // получаем ширину картинки
$smheight=$smsize[1]; // получаем высоту картинки
$smexp=$smsize[2]; // получаем тип (расширение файла картинки)
$winstat='toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,
resizable=1,width='.$width.',height='.$height; // статус открываемого окна с большой картинкой

// выводим таблицу галереи.
// если номер картинки четный, то картинка слева, а описание справа и наоборот
// делаем это для неужасного внешнего вида галереи
// Вы можете разположить картинки как Вам заблагорассудится.
// итак:
?><table width=420 cellspacing=0 cellpadding=5 border=0 cols=2><tr><?
// выводим одинаковую часть кода таблицы дл ячейки картинки
//Далее выводим картинки в ячейках таблиц с описаниями. Делаем все с "предпросмотром"
//"предпросмотр предпочтителен, потому что не надо сразу грузить большие файлы,
//а клиент если захочет, сам загрузит то, что его заинтересовало в новых окнах.
//
if ($i/2==ceil($i/2)) { // если номер картинки на странице четный
echo '<td width=210 rowspan=2><p align=right CLASS='.$style_osn.'>'.$descript.'</p
></td><td hight='.($smheight+2).'><table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000" border=0><tr><td><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');">
<IMG SRC='.$smphoto.' WIDTH='.$smwidth.' HEIGHT='.$smheight.' BORDER=0 alt="увеличить"></A></td></tr></table
></td></tr><tr><td valign=top
><center><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.'</a></center></td></tr></table>';
}
else { // если номер картинки нечетный
echo '<td align=left><table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000"><tr><td hight='.($smheight+2).'><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"><IMG SRC='.$smphoto.' WIDTH='.$smwidth.' HEIGHT='.$smheight.' BORDER=0 alt="увеличить"></A></td></tr></table></td><td width=210 rowspan=2><p align=left CLASS='.$style_osn.'>'.$descript.'</p
></td></tr><tr><td valign=top
><center><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.'</a></center></td></tr></table>';
}
}
// вывод на экран "вперед-назад"
echo '<p align=center class='.$style_zag2.'>'.$navig.'</p>';
// вывод на экран номеров страниц
echo '<div align=center>';
for ($scr=1; $scr<=$scrmax; $scr++) {
$beginsrc=($scr-1)*$scrpic+1;
if ($beginsrc==$begin) {
echo '  <span class='.$style_zag2.'>'.$scr.'</span>  ';
}
else {
echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.' class='.$style_zag2.'> '.$scr.' </a> ';
}
}

?>

</div>
</td></tr></table>
</body>
</html>



Программа администрирования та же, что и в варианте 1.


Вариант 3



В этом варианте используется база данных mysql вместо текстового файла для хранения описаний, имен картинок и порядка их следования.
Здесь тоже в базе хранятся именя файлов с расширениями (при варианте без расширений, будет тратиться время на пиоск картинки по описанному выше алгоритму, а при заливке картинок через вэбинтерфейс проще хранить имена файлов с расширениями).
Алгоритм работы программы такой же, что и в предыдущем примере. Однако, вместо считывания файла, считывается база галереи. Для ускорения можно было бы поместить операцию считывания в цикл вывода картинок на экран и не считывать все строки базы.
Для создания таблицы базы картинок используйте этот скрипт:

<?
//инициализация mysql:
$mysql_login='login';
$mysql_host='host';
$mysql_pass='password';
$mysql_db='db';
//

mysql_connect($mysql_host,$mysql_login,$mysql_pass);
mysql_select_db($mysql_db);
mysql_query("set CHARACTER SET cp1251_koi8") or die ("!--не могу записать"); // эта строка
используется, если сайт в кодировке win, а база в кодировке кои-8.
Если кодировки совпадают, строку надо закомментировать.

$query="CREATE TABLE galery_regats (numer tinyint(4) NOT NULL, name text NOT NULL, description text NOT NULL)";
$res=mysql_query($query) or die ("!--не могу создать таблицу");


header("location: admin.php"); // переход на страницу администрирования

?>


Программа администрирования:

<html>
<head>
<title>Admin galery</title>
<link rel=stylesheet type="text/css" href="../../style.css">
</head>
<body bgcolor=#eeeeee>
<br>

<?
// логин/пароль
$log='total';
$pas='total';
//инициализация
mysql:
$mysql_login='login';
$mysql_host='host';
$mysql_pass='password';
$mysql_db='db';
//
$style_zag2='zag2-main'; // стили текста на странице
$style_osn='osn-main'; // стили текста на
странице$style_link='link'; // стили текста на странице
$kon_str="\n"; // конец строки
$razdel="|"; // разделитель между именем картинки и описанием
?>
<p align="center" class="<? echo $style_zag2; ?>">Картинная галерея.</p>
<?
mysql_connect($mysql_host,$mysql_login,$mysql_pass);
mysql_select_db($mysql_db);
mysql_query("set CHARACTER SET cp1251_koi8") or die ("!--не могу записать");


switch ($prov) { // проверяем состояние переменной $prov
case "edit":


// если пишем новый вариант базы:
if ($login!=$log || $pass!=$pas) { echo "Введите правильно логин/пароль"; } // если пароль неверен
else {


// удаляем текущую базу картинок и создаем пустую таблицу


$query="DROP TABLE galery_regats"
$res=mysql_query($query) or die ("!--не могу удалить таблицу");
$query="CREATE TABLE galery_regats (numer tinyint(4) NOT NULL, name text NOT NULL, description text NOT NULL)";
$res=mysql_query($query) or die ("!--не могу создать таблицу");
$pics=explode($kon_str,$block); // бьем наш список по символу переноса строки
for ($i=0; $i<sizeof($pics); $i++) { // пишем в базу данные
$string=explode($razdel,$pics[$i]); // бьем строки по символу разделителя
$query="insert into galery_regats (number, name, description) values ('$i', '$string[0]', '$string[1]')";
mysql_query($query) or die ("!--не могу записать"); // пишем в таблицу
}
}
break;
default:
// если мы зашли не по нажатию на ентер:
// читаем базу картинок и сохраняем в массивы
$zapros="select * from galery_regats order by
numer";$res=mysql_query($zapros);
$kol=mysql_num_rows($res);
if ($kol==0) {
echo "<span class=$style_osn>Нет картинок в галерее.</span>";
}
for ($i=0; $i<$kol; $i++) { // читаем базу и сохраняем имена картинок.
$pic[$i]=mysql_result($res,$i,"name"); // присваиваем текущему элементу массива
$description[$i]=mysql_result($res,$i,"description");
}
break;
}
}
?>
<form method=post action="<? echo $PHP_SELF; ?>">
<textarea name="block" rows="40" cols="40">
<?
// выводим текущее состояние базы картинок
for ($i=0; $i<sizeof($pic); $i++) {
echo $pic[$i].$razdel.$description[$i].$kon_str;
}
?>
</textarea>
<input type="text" name="login" size="10">
<input type="text" name="pass" size="10">
<input type="hidden" name="prov"
value="edit"><input type="submit" name="enter" value="Enter">
</form>
</body>
</html>


Форма заполняется как и во втором варианте.

А для получения 3-го варианта в коде программы 2-го варианта строки от строки
//сама программа
до строки
$maxpic=count($pic); // сколько файлов в папке с малыми картинками

которые являются блоком считывания файла в массивы,
заменяются на блок:


mysql_connect($mysql_host,$mysql_login,$mysql_pass); // соединение с базой (коннект)
mysql_select_db($mysql_db); // выбор базы
mysql_query("set CHARACTER SET cp1251_koi8") or die ("-------------не могу записать");
// Если кодировки базы и сайта совпадают - закомментировать эту строку

$zapros="select * from galery_regats order by numer";
$res=mysql_query($zapros);
$kol=mysql_num_rows($res);
if ($kol==0) {
echo "Нет картинок в галерее.";
}
for ($i=0; $i<$kol; $i++) { // читаем файл ини и сохраняем имена картинок.
$si=$i+1;
$pic[$si]=mysql_result($res,$i,"name"); // присваиваем текущему элементу массива с именами файлов имя текущего файла
$description[$si]=mysql_result($res,$i,"description");
}

Результат работы блока точно такой же, что и во втором варианте - массивы $pic и $description, где храним имена файлов картинок и описания к ним. Но работает такая галерея быстрее. Однако, каждый раз, когда хотите залить новую картинку, надо администрить галерею, даже если не нужно описание. А в первом варианте стоит только лишь закинуть в папки файлы картинок.


Таким образом, получаем 3 рабочих варианта программы галереи. Если будут возникать вопросы по работе программы, адаптации под "свой сайт" или по принципам, пишите мне по адресу totoeval@mtu-net.ru


Тотоев Александр
www.czar.ru
www.nova-wings.ru





 :::::  Serg пишет 26.09.2001 @ 01:17 
Zomb мне понравилась твоя работа.
Поделись исходником -сбрось на email
sergayw@yahoo.com или укажи где взять.

 :::::  BuG пишет 27.09.2001 @ 15:11 
2Zomb:

ХАТЮ! Очень Хатю! Кидай в мыл bug13@nets.kz
 :::::  ShurA пишет 03.10.2001 @ 00:34 
Zomb, Если не затруднит, то хотел бы получить этот код на мыло: webmaster@nat.ru
 :::::  Bob пишет 03.10.2001 @ 01:44 
Zomb, я присоединяюсь к тем, кому понравилась твоя работа.
Заранее спасибо за исходники. Жду.
vplus@fromru.com

 :::::  Helen пишет 03.10.2001 @ 14:46 
Zomb, классная работа! Кинь, пожалуйста, мне на мыло исходники.
Заранее благодарна.
 :::::  SergeyKa пишет 04.10.2001 @ 12:42 
2Zomb:

http://www.pv-gazeta.dp.ua/NewYork/index.php?gal=no&col=no&row=no

No comment. Хотя красиво ;)
 :::::  Andrey пишет 06.10.2001 @ 18:43 
И мне пожалуйста пришли исходники - britneyspears@wallst.ru . Заранее благодарен.
 :::::  Axeleratpr пишет 11.10.2001 @ 03:40 
Если нетрудно сбрось и мне на мыло
Заранее благодарен
 :::::  Axeleratpr пишет 11.10.2001 @ 03:42 
Блин, забыл адрес
-rib-axel@mail.ru
 :::::  Eugeny пишет 11.10.2001 @ 15:30 
Прикольно. Может, кинешь исходники - remart@newmail.ru - Заранее спасибо.
 :::::  Zomb пишет 16.10.2001 @ 21:28 
2 SergeyKa:

Спасибо что ткнул носом :о))
Баг пофиксен!

2 Всем:

Кому уже выслал исходники прошу обновить файлик conf.php

<?
settype($col, "integer");
settype($row, "integer");
if (isset($pg)) { settype($pg, "integer"); $pg=abs(intval($pg));}
$col=abs(intval($col));
$row=abs(intval($row));


if (isset($gal)) { $gal=abs(intval($gal+0)); settype($gal, "integer"); }

if (($col==0) or ($col<1) or ($col>10)) { $col=3; }
if (($row==0) or ($col<1) or ($col>10)) { $row=1; }

// тут идет описание ваших каталогов и названий фотоальбомов
// в переменных
// $title[];
// $dir[];
// $picurl[];
// $tndir[];


if (isset($gal)) { if (($gal>(count($title))) or ($gal<0)) { unset($gal); } }

?>

Фишка оказывается вот в чем:
Конвертим переменную в числовой формат функцией settype(); на тот случай если в переменную $var введут какойнибудь массив (например http://www.my.site?var[]=3)
Тогоже еффекта можно добиться путем прибавления к строковой переменной (а при передаче параметров через адресную строку все! переменные автоматически становятся строковыми) ноль то она таким образом конвертируется в числовую но останется массивом :о)
Но тут тоже есть подводные камни. Если значение переменной, передаваемой методом GET, к примеру будет равно "54qwerty" то после преобразования она станет равна 54.
А вот если она до преобразования была равна "qwerty54" то потом она станет равна 0...
Но и это еще не все. Умники вроде SergeyKи могут ввести и отрицательное число, и дробное. Вот тут нам и приходит на помощь функция intval(); и математическая функция abs(); которые отбразывают дробную часть и делают число положительным.
Ну и проверив переменную на зашкаливание значения присваеваем ей значения по дефолту.

Желающие могут отказаться от таких преобразований просто проверив переменную на "вшивость" функцией gettype(); и в случае чего зделать ей дефолт или вообще unset(); от греха подальше :о)

Вот вроде бы и все!

Спасибо всем за приятные отзывы о галерее :о))
 :::::  Zomb пишет 16.10.2001 @ 21:53 
PS. самые ленивые могут поставить в конфиге только

error_reporting(0);

если целью мероприятия является убратие с экрана сообщений об ошибках :о)
 :::::  Korsar пишет 17.10.2001 @ 04:05 
Я только что начал получать рассылку от Webscript.ru поэтому немного опоздал к. г. к "раздаче" если можно то и мене пришли исходник, плиз!
 :::::  Vint пишет 31.10.2001 @ 13:58 
2 Zomb

Звини, что совсем поздно... Я тут в новых... А учиться - так у лучших))) Не будешь любезен скинуть исходник на dsgroup@rambler.ru
 :::::  Lelik пишет 06.11.2001 @ 18:45 
Zomb, я понимаю тебя достали,но не мог бы ты всётаки и мне выслать исходнички ?или может у тебя есть окуда их стянуть...
 :::::  Lelik пишет 06.11.2001 @ 18:45 
Zomb, я понимаю тебя достали,но не мог бы ты всётаки и мне выслать исходнички ?или может у тебя есть окуда их стянуть...
webmaster@bestnet.kharkov.ua

 :::::  Fedor пишет 10.11.2001 @ 21:12 
Пожалуйста, ув. Zomb и мне сырцов залейте Fedor@mgr.gq.nu как начинающему php-шнику очень пригодится
 :::::  SteelRat пишет 05.12.2001 @ 01:43 
Здравствуйте, Zomb! Я, конечно, не буду оригинален если попрошу вас кинуть мне сырцов на SteelGames@yandex.ru, но всёже не посчитайте за труд выполнить мою маленькую просьбу. Заранее спасибо, SteelRat.
 :::::  pavka пишет 14.02.2002 @ 23:38 
Zomb, привет. Не серчай на нашу инетовскую братию, и поделись информацией - скриптом, который наверняка восхваляем кучей людей, к коим я и присоединяюсь. Высылай на pav_ka@mail.ru
 :::::  roustam пишет 14.03.2002 @ 16:38 
Здравствуйте, Zomb!
Я еще не опоздал?! Можно и мне попросить исходники.
С уважением Roustam
school139@mail.ru

 :::::  Shaggoth пишет 28.10.2002 @ 03:59 
Гм...
а ещё можно ?
если да, то шли на black@metal.ee
 :::::  Вад пишет 12.11.2002 @ 23:45 
И мне если можно dolmenko@pisem.net
 :::::  Алексей пишет 01.12.2002 @ 17:05 
Я еще не опоздал?! Можно и мне попросить исходники фотогалереи http://www.pv-gazeta.dp.ua/NewYork.
С уважением Алексей
axel_flame@mail.ru
 :::::  Dim пишет 14.12.2002 @ 11:39 
Попытался установить.
Всё получилось прекрасно http://cip.irkusk.ru/sections/photo/?dp=gallery1
Галерея работает, но один момент меня очень сильно огорчает. Если
возможно, помогите разобраться вот с чем.
Не могу понять как задаётся последовательность вывода картинок в
галереи?
Имена файлов изображения имеют вид 1amssota.jpg
Разница в именах только в первой цифре.
При этом картинки предпросмотра почему выводятся в странном порядке,
так:
7amssota.jpg
4amssota.jpg
5amssota.jpg
6amssota.jpg
3amssota.jpg
8amssota.jpg
1amssota.jpg
2amssota.jpg
При смене имён файлов оригинальных и предпросмотра порядок всё равно
картинки выводятся по непонятной мне логике, т.е. она так же меняется.
Как я не бился, всё равно картики предпросмотра выводятся не в той
последовательности, которая задана в файле описании и не по именам
файлов изображения.
Помогите, пожалуйста, подскажите каким образом можно было бы вывести
картинки в строгой какой-либо последовательности, заданной мной.
Буду благодарен за дельные советы. Спасибо.

 :::::  Dim пишет 14.12.2002 @ 11:41 
Да, забыл сказать, устанавливал первый вариант скрипа
 :::::  VaNDaL пишет 07.01.2003 @ 19:52 
2Zomb, если не сложно, то кинь мне тоже: vandal@land.ru
 :::::  Sergey пишет 12.01.2003 @ 22:18 
Zomb, если не сложно, то и мне киньте пожалуйста: pisma_sergo@mail.ru
Заранее благодарен!
 :::::  Nat пишет 03.03.2003 @ 14:22 
Классная работа, Zomb, а я только осваиваюсь в Web-программировании. Если нетрудно, скинь исходничек: my_krov@mail.ru
 :::::  endlesscat пишет 04.03.2003 @ 21:37 
Cool!
Zomb, еще не поздно попросить исходники? endlesscat@ukrtop.com or url?
 :::::  deus пишет 06.03.2003 @ 11:44 
Zomb, может и мне скинешь скрипт?
naa@gd.tomsknet.ru
 :::::  Selim13 пишет 23.03.2003 @ 17:33 
И мне plz :)
selim13@yandex.ru
 :::::  AiR пишет 14.06.2003 @ 14:47 
2Zomb. удет свободное время скинь мне на мыло скриптик.
 :::::  Владос пишет 03.07.2003 @ 20:43 
Zomb... давненько у тебя ничего не просили... скинь скрипт, плиз... vlados@netvision.net.il
 :::::  Axel пишет 30.07.2003 @ 19:07 
hello Zomb,
полностью присоединяюсь к тем, кому понравилась твоя работа
спасибо за исходники
С уважением, Axel
axelblack@gmx.net
 :::::  Miller пишет 04.12.2003 @ 18:38 
И мине ПЛЗ!
miller@xaker.ru
 :::::  Tonik пишет 10.12.2003 @ 15:42 
А я че рыжий фтоль?
И мне!!!!!!!!!!!
:)
Пжалста
 :::::  Tonik пишет 11.12.2003 @ 13:59 
 :::::  ismag пишет 25.03.2004 @ 04:58 
 :::::  Roman пишет 06.04.2004 @ 13:30 
Ну и мне заодно...
roman_ch@rambler.ru
 :::::  Shade пишет 12.06.2004 @ 21:24 
я енто тоже хтю :))
shade11@mail.ru
 :::::  Basile пишет 21.06.2004 @ 09:16 
А мне можно? Basile666@inbox.ru
 :::::  Alex пишет 28.06.2004 @ 12:02 
Ну что за издевательство, в самом-то деле. Неужели нельзя исходники выложить на сайте и дать ссылку. Маразм какой-то, когда сто человек просят выслать им на мыло исходник. А еще сто попросят в ближайшем будущем. ДАЙТЕ НОРМАЛЬНУЮ ССЫЛКУ!!!
 :::::  Тотоев Александр пишет 28.06.2004 @ 14:44 
Маразм то, что сам ен можешь ничего сделать.
А нахаляву ничего не бывает.
Умник.
Ты еще поучи людей вести себя в сети.
хочешь ссылку?
ru.php.net
вот тебе ссылка.
 :::::  Alex пишет 29.06.2004 @ 10:02 
Я никого ничему учить не собираюсь.
А еще мне странно, что кто-то пытается судить о моей квалификации по одному посту, ну да бог с ним. По поводу данной ссылки, то она появилась у меня в закладах в разделе PHP первой :).
Не хотите давать исходник - не надо. Обойдусь, не гордый. Просто интересно стало посмотреть на код. Но мыло давать не буду. Хватит с меня спама и менять ящики каждый месяц мне влом.
По поводу маразма - от своих слов не отказываюсь. Интересно, когда автору скрипта надоест каждому высылать свой код? И как можно что-то обсудить, кога одна фраза отделена от другой 15-20 постами "И мне, и мне пожалуйста, маил@такой-то". Не знаю кого как, а меня это напрягает.
На этом сию бесполезную дискуссию позвольте закрыть, больше я этой темы касаться не буду.
С уважнеием Alex
 :::::  ValHal пишет 05.07.2004 @ 01:37 
И мне сбрось плииз :)
ventura_forever@hotpop.com

P.S. Запостить ссылку было бы разумнее - меньше бы доставали )
 :::::  KoNA пишет 04.08.2004 @ 09:43 
И мне, пожалуйста кинь на мыло: kona-design@yandex.ru
Заранее благодарю.
 :::::  self пишет 09.08.2004 @ 15:37 
ребят подскажите как задать фиксированный размер нового окна в HTML
просто ни как не могу найти...а где нашел там путанно и не понятно...заранее спасибки
 :::::  krik пишет 24.08.2004 @ 03:19 
i mne, i mne, i mne ,i mne ..... ;)))) kak papugai. a samim 4o slabo napisatj?
 :::::  макс пишет 05.09.2006 @ 16:21 
Интересная статья. Но у меня вопрос:
Как сделать так, что бы эта галерея выводила картинки по дате?
 :::::  LOKI пишет 16.11.2006 @ 08:06 
А нафига Вам исходники? Все и так в статье написано!
 :::::  Genex пишет 27.03.2007 @ 14:24 
Zomb, не поздно попросить исходники? genex.arm@gmail.com
 :::::  Илья пишет 07.04.2008 @ 20:06 
samiznaetekomy(га-гав)gmail.com мне тоже плиз иходники
 :::::  Vertel пишет 24.06.2008 @ 00:48 
Хорошо получилось : http://vertel.ru спасибо программерам
 :::::  Лена пишет 15.09.2008 @ 14:16 
Zomb, не поздно попросить исходники? ele52022268@yandex.ru
 :::::  Alex пишет 18.09.2008 @ 15:42 
я еще не опоздал к раздаче?)hidoiecchi@gmail.com
Имя:
Email:
URL

Введите сумму двух чисел семь и шесть (семь+шесть=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0542591