Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать GET в картинку
 
 автор: Киналь   (05.04.2012 в 17:19)   письмо автору
 
 

Что-то никак не соображу приличного решения.
Есть у меня HTML-файл, в котором есть картинка (<img>). Картинка на самом деле не картинка, а php-скрипт, строящий график. Чтобы этот график построить, мне надо знать кучу параметров. В основной файл я их передаю GET-ом, а вот дальше надо их отдать скрипту-картинке. И тут затык. Заново формировать строку GET-параметров? Так строка будет километровая. Через сессию не пойдёт, потому что у пользователя может быть одновременно открыто несколько таких страниц, отличающихся только GET-параметрами. Лезет в голову всякая экзотика, но наверняка же можно как-то грамотно сделать. Как?

  Ответить  
 
 автор: confirm   (05.04.2012 в 17:30)   письмо автору
 
   для: Киналь   (05.04.2012 в 17:19)
 

А подключить в основном скрипте "скрипт-картинку" (или вообще поместить этот код в основной скрипт) почему нельзя?

  Ответить  
 
 автор: Киналь   (05.04.2012 в 17:38)   письмо автору
 
   для: confirm   (05.04.2012 в 17:30)
 


<html>
<body>
  В текущем квартале мы добились существенных успехов. Вот основные показатели:
   <img src="graph.php">
  Спасибо за внимание!
</body>
</html>

Файл graph.php генерирует png-изображение и отдаёт его в выходной поток с соответствующим заголовком. Для конкретики — это библиотека JpGraph.

Если я ничего не путаю, то включить скрипт-картинку сюда не получится.

  Ответить  
 
 автор: confirm   (05.04.2012 в 17:47)   письмо автору
 
   для: Киналь   (05.04.2012 в 17:38)
 

Я так понял, что это выдает код основной страницы? Тогда почему не получиться, если в самом ее начале выполнять отрисовку графика? В примере ничего не создается, но принцип тот же самый:
<?
if(isset($_GET['im'])) {
   
header('Content-type:image/gif');
   echo 
file_get_contents('http://www.softtime.biz/dataimg_books/php56original.gif');
   exit; 
}
?>
<html> 
<body> 
  В текущем квартале мы добились существенных успехов. Вот основные показатели: 
   <img src="?im"> 
  Спасибо за внимание! 
</body> 
</html>
Какая разница какой вы скрипт вызываете, только если отдельный, значит он сам по себе рулит, а если родителя, то выполнили по запросу и выход.

  Ответить  
 
 автор: Киналь   (05.04.2012 в 17:59)   письмо автору
 
   для: confirm   (05.04.2012 в 17:47)
 

Красиво, я бы не догадался. Но, каюсь, я слишком упростил пример. Более полно он выглядит так:

<html>  
<body>  
  В <?=$_GET['kvartal_number']?> квартале мы добились существенных успехов. Вот основные показатели:  
   <img src="graph.php">  
  Спасибо за внимание!  
   
   Вы можете посмотреть отчёт за другой квартал:
<form>
   <input type='text' value='<?=$_GET['kvartalnumber']?>'>
   <input type='submit'>
</form>
</body>  
</html>

То есть форма для задания GET-параметров находится в этом же файле, и значения полей нужно сохранять. А если сделать так, как вы предлагаете, то в основном файле доступа к GET-параметрам не будет.

  Ответить  
 
 автор: confirm   (05.04.2012 в 18:02)   письмо автору
 
   для: Киналь   (05.04.2012 в 17:59)
 

У вас что, и изначально передается картинка, но пустой? Ведь пока не будут переданы параметры для нее, какой смысл в:
<img src="graph.php">   
  Спасибо за внимание!   
    
   Вы можете посмотреть отчёт за другой квартал: 
<form>
...
?

  Ответить  
 
 автор: Киналь   (05.04.2012 в 18:05)   письмо автору
 
   для: confirm   (05.04.2012 в 18:02)
 

Изначально дефолтные значения. Ну там, текущий квартал, например. Главное, что в процессе работы мне надо и картинке отдать номер квартала, и на странице его написать.

  Ответить  
 
 автор: confirm   (05.04.2012 в 18:36)   письмо автору
 
   для: Киналь   (05.04.2012 в 18:05)
 

Все равно нет проблем, по моему.
<?
if(isset($_GET['im'])) {
   
$im imagecreate(10,10);
   switch(
$_GET['c']) {
     case 
0$c imagecolorallocate($im0,0,255);
             break;
     case 
1$c imagecolorallocate($im0,255,0);
             break;
     case 
2$c imagecolorallocate($im255,0,0);
   }
   
imagefill($im00$c);
   
header('Content-type: image/gif');
   
imagegif($im);
   
imagedestroy($im);
   exit; 
}
$color = isset($_GET['color']) ? $_GET['color'] : 0;
?>
<html>  
<body>  
  В текущем квартале мы добились существенных успехов. Вот основные показатели:  
   <img src="?im&c=<?php echo $color;?>" />  
  Спасибо за внимание!  
</body>  
</html>

<form>
<input type="radio" name="color" value="1" checked="checked" /> Color 1 
<input type="radio" name="color" value="2" /> Color 2
<input type="submit" value="Send" />
</form>

  Ответить  
 
 автор: Киналь   (05.04.2012 в 18:46)   письмо автору
 
   для: confirm   (05.04.2012 в 18:36)
 


   <img src="?im&c=<?php echo $color;?>" /> 

То есть заново выстраивать строку GET-запроса. Именно этого я и хотел избежать, у меня параметров — штук сорок, много похожих, запутаться легко.

  Ответить  
 
 автор: confirm   (05.04.2012 в 18:50)   письмо автору
 
   для: Киналь   (05.04.2012 в 18:46)
 

Ну иначе никак, кроме как через сессию.
Похожих это как, не именем же? 40 это не так и много.
Почему при разборе параметров вы не путаетесь, а при вставке их в url запутаетесь?

  Ответить  
 
 автор: Киналь   (05.04.2012 в 19:08)   письмо автору
 
   для: confirm   (05.04.2012 в 18:50)
 

Именно что именем. Два массива по 16 элементов, ну и по мелочи. Разбираю их в цикле. Ну и в двух местах запутаться проще, чем в одном)

Вроде выкрутился: вставил graph.php в отдельный iframe, и сабмит формы идёт прямо туда. Картинка нужные параметры получает, в форме они сохраняются, больше пока ничего и не требуется. Только iframe смущает, но поскольку продукт специализированный и пользователей у него «по пальцам пересчитать», можно на это не обращать внимания.

Тем не менее спасибо за отклик!

  Ответить  
 
 автор: confirm   (05.04.2012 в 19:17)   письмо автору
 
   для: Киналь   (05.04.2012 в 19:08)
 

Проверить массив можно и без цикла, а превратить массив в строку запроса тоже можно без всяких телодвижений http_build_query($_GET).

  Ответить  
 
 автор: Киналь   (05.04.2012 в 19:27)   письмо автору
 
   для: confirm   (05.04.2012 в 19:17)
 

Вот с этого стоило начать)) Не знал об этой функции. Решение с iframe мне уже понравилось по другим причинам, но ваш способ буду на всякий случай иметь в виду, спасибо!

  Ответить  
 
 автор: confirm   (05.04.2012 в 19:34)   письмо автору
 
   для: Киналь   (05.04.2012 в 19:27)
 

Так вопрос же был не как превратить массив в нечто, а о том как бы передать.

  Ответить  
 
 автор: Киналь   (05.04.2012 в 19:58)   письмо автору
 
   для: confirm   (05.04.2012 в 19:34)
 

Да, действительно. Что-то я совсем «нюх потерял») Что ж, вроде разобрался.

  Ответить  
 
 автор: Sfinks   (05.04.2012 в 21:56)   письмо автору
 
   для: Киналь   (05.04.2012 в 17:19)
 

А данные которые вы хотите передавать в картинку вы как получаете? Если вы можете их получить в скрипте, который выводит HTML, то почему бы вам не получить их сразу в скрипте, который строит картинку? Например вы передаете в картинку номер квартала, а картинка - это же скрипт... Ну вот в нем и извлеките требуемые данные по этому кварталу.

  Ответить  
 
 автор: Киналь   (05.04.2012 в 22:01)   письмо автору
 
   для: Sfinks   (05.04.2012 в 21:56)
 

Нет, данные приходят из формы. Да вроде уже год работает как надо, спасибо)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования