Фотогалерея

Slaughter

Новичок
Фотогалерея

есть таблица.....с id, adr и count

есть код:
PHP:
switch ($_GET['id'])
{
    case '1a':
	      include("conn.php");
//Смотрим какое значение count
		  $id=1;
		  $query = "SELECT `count` FROM `fotoa` ORDER BY `id` = '$id'";
		  $res=mysql_query($query,$link);
		  $n=0;
		  while ($line = mysql_fetch_array($res))
   		  {
       		$count[$n]=$line[0];
   		  }
		  $count=$count[$n];

//Смотрим какое значение adr
		  $querya = "SELECT `adr` FROM `fotoa` ORDER BY `id` = '$id'";
		  $resa=mysql_query($querya,$link);
		  $k=0;
		  while ($line = mysql_fetch_array($resa))
   		  {
       		$addr[$k]=$line[0];
   		  }

//+1 к $count
		  $count++;
		  mysql_query("UPDATE `fotoa` SET `count`= '$count' WHERE `id` = '$id'", $link);
		  mysql_close($link);
		  
	      $name = $addr[$k];
		  $fp = fopen($name, 'rb');
		  header("Content-Type: image/jpeg");
		  header("Content-Length: " . filesize($name));
		  fpassthru($fp);
		  break;

		  
    case '2a':
-------
//ну т.д другие фотки
Вопрос: как правильней это сделать (вывод фотки + счетчик), особенно вывод фотки (путь лежмт в базе)?
что лучше заменить?

-~{}~ 13.05.04 23:52:

Ну да... соответственно, сама таблица

CREATE TABLE `fotoa` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`adr` CHAR( 15 ) NOT NULL,
`count` INT( 11 ) NOT NULL,
UNIQUE (`adr`)
)TYPE = MYISAM"

и какая для этих целей нужна таблица? Как лучше ее составить? Так или лучше иначе?

спасибо.
 

sokol

Zavolga.Net
Во первых лучше:
UPDATE `fotoa` SET `count`= `count` + 1 WHERE `id` = '$id'

Соответственно, первый запрос на получение значения счетчика нехрен не нужен.

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

Затем, лучше не файл открывать и выводить, а сделать просто редирект. header("Location: $name");

-~{}~ 14.05.04 00:03:

У тебя что адрес будет 15 символов???
По крайней мере VARCHAR(255), в остальном все правильно.
 

Slaughter

Новичок
[QUOTE
Затем, лучше не файл открывать и выводить, а сделать просто редирект. header("Location: $name");
[/QUOTE]
да! но он тогда выведет в строке путь к картинке......))
а этого бы мне не хотелось........
 

sokol

Zavolga.Net
Slaughter в какой строке? Никакой строки там не будет. В свойствах картинке браузер покажет путь до скрипта.
Попробовал бы сначала.
 

Slaughter

Новичок
sokol
вот, только что попробовал.... ну выводит у меня полный путь до фотки и все тут...
у меня стоит denver
вот код функции:
PHP:
function show_foto()
{
  $id=$_GET['id'];
  include("conn.php");
  $table="fotoa";
  $querya = "SELECT `adr` FROM `$table` ORDER BY `id` = '$id'";
  $resa=mysql_query($querya,$link);
  $k=0;
  while ($line = mysql_fetch_array($resa))
    {
        $addr[$k]=$line[0];
    }
  $counter=mysql_query("UPDATE `$table` SET `count`= `count` + 1 WHERE `id` = '$id'", $link);
  mysql_close($link);
  $name = $addr[$k];
  if ($counter)
    {
        header("Location: $name");
    }
  else {echo "<br><br>Ошибка";}
}
может я что-то не то пишу? могу тебе скрин показать...
 

Slaughter

Новичок
Фанат

а ты показывай не картинку по ссылке,а хтмл-страничку
это мне тогда для каждой фотки делать отдельный html, чтото типа этого?
Код:
<html>
<body>
<img src="counta.php?id=1">
</body>
</html>
а если фоток не 10 и не 20, а 1000? как тогда быть?

-~{}~ 20.05.04 17:24:

так ответа я не услышу?(((
 

sokol

Zavolga.Net
Подумать нужно чуть чуть!
Есть и тебя php файл
photo.php

ты ему передаешь каждый раз id картинки типа
photo.php?id=1

содержание photo.php

PHP:
<html>
<body>
<img src="counta.php?id=<?=$id?>">
</body>
</html>
или любым другим методом!

-~{}~ 21.05.04 10:38:

что id передать сложно? какие нафиг 10 html файлов...
 

Slaughter

Новичок
действительно...))
сенкс.

-~{}~ 01.06.04 20:18:

стоп!
что-то я не догоняю:
1. в файл counta.php есть, как мы уже поняли,
PHP:
header("Location: $name");
, так?

2. в photo.php есть ссылка <img src="counta.php?id=<?=$id?>"> , так?

Пишем, предположим следующее: photo.php?id=1 ---> в командной строке отображается photo.php?id=1, НО если мы напишем: counta.php?id=1, то опять скрипт кинет на картинку и в адресной строке будет что-то типа такого:
PHP:
http://server/foto/1.jpg
----> если человек догадается посмотреть HTML-код, то вместо "photo.php?id=1" он попробует написать "counta.php?id=1", то он просто узнает, где храняться фотографии, т.е. в адресной строке будет что-то типа такого:
PHP:
http://server/foto/1.jpg
по крайней мере у меня так.
или я что-то не понимаю, или у меня вообще мозги опухли...
спасибо.
 

sokol

Zavolga.Net
Slaughter
Ну по моему если не учитывать, что реферер не все передают, то можно воспользоваться $_SERVER['HTTP_REFERER'], для определения как юзер добрался до картинки, напрямую через counta.php или нормальным способом.

Всех кто не передает REFERER слать на страницу фотогалереи.
Не забудь проверить реферер на наличие в нем твоего SERVER_NAME или HOST_NAME, а то может не понял?
 

man2d

Guest
Может немного не в тему, но я бы сделал через $QUERY_STRING, например, так:
Пусть, ссылка выглядит как gallery.php?1. Тогда подгружаем картинку с id'ом равным 1. Ну и так далее, соответственно :).
 

lucas

Guest
man2d

Гипотетическая ситуация:

Понадобилось передавать дополнительный параметр -- размер картинки (средняя/огромная).

Ссылка выглядит как gallery.php?1&size=2 (конечно же, ты бы сделал gallery.php?1&2).

Как извратишься с извлечением id картинки и ее размера? explode или strpos/substr?

А теперь вопрос:
ЗАЧЕМ В PHP ПРИДУМАНЫ СУПЕРГЛОБАЛЬНЫЕ МАССИВЫ ($_*), ЕСЛИ ВСЯКИЕ ВЕЛОСИПЕДИСТЫ СОВЕТУЮТ ИМИ НЕ ПОЛЬЗОВАТЬСЯ?
 

man2d

Guest
Ну я бы на самом деле написал как gallery.php?id=1&size=2. Написал $QUERY_STRING для понятности. Извращаться пока не собирался, ибо не т особой надобности. Про советы велосипедистов ничего не знаю, ибо с ними тесно не общаюсь. Вот...
 

Slaughter

Новичок
Автор оригинала: man2d
Может немного не в тему, но я бы сделал через $QUERY_STRING, например, так:
Пусть, ссылка выглядит как gallery.php?1. Тогда подгружаем картинку с id'ом равным 1. Ну и так далее, соответственно :).
это все понятно, мне единственно не понятно как именно подгружать картинку
есть (лично я пока нашел) 2 случая:

1)
PHP:
$name = $addr[$k]; 
          $fp = fopen($name, 'rb'); 
          header("Content-Type: image/jpeg"); 
          header("Content-Length: " . filesize($name)); 
          fpassthru($fp);
но 7-е чувство мне подсказывает, что можно проще

2) с помощью header (
PHP:
header("location:$url");
)

тогда мона так:
PHP:
<html> 
<body> 
<img src="counta.php?id=<?=$id?>"> 
</body> 
</html>
c проверкой HTTP_REFERRER

вот!
вопрос: sokol
в одной игре (ngsec - игра типа try2hack) было (да и сейчас есть) второе задание, как раз там мы используем HTTP_REFFERER, передаем эту переменную в адресной строке. Пока я не проверял точно как все будет, но думаю, что если написать counta.php?id=1 и к нему написать HTTP_REFFERER, то думаю мы опять вернемся к нашим, извеняюсь, баранам)) разве не так?
может я что-то путаю, могу дать ссылку на 2-е задание
 

lucas

Guest
1)

$name = $addr[$k];
$fp = fopen($name, 'rb');
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($name));
fpassthru($fp);


но 7-е чувство мне подсказывает, что можно проще

2) с помощью header (
header("location:$url");
)
В первом случае мы скрываем реальный адрес файла, а во втором -- выставляем его на всеобщее обозрение. Делай выводы.
 

Slaughter

Новичок
lucas
да, это-то понятно

вот я хочу скрыть адрес, и вот хочу узнать как правильней это сделать.
вот так я делаю сейчас:
PHP:
$name = $addr[$k]; 
$fp = fopen($name, 'rb'); 
header("Content-Type: image/jpeg"); 
header("Content-Length: " . filesize($name)); 
fpassthru($fp);
есть ли решение проще, но чтобы адрес был скрытым...
спасибо.
 

sokol

Zavolga.Net
Если критично важно защитить эти картинки, то лучше использовать твой метод...

В случае с location, всегда можно отследить куда он делает редирект, но эту задачу можно очень усложнить.
 

Slaughter

Новичок
sokol
спасибо.
теперь понятно, буду делать как раньше

наверное, тема закрыта
 
Сверху