[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание динамической страницы
Linei
Всем привет!
Дано: два файла img.ini и autor.ini. Файл img.ini хранит информацию о имени картинки, её названии и id автора. Файл autor.ini хранит информацию о id автора, его имя, год рождения и марке фотоаппарата.

Что сделано:
записала все данные в следующие переменные:

// начиная с первой картинки, перебираем картинки вплоть до последней
for ($i=1; $i<=$end; $i++)
for($j=1; $j<=$maxautor; $j++)
if($id_autor[$i]==$autor_id[$j])
{
$descript=$description[$i]; //подпись картинки
$photo=$big.$pic[$i]; //большое изображение
$smphoto=$small.$pic[$i]; //маленькая версия изображения
$nm_autor=$name_autor[$j]; //имя автора
$yr_autor=$year_autor[$j]; //год рождения автора
$fotoap_autor=$fotoapparat[$j]; //фотоаппарат автора
$winstat='toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1'; // статус открываемого окна с большой картинкой

// выводим таблицу галереи.

?>
<table cellspacing=0 cellpadding=5 border=2 cols=2><tr>
<?php
// выводим одинаковую часть кода таблицы для ячейки картинки
echo '<td width=210 rowspan=4><p align=center CLASS='.$style_osn.'>'.$descript.'</p></td><td><table cellspacing=1 cellpadding=0 border=0 bgcolor="#000000"><tr><td><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"><IMG SRC='.$smphoto.' 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><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.'>'.$about_autor.'</a></center></td></tr></table>';
}

?>
</td></tr></table>

В чем проблема: В echo я строю таблицу

============ | сама картинка
подпись картинки | ссылка на увеличенное изображение
============ | ссылка на информацию об авторе

Картинку и увеличенное изображение вывести получается, а вот как сгенерировать страничку с данными из переменных об авторе, я не допру (((
Чтобы было проще понять какая таблица генерируется, приведу её в структурированом виде

<head><title>Документ Без Имени</title></head>

<body>
<table
cellspacing=0 cellpadding=5 border=2 cols=2>
<tr>
<td
width=210 rowspan=3><p align=center CLASS='.$style_osn.'>'.$descript.'</p></td>
<td>
<table
cellspacing=1 cellpadding=0 border=0 bgcolor="#000000">
<tr>
<td><A
HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"><IMG SRC='.$smphoto.' 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>
<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.'>'.$about_autor.'</a></center></td></tr>
</table>
';
</body>

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

И все это нужно сделать в приведенном выше цикле.

Пожалуйста помогите, PHP только начала изучать сижу над этим вопросом уже несколько дней и с каждым днем в голове каша больше и больше (((





Спустя 1 час, 30 минут, 9 секунд (12.12.2011 - 16:40) bodja написал(а):
Вы echo-м в цикле сделали неконтролируемый вывод,
ниже наиболее простой контроль вывода хтмл,
в условиях isset вы вызываете нужную функцию ,которая сгенерирует вам нужный хтмл.

if (isset['autor']) {
echo Autor($autors[1]);
}
if (isset['autors']) {
echo List($autors);
}

function List($autors) {
$h='<table>';
for($i=0; $i<count($autors); $i++){
$h.='
<tr>
<td>'
.$autors[$i].'</td>
</tr>
'
;
}
$h.='</table>';
return $h;
}

function Autor($autor) {
$h='<table>
<tr>
<td>'
.$autor.'</td>
</tr>
</table>'
;
return $h;
}

Спустя 1 час, 51 минута, 44 секунды (12.12.2011 - 18:31) Linei написал(а):
bodja, я не совсем поняла как это можно применить к моему примеру :unsure:
В частности не совсем понятно
if (isset['autor'])

'autor' - что это за переменная, откуда она берется, Разве не превильнее было бы написать

if (isset ($autor))

И тогда значит ли это, что переменная $autor, применительно к моему коду это будет id автора?

Прошу тапками не кидаться, PHP для меня пока темный лес :blink:

Спустя 15 минут, 6 секунд (12.12.2011 - 18:47) Linei написал(а):
К тому же, Isset мне, скорее всего не подойдет, так как мне не нужно проверять, существует ли переменная, мне нужно сравнить id автора в обоих файла и при совпадении вывести информацию о авторе.

....возможно, конечно, что я не поняла вашу мысль о isset, а вот за функции спасибо, в этом направлении я до этого даже и не думала ))

Спустя 1 минута (12.12.2011 - 18:48) Игорь_Vasinsky написал(а):
Цитата
if (isset ($autor))

да. он опечатался.

Спустя 56 минут, 17 секунд (12.12.2011 - 19:44) Linei написал(а):
... продолжаем разговор ...
Теперь у меня есть функция

function Print_info_autor($nameautor, $yearautor, $fotoapautor) //функция выводит на экран информацию о авторе
{
$h='<table>
<tr>
<td> Имя автора </td>
<td>'
.$nameautor.'</td>
</tr>
<tr>
<td> Год рождения автора </td>
<td>'
.$yearautor.'</td>
</tr>
<tr>
<td> Фотоаппарат автора </td>
<td>'
.$fotoapautor.'</td>
</tr>
</table>'
;
return $h;
}

и вызвать я её хочу в месте так называемого "неконтролируемого вызова", то есть в строчке
echo '<td width=210 rowspan=4><p align=center CLASS='.$style_osn.'>'.$descript.'</p></td><td><table cellspacing=1 cellpadding=0 border=0 bgcolor="#000000"><tr><td><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"><IMG SRC='.$smphoto.' 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><tr><td valign=top><center><A onclick="echo (Print_info_autor($nm_autor, $yr_autor,	$fotoap_autor))" CLASS='.$style_link.'>'.$about_autor.'</a></center></td></tr></table>';

а именно, если смотреть структурировано, в строчке
<tr><td valign=top><center><A onclick="echo (Print_info_autor($nm_autor, $yr_autor, $fotoap_autor))" CLASS='.$style_link.'>'.$about_autor.'</a></center></td></tr>

Но мой вариант и ошибки не выдает, и ссылка на информацию об авторе теперь более не ссылка (((
Подскажите какое значение атрибута href нужно задать, чтобы ссылка стала ссылкой и запускалась моя функция Print_info_autor?
ПС: весь оставшийся код остался прежним.

Спустя 2 часа, 59 минут, 30 секунд (12.12.2011 - 22:43) Linei написал(а):
В процессе тестирования работоспособности функции и циклов выяснилось, что цикл работает некорректно. Цикл претерпел некоторые изменения:
for ($i=$begin; $i<=$end; $i++) 
{
$descript=$description[$i];
$photo=$big.$pic[$i];
$smphoto=$small.$pic[$i];
$temp_id=$id_autor[$i];
for($j=$begin; $j<=$maxautor; $j++)
{
$id_temp = $autor_id[$j];
if($temp_id==$id_temp)
{
$nm_autor=$name_autor[$j];
$yr_autor=$year_autor[$j];
$fotoap_autor=$fotoapparat[$j];
break;
}
}

echo (Print_info_autor($nm_autor, $yr_autor, $fotoap_autor));
}

При этом массив $id_autor = {1,1,1,3,2,3,2,3,2}, а массив $autor_id={1,2,3}
В идеале в результате прохода этих циклов должны вывестись 9 таблиц с инфой об авторах, но выводится только одна для последнего индекса с информацией о 2 авторе из трех.

Я уже все глаза проглядела и не пойму в чем моя ошибка, гляньте со стороны, в упор не её вижу ((

Спустя 1 день, 17 часов, 8 минут, 51 секунда (14.12.2011 - 15:52) Linei написал(а):
Ну неужели никто не знает? unsure.gif Ребят, помогите пожалуйста!

Спустя 3 часа, 53 минуты, 45 секунд (14.12.2011 - 19:46) Invis1ble написал(а):
Linei
вставь перед первым циклом
var_dump($begin);
var_dump($end);
var_dump($description);
var_dump($big);
var_dump($small);
var_dump($pic);
var_dump($id_autor);
var_dump($maxautor);
var_dump($autor_id);
var_dump($name_autor);
var_dump($year_autor);
var_dump($fotoapparat);

и напиши, что выводится. Ибо нефига непонятно, что за данные в этих переменных...

Спустя 14 минут, 38 секунд (14.12.2011 - 20:01) Winston написал(а):
А проще одной строкой вытащить :)
echo '<pre>'.(print_r(get_defined_vars(), 1)).'</pre>';

Спустя 1 минута, 20 секунд (14.12.2011 - 20:02) Invis1ble написал(а):
Winston
Цитата
А проще одной строкой вытащить smile.gif

та там наверное еще 100500 переменных, помимо нужных

Спустя 33 секунды (14.12.2011 - 20:02) Linei написал(а):
Invis1ble Сделала.
Выводит следующее
int(1) int(9) array(9) 
{
[1]=> string(7) "Котенок"
[2]=> string(3) "Кот"
[3]=> string(11) "Капли дождя"
[4]=> string(9) "Без зонта"
[5]=> string(12) "Ночной дождь"
[6]=> string(6) "Ливень"
[7]=> string(10) "В тропиках"
[8]=> string(19) "На лугу после дождя"
[9]=> string(13) "Осенний дождь"
}
string(13) "../image/big/"
string(15) "../image/small/"
array(9)
{
[1]=> string(5) "1.jpg"
[2]=> string(5) "2.jpg"
[3]=> string(5) "3.jpg"
[4]=> string(5) "4.jpg"
[5]=> string(5) "5.jpg"
[6]=> string(5) "6.jpg"
[7]=> string(5) "7.jpg"
[8]=> string(5) "8.jpg"
[9]=> string(5) "9.jpg"
}
array(9)
{
[1]=> string(3) "1 "
[2]=> string(3) "1 "
[3]=> string(3) "1 "
[4]=> string(3) "3 "
[5]=> string(3) "2 "
[6]=> string(3) "3 "
[7]=> string(3) "2 "
[8]=> string(3) "3 "
[9]=> string(1) "2"
}
int(3) array(3)
{
[1]=> string(1) "1"
[2]=> string(1) "2"
[3]=> string(1) "3"
}
array(3)
{
[1]=> string(10) "Пукин Вася"
[2]=> string(11) "Иванов Иван"
[3]=> string(11) "Пертов Петя"
}
array(3)
{
[1]=> string(4) "1988"
[2]=> string(4) "1987"
[3]=> string(4) "1987"
}
array(3)
{
[1]=> string(13) "Nikon D5000 "
[2]=> string(11) "Nikon D90 "
[3]=> string(12) "Canon EOS450"
}

Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора
Год рождения автора
Фотоаппарат автора
Имя автора Иванов Иван
Год рождения автора 1987
Фотоаппарат автора Nikon D90

Чтоб было еще понятней, все данные берутся из файлов img.ini

1.jpg::Котенок::1
2.jpg::Кот::1
3.jpg::Капли дождя::1
4.jpg::Без зонта::3
5.jpg::Ночной дождь::2
6.jpg::Ливень::3
7.jpg::В тропиках::2
8.jpg::На лугу после дождя::3
9.jpg::Осенний дождь::2
Последняя цифра в строчке указывает номер автора из файла autor.ini
1::Пукин Вася::1988::Nikon D5000
2::Иванов Иван::1987::Nikon D90
3::Пертов Петя::1987::Canon EOS450

Спустя 3 минуты, 44 секунды (14.12.2011 - 20:06) Linei написал(а):
Цитата (Invis1ble @ 14.12.2011 - 20:02)

та там наверное еще 100500 переменных, помимо нужных

переменных действительно у меня много, но не настолько же ))), просто сюда я вытащила подзадачу, над которой бьюсь не один день и не могу разобраться ((

Спустя 38 минут, 7 секунд (14.12.2011 - 20:44) Invis1ble написал(а):
Linei
вобщем я не очень понял задачу, если чесно, но вот могу показать, как это оформить в более приличном виде
$data = file('img.ini', FILE_IGNORE_NEW_LINES);
$images = array();
foreach ($data as $line)
{
list($filename, $description, $author_id) = explode('::', $line);
$images[] = array('filename' => $filename, 'description' => $description, 'author_id' => $author_id);
}

$data = file('autor.ini', FILE_IGNORE_NEW_LINES);
$authors = array();
foreach ($data as $line)
{
list($id, $name, $year, $camera) = explode('::', $line);
$authors[$id] = array('name' => $name, 'year' => $year, 'camera' => $camera);
}

        <?php foreach ($images as $image) : ?>
<table>
<tr>
<td>
Имя автора </td>
<td><?php
echo $authors[$image['author_id']]['name'] ?></td>
</tr>
<tr>
<td>
Год рождения автора </td>
<td><?php
echo $authors[$image['author_id']]['year'] ?></td>
</tr>
<tr>
<td>
Фотоаппарат автора </td>
<td><?php
echo $authors[$image['author_id']]['camera'] ?></td>
</tr>
</table>
<?php
endforeach ?>

надеюсь, это примерно то, что нужно и ты сможешь допилить скрипт до нужной кондиции

Спустя 25 минут, 10 секунд (14.12.2011 - 21:09) Linei написал(а):
Invis1ble спасибо тебе большое, попробую разобраться )
Не сочти за наглость, но у меня есть еще вопрос по сути темы:
Предположим, что есть функция вывод какой-либо таблицы, пример такой функции я писала выше. Нужно, чтобы по нажатию на ссылку "Информация об авторе" открывалось дополнительно окно и выводило результат работы функции. Такое реализовать вообще возможно?
Я знаю, что можно для ссылки написать
onclick="echo (Print_info_autor($nm_autor, $yr_autor, $fotoap_autor))

но что в данном случае задавать в атрибуте href, ведь такой страницы не существует и она будет создана только после нажатия на ссылку?


Спустя 7 минут, 6 секунд (14.12.2011 - 21:17) Invis1ble написал(а):
Цитата
onclick="echo (Print_info_autor($nm_autor, $yr_autor, $fotoap_autor))

это бред, работать небудет. Тебе нужно создать скрытый контейнер, скажем <div>, и по onclick делать его видимым. Или юзать аякс, но это тебе наверное еще рано слишком smile.gif

Спустя 17 минут, 9 секунд (14.12.2011 - 21:34) Linei написал(а):
Invis1ble
Цитата (Invis1ble @ 14.12.2011 - 21:17)
Или юзать аякс, но это тебе наверное еще рано слишком smile.gif

мне нельзя его использовать, меня попросили сделать, используя только PHP. У меня получилось сделать 1/4 задания за день вот и согласилась помочь, а дальше застряла (((
...а что касается аякс я даже еще ничего не читала про него )) так что действительно рано ))
.... в общем, попробую сейчас все советы и выложу, что получится )))


_____________
Наведу на мысль. За последствия не отвечаю
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.