Галерея на Php

Статус
Закрыто для дальнейших ответов.

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
Ребят, подскажите, как сделать галерею, чтоб картинки располагались в один ряд с пролистыванием соответственно. Вобщем мне надо чтоб на странице выводились изображения с порядковыми номерами (допустим по 5 чтук) и соответственно при пролистывании - следущие 5 чтук. У меня че та не выстраивается структура что куда и зачем....
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Хм... Ну... Во первых нам нужно делать запрос к БД с лимитои [x-5, x]. Т.е. к примеру LIMIT 0,5 // LIMIT 10,15

Чтобы его делать - нудно как-то опряделять страницу. Юзаем $_GET['page']... А вот тут уже нужно думать.... Хотя что нам думать?

Код:
$l2 = $_GET['page'] * 5;
$l1 = $l2 - 5;
$limit = $l1.", ".$l2;

$query = mysql_query("SELECT `image`, `width`, `height` FROM `site_photos` ORDER BY DESC LIMIT ".$limit");
Код:
if (empty($_GET['page'])) {
	$_GET['page'] = 1;
}
 

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
А вбазе я так полагаю должны храниться id картинки и урла на нее?
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Вот насчёт этого у Вас представления неверные.

в LIMIT первое число означает начальную позицию, а второе — сколько элементов с этой позиции нужно вывести. То есть такой командой Вы выведете записи не с 10 по 15, а с 10 по 25.

а вместо конструкции
Код:
$l2 = $_GET['page'] * 5;
$l1 = $l2 - 5;
я бы написал:
Код:
$l1=($_GET['page']-1)*5;
$l2=$l1+5;
Хотя, суть от этого не изменится...
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Хм, на счет лимита... Я думал выводит от x до y
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Увы, нет. Начиная с X, Y позиций
 

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
А вот еще вопрос - как будет выглядеть функция которая выводит рандомным образом из папки все ту же картинку *.jpg в таблицу?
это что то вроде random() я так понимаю.... а как оно выглядит целиком?...
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
А вот еще вопрос - как будет выглядеть функция которая выводит рандомным образом из папки все ту же картинку *.jpg в таблицу?
это что то вроде random() я так понимаю.... а как оно выглядит целиком?...
Код:
<?
$arr_img_name[]=array();
$dir=dir("/photo/");
while (false !== ($entry = $dir->read())) {
	if(is_file($entry))
	{
		if(ereg('(.*).jpg',$entry))
		{
			$arr_img_name[]=$entry;
		}
	}
}
print $arr_img_name[rand(0,count($arr_img_name))];

?>
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Если юзать бд то так:
Код:
$arr_img_name[]=array();
$result=mysql_query("SELECT url FROM table_name");
while ($array=mysql_fetch_array($arr_img_name)) {
	$arr_img_name[]=$array[0];
}
print $arr_img_name[rand(0,count($arr_img_name))];
Если чесно не вижу смысла использовать бд если у нас все фотки лежат в одной дериктории...
Вот если бы мы захотели еще и комент к каждой фотке хранить тогда да...
ИМХО лучше просто читать из папки файлы и сортировать по дате...
Еще кстати есть еще такие фишки если кадр был снят на цифровик и обработан "умными" прогармами(для уменьшения) то можно получить точную дату\время снимка и другие технические параметры.. Вся инфа храниться в заголовках jpg файла которые читает функция exif_read_data
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
вместо функции rand() гораздо (!) лучше использовать mt_rand() и, соответственно, перед вызовом собственно самой функции сделать mt_srand(). Вот так:

Код:
$arr_img_name[]=array();
$result=mysql_query("SELECT url FROM table_name");
while ($array=mysql_fetch_array($arr_img_name)) {
	$arr_img_name[]=$array[0];
}
mt_srand((double)microtime()*10000000);
print $arr_img_name[mt_rand(0,count($arr_img_name))];
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Согласен, лучше юзать mt_rand() просто сишная привычка:)
ЗЫ
С PHP 4.2.0 mt_srand() юзать не обязательно
ЗЫЫ
Код копировать третий раз не буду :cool:
 

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
А если все таки с использованием бд (с расчетом на дальнейшее развитие и потом делать добавление комментов и тд), как лучше организовать таблицу?
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
А если все таки с использованием бд (с расчетом на дальнейшее развитие и потом делать добавление комментов и тд), как лучше организовать таблицу?
photo структура типо:
id
url варчар
date дата(время если есть точность)
coment варчар или текст(если комент больше 255 символов хочеш)
group_id если хочеш на группы подразделять int содержит ид из др. таблицы
можно поле голосовалки еще присобачить если не лень...

если есть группы то таблицу group
id
name имя группы

А уменьшать как будеш?
 

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
Что уменьшать? фоты? так у меня фоты в маленьком размере с них будут ссылы на полную картинку...
 

LeopART

Well-Known Member
Регистрация
10.05.2005
Сообщения
718
Код:
<?
	 $arr_img_name[]=array();
	 $dir_name = "zver";
	 $dir=dir($dir_name);
	 while (false !== ($entry = $dir->read()) )
	 {
		  $file_name = $dir_name.'/'.$entry;
		  if ( is_file($file_name) )
		  {
			   if(ereg('(.*).jpg',$entry))
			   {
					$arr_img_name[]=$entry;
			   }
		  }
	 }
 $file_name = $dir_name.'/'.$arr_img_name[rand(0,count($arr_img_name)-1)];

	 $im = @imagecreatefromjpeg($file_name); 
	 imagejpeg ( $im );
?>
в чем тут ошибка?
вместо картинки выводится набор символов типа
Код:
яШяаJFIFяю>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality яЫC    $.' ",#(7),01444'9=82<.342яЫC  2!!22222222222222222222222222222222222222222222222222яА–И"яД яДµ}!1AQa"q2?‘Ў#B±БRСр$3br‚
тот же скрипт в инет выложенный работает нормально
http://www.skytramp.spb.ru/zver.php
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Перед imagejpeg(); вставьте конструкцию header('content-type: image/jpeg');
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Обхясните, чем отличается mt_rand от rand? Я так понял он генерирует более удачные комбинации, но как это понять? Мне как-то все удачно... Если я ставлю rand(0, 10) я буду рад как 0 так и 10-ке.
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
А тем, что rand() генерирует число на основе времени, а mt_rand() произвольное число.
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Во, как долго я ждал этого ответа. Пишут же №%!?%*: "Генерирует наиболее удачное значение".
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Многие генераторы случайных чисел в старых libcs имеют сомнительные или неизвестные характеристики и работают медленно. По умолчанию PHP использует генератор случайных чисел libc с функцией rand().
mt_rand() это замена для неё. Она использует генератор случайных чисел с известными характеристиками, Mersenne Twister, который производит случайные числа, подходящие для некоторых видов криптографии, и работает в 4 раза быстрее libc.
Вот и вся разница...
 
Статус
Закрыто для дальнейших ответов.
Верх Низ