Показать полную графическую версию : Фотогалерея на PHP и MySQL
Plutonium 239
06-01-2006, 10:40
Мне нужно сделать скрипт фотогалереи, чтобы к каждой фотке был комментарий, название и некоторые параметры, и чтобы можно было оценивать фотки, и чтобы можно было все это сортировать по любому параметру. Подскажите, плз, как это лучше сделать?http://www.forum.oszone.net/images/smilies/new/unsure.gif
И вот еще, как лучше сделать для нескольких разрешений хранить несколько копий фотографии в разных разрешениях или одну в максимальном и при выборе разрешения, чтобы PHP фотку ресайзил? Мне больше нравиться второй вариант из-за экономии места, я примерно представляю как это сделать, но только примерноhttp://www.forum.oszone.net/images/smilies/new/mellow.gif
Vlad Drakula
07-01-2006, 10:56
Plutonium 239
И вот еще, как лучше сделать для нескольких разрешений хранить несколько копий фотографии в разных разрешениях или одну в максимальном и при выборе разрешения, чтобы PHP фотку ресайзил? Мне больше нравиться второй вариант из-за экономии места, я примерно представляю как это сделать, но только примерно
а сервер достаточно мощьный???
Мне нужно сделать скрипт фотогалереи, чтобы к каждой фотке был комментарий, название и некоторые параметры, и чтобы можно было оценивать фотки, и чтобы можно было все это сортировать по любому параметру. Подскажите, плз, как это лучше сделать?
а так всегда... никто не знает как что то деать точно... просто берут и делают... главное знать нужное направление!!!
Plutonium 239
07-01-2006, 11:01
а сервер достаточно мощьный???
Сайт скорее всего будет на бесплатном хостинге, а может и на платном, какой там сервер я не знаю.
а так всегда... никто не знает как что то деать точно... просто берут и делают... главное знать нужное направление!!!
так я и примерно не знаю, мне бы узнать это направление...
Plutonium 239
07-01-2006, 17:54
Кто-нибудь подскажите почему эта строчка
$db = new mysqli('localhost', 'plutonium', '03jDn01', 'plutonium');
вызывает ошибку:
Fatal error: Cannot instantiate non-existent class: mysqli
и что нужно сделать, чтобы она заработала?
vadimiron
07-01-2006, 20:31
Пишет, что не существует такого класса, видимо файлик с определением этого класса надо подсоединить к скрипту
А направление можно примерно такое задать, в базе хранить только имена картинок(либо полный путь к ним, но лучше просто имена тогда папки с картинками лечге менять будет), а все варианты (то есть большая и маленькая картинка), должны знать скрипты, то есть просто создаём маленькую картинку с тем же самым именем, что и основная и храним в спец папке (типа "little_img"). Могу посоветовать кеш систему ввести, чтобы каждый раз одни и теже картинки размеры не изменять, сохранять разные варианты картинок (наиболее часто просматриваемых) отдельно, то есть скрипт сначало смотрит в папку с созданными картинками, и если там ничего не находит, то идёт уже работать над основной
чтобы PHP фотку ресайзил
Это зря. Потому как GD сначала изображение распаковывает, то есть делает из него .bmp. А ты сам знаешь сколько они весят.
Вариант предложенный vadimiron лучше.
Насколько я понял mysqli создано для PHP5, оно есть на хостинге? Скорее всего там PHP4. А значит надо использовать mysql
Хотя если ты взял готовую систему, тогда надо было выбрать другой файл для базы.
Plutonium 239
08-01-2006, 06:47
Насколько я понял mysqli создано для PHP5, оно есть на хостинге? Скорее всего там PHP4. А значит надо использовать mysql
На хостинге MySQL 3 и PHP 4, а я читал учебник по пятым версиям:( Как теперь это все переделать?
Вот такая таблица у меня получилась:
create table foto
( fotoid int unsigned not null auto_increment primary key,
file char(50) not null,
name char(50) not null,
authorid int unsigned,
date date not null,
foto_date date,
area tinyint unsigned
);
а все варианты (то есть большая и маленькая картинка), должны знать скрипты, то есть просто создаём маленькую картинку с тем же самым именем, что и основная и храним в спец папке (типа "little_img")
Так и сделаю, а ресайз делать вообще не буду, пускай все картинки будут в максиальном разрешении.
Plutonium 239
08-01-2006, 07:41
Переделал код, но все равно не работает:( Пишет, что все нормально, один ряд добавлен, а в базе ничего не меняется:( В чем здесь ошибка?
$db = mysql_connect("localhost", "plutonium", "03jDn01", "plutonium");
if (mysqli_connect_errno($db))
{
echo "Не удалось подключиться к базе данных";
exit;
}
$query = "insert into foto
(file, name, authorid, area)
values
($file, $name, $authorid, $area)";
$result = mysql_query($query, $db);
echo mysql_affected_rows($db) . "записей добавлено";
mysql_close($db);
Я был не прав. Вот небольшая статья о mysqli http://phpclub.ru/detail/article/mysqli
Так и сделаю, а ресайз делать вообще не буду, пускай все картинки будут в максиальном разрешении.
Это смотря сколько они весят и какие размеры картинок у тебя будут. Может сделать ручной ресайз будет сделать намного проще.
char(50)
Интересно почему - 50? Цифра круглая? :) VARCHAR (255) на мой взгляд - лучшее решение. Никто не знает какое имя файла будет в будущем.
http://dev.mysql.com/doc/refman/4.0/ru/char.html
В чем здесь ошибка?
В таких случаях пишу echo $query копирую сам запрос и бегом в phpMyAdmin - там выполняю этот запрос.
Хотя может http://php.rinet.ru/manual/ru/function.mysql-error.php было бы правильнее.
Plutonium 239
09-01-2006, 07:59
Переправил
$db = mysql_connect("localhost", "plutonium", "03jDn01", "plutonium");
на
$db = mysql_connect("localhost", "plutonium", "03jDn01") or die("Could not connect : " . mysql_error());
mysql_select_db("plutonium") or die("Could not select database");
и все заработало.
Это смотря сколько они весят и какие размеры картинок у тебя будут. Может сделать ручной ресайз будет сделать намного проще.
Все картинки 1600*1200 и весят 200-400Кб, я их решил ресайзить при загрузки вот этим кодом
$image = $upfile;
$max_width = 160;
$max_height = 120;
$size = GetImageSize($image);
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = ImageCreateFromJpeg($image);
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0,
$tn_width,$tn_height,$width,$height);
Интересно почему - 50? Цифра круглая?
Да, именно по этому:) Имена файлов будут типа 1.jpg 2.jpg и т.д. так, что бумаю 50 вполне хватит. А чем VARCHAR лучше, чем CHAR я не понял:unsure:
Еше нужно преобразовать дату из любого формата в формат MySQL, сделал вот так
$foto_date = date('Y-m-d', strtotime($_POST['foto_date']));
но почему-то это не работает:unsure:
Underson
09-01-2006, 12:49
"plutonium", "03jDn01" ты это серьезно если это твои реальные логины и пароли... УБЕЙ СЕЙ ЧАС ЖЕ... в текстах тоесть еще скажи где твой сайт расположен и тода вооще всем хорошо будет..., что бумаю 50 вполне хватит. А чем VARCHAR лучше, чем CHAR я не понял
как те сказать просто varchar делает запись той длинны какой длинны у тя занечение переменной... а Char всегда максимальной в этом и разница... нагрузка на сервак увеличивается но размер базы уменьшается...
"1.jpg" в varchar(255) будет занимать 5 байт, а в char(50) ----> 50 б... а 255 это максимальная длинна записи...
поправте меня если я не прав
Plutonium 239
09-01-2006, 15:51
ты это серьезно если это твои реальные логины и пароли... УБЕЙ СЕЙ ЧАС ЖЕ... в текстах тоесть еще скажи где твой сайт расположен и тода вооще всем хорошо будет...
Да нет, это для теста, а сайт пока только у меня на компе расположен.
ImageDestroy() не забудь в таком случае.
Plutonium 239
14-01-2006, 08:54
Подскажите как сделать рейтинк картинок? Около кажной картинки 5 ссылок: от очень плохо до очень хорошо, как все это расчитывать чтобы получился грамотный рейтинг, а то у меня кроме средного бала ничего не выходит:(
Как сделал бы я:
В таблице фотографий добавил 2 поля - Mark и TotalVote.
При выводе результата(рейтинга) округлял цисло содержащееся в Mark и сравнивал его:
если 1 - ужасно, 2 - плохо, 3 - ..... и т.д.
При голосовании,
в переменные om и ov - содердимое тех полей
ms = om*ov;
ms = om + <новая оценка>;
nv=ov+1;//добавляем 1 к проголосовавшим
nm = ms/nv; // вычисоляем среднее арифметическое
nm & nv - в таблицу.
Или чтобы не заниматся округлением в таблице можно сделать типы полей INT
Есть другой вариант - сделать графический рейтинг(полоска с градиентом от красного - до зеленого)... немного ложнее, но красивше...
vadimiron
14-01-2006, 12:57
Я бы наверно сделал бы отельную таблицу с рейтингами, то есть ID картинки, ID юзера и выбранный рейтинг
Потом просто выбираем картинку которая нужна, и уже делим или суммируем, короче всё что угодно, также можно вывести статистику, сколько процентов каждый из рейтингов был выбран для той картинки, например сколько 2-ек или сколько 5-ок
Так как чаще всего сумма поделённое на количество нужно, я бы сделал VIEW, где бы хранил уже вычисленные средние значения, в 5-ом MySQL возможно даже такое можно автоматизировать с помощью тригеров, но здесь я уже не специалист.....
Plutonium 239
14-01-2006, 18:15
Сделал отдельно систему оценок и систему рейтинга. К таблице фоток добавил три поля: общая оценка, количество проголосовавших и рейтинг.
По количеству проголосовавших и общему количеству балов расчитывается средняя оченка.
Оценка выставляется от -1 до 1, и прибавляется к значению поля рейтинга, потом по нему тоблица сортируется.
А для его отображения расчитывается процентный рейтинг
$l = $foto_rate_max - $foto_rate_min;
$pr = round(((($l - ($foto_rate_max - $foto_rate)) / $l) * 100), 2);
как-то запутано получилось, но рейтинг показывается в процентах, у картинки с самым низким рейтингом 0% с самым большим 100%.
А показывается все так:
http://i29.photobucket.com/albums/c264/Plutonium-239/f1c49d24.jpg
Чего-то я ни фига не врубился в рейтинг ...
И как - оценка выставляется от -1 до 1, а средний балл - 6.46
Plutonium 239
15-01-2006, 00:24
Чего-то я ни фига не врубился в рейтинг .. Я сам в нем путаюсь:)
Просто там балы отдельно от рейтинга. Балы выставляются 2-4-6-8-10 ужастно-плохо-средне-хорошо-отлично рейтинг -1 -0,5 0 0,5 1 соответственно.
Если за картинку проголосует один чел на отлично у нее средний бал будет 10, а ретинг ~50%.
Может и дизайн за одно зацените :shuffle: он правда по шаблону сделан, на большее времени нет
http://i29.photobucket.com/albums/c264/Plutonium-239/08bea896.jpg
Почему 50%? А 100% когда будет?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.