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

Форум PHP

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

 

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

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

тема: Вывод в таблицу на сайт
 
 автор: RobotWerder   (07.09.2014 в 17:51)   письмо автору
 
 

Уважаемые специалисты.. Не спец в пхп , пмогите пожалуйста с кодом..

Мне необходим вывод в таблицу (скриншот ниже, в строку там где ошибки), чтобы под каждой фото был заголовок фото.
http://screenshot.su/show.php?img=4cf7b6e408f785a9551f3162ea6e29d9.jpg

Путем научного тыка я нашел файл где все это формируется и таблицу мускуль.
Мне необходимо чтобы в эти ячейки с ошибками выводилось это поле
http://screenshot.su/show.php?img=05d857818754598ef25f539d82a189a6.jpg

Вот код, тот который закоментирован добавил я сам, но естессно он не работает



<table border="0" cellpadding="0" cellspacing="0" style="margin-left:-8px;">
    <tr>
<?
$i 
0;
$all $DB->getAll("select * from mp_gallery where path_id='".getPathID()."' order by `order`");
foreach(
$all as $im)
{
 
$i++;
 
$img unserialize($im['image_min']);
 
$img_size getimagesize($_SERVER['DOCUMENT_ROOT'].$img[1]);
 
$img_big unserialize($im['image']);
 
$img_size_big getimagesize($_SERVER['DOCUMENT_ROOT'].$img_big[0]);
?>
<td align="center"><a href="#" onClick="pup('/view/<?=$im['id']?>/',<?=$img_size_big[0]?>,<?=$img_size_big[1]?>); return false;"><img src="<?=$img[1]?>" alt="" width="<?=$img_size[0]?>" height="<?=$img_size[1]?>" style="border: 1px solid #cacaca; padding:1px;"></a></td>
<?
echo ($i != count($all)) ? '<td style="width:44px;"></td>' '';
}
?>
    </tr>
    
<tr>
<!-- <?
$i 
0;
$all $DB->getAll("select * from mp_gallery where path_id='".getPathID()."' order by `order`");
foreach(
$all as $im)
{
 
$i++;
 
$img unserialize($im['image_min']);
 
$img_size getimagesize($_SERVER['DOCUMENT_ROOT'].$img[1]);
 
$img_big unserialize($im['image']);
 
$img_size_big getimagesize($_SERVER['DOCUMENT_ROOT'].$img_big[0]);
?>
<td align="center">3
<? echo '<td>' $data['title_page'] . '</td>';?>
</td>
<?
echo ($i != count($all)) ? '<td style="width:44px;"></td>' '';
}
?>
    </tr>    
-->

</table>



подскажите правильный код господа.

а вот и сайт http://www.nvx.ru/

  Ответить  
 
 автор: confirm   (08.09.2014 в 13:29)   письмо автору
 
   для: RobotWerder   (07.09.2014 в 17:51)
 

$img = unserialize($im['image_min']);
$img_big = unserialize($im['image']);

Стоит ли? Вроде бы база кроме строк может еще кое-что хранить.

  Ответить  
 
 автор: Enter   (08.09.2014 в 13:33)   письмо автору
 
   для: confirm   (08.09.2014 в 13:29)
 

ога, можно хранить бинарники :)
надо срочно переписывать админку, чтобы вместо путей к файлам хранился их код. тогда будет намного круче. не надо будет картинку считывать с диска, например :)

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 14:10)   письмо автору
 
   для: confirm   (08.09.2014 в 13:29)
 

Шутки шутками, но прошу помочь .. Хотя бы пример аналогичный бросьте плиз.. попробую разобраться..

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

Я просто продублировалту часть кода что закомментирована..и получил вторую строку таблицы, что конечно же неверно..
Понимаю что меня интересует вывод в ячейку td
Что то вроде этого ..

<td align="center">
<? echo '<td>' $data['title_page'] . '</td>';?>
</td> 


Но состряпать это самостоятельно трудоновато вследствие отсутствия практики

  Ответить  
 
 автор: confirm   (08.09.2014 в 14:14)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 14:10)
 

Это не шутка, это даже очень плохо описывать объекты строкой и хранить такое описание в базе.

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 14:19)   письмо автору
 
   для: confirm   (08.09.2014 в 14:14)
 

Я просто вас недопонял вас..
Я не могу и не буду рушить то, что написано не мной и мне это тем более непонятно лишь потому что я просто не знаю как это сделать:)

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

Я уверен вы можете долго мне объяснять, что плохо описывать строками объекты, но прошу вас помочь с выводом, это возможно, уважаемый?:)

  Ответить  
 
 автор: confirm   (08.09.2014 в 14:32)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 14:19)
 

Ну чтобы поняли, я поясню по простому:

1) в массиве объектов, не важно каких, картинки это или другое, можно обратиться (получить его) к каждому либо по индексу (порядковому номеру), либо по ключу (имени), что оперативно;

2) этот массив объектов можно сериализовать, после чего представление массива будет описано строкой, из которой получить (обратиться к нему) оперативно объект уже нельзя без обратной операции.

Вывод - храня описание картинок в базе как строку, вы лишаетесь:
а) сортировки
б) произвольной выборки
г) поиска необходимого
... и др.

Не подумайте, что я вредный и потому так. Я знаю, что это плохо, а Работает и работает, пускай еще долго работает для меня не аргумент, и с таким подходом к задаче исполнителя нет смысла что-то предлагать. Ну вы же не станете замызганные штаны гладить и потом материться в них, какой смыл, так ведь? Вот с таким подходом к хранению данных в базе тоже самое, у меня по крайней мере.

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 15:08)   письмо автору
 
   для: confirm   (08.09.2014 в 14:32)
 

Я вас правильно понял, с выборкой при такой структуре хранения в БД информации выборка и поиск значения у меня не получится совсем?(
Дело в этом?

Если да, то какой существует выход из ситуации?(

  Ответить  
 
 автор: confirm   (08.09.2014 в 15:16)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 15:08)
 

У вас какая-то проблема с выводом html-таблицы, как я понял из заявленного. Сериализация не помеха для вывода таблицы такой. А вот искать в базе определенные изображения, например относящиеся к какому либо разделу (речь как я понимаю идет о галерее), или автору, сортировать изображения при запросах для вывода, и другое, вот это да - без лишнего и ненужного геморроя, как у вас сейчас в коде, этого, увы, не получится.

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 15:28)   письмо автору
 
   для: confirm   (08.09.2014 в 15:16)
 

такк.. пасибо .. более менее понятно..
А если не искать изображения относящиеся к разделу какому либо, и просто попытаться вывести все описания которые существуют?!
Или мне все равно это лишь с геморроем выйдет, тк необходимо будет искать какому изображению соответствует то или иное описание?

  Ответить  
 
 автор: confirm   (08.09.2014 в 16:34)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 15:28)
 

Мне трудно ответить на все ибо я не знаю структуру базы вашей, но когда встречается в коде выборка из базы сириализованной строки, то это настораживает сразу.

Давайте на простом примере сперва. Допустим у нас в массиве $im (а запрос строки ресурса полученного из базы и возвращает ее как массив, или можно объектом, что не меняет самой сути) под номерами (идентификаторами изображения (индексами), под которыми они хранятся в массиве, а в базе при должной структуре, а не записи строкой, это было также) хранятся подписи к этим изображениям:

<?
$im 
= array(
  
12 => 'Как я провел лето',
  
10 => 'Снова в школу'
);
?>
если вывести массив на экран, то получим следующее:
<?
print_r
($im);
?>
результат:
Array
(
    [12] => Как я провел лето
    [10] => Снова в школу
)

чтобы получить подпись к картинке, например, с номером 12, достаточно следующего:
<?
echo $im[12];
?>
результат: Как я провел лето

после сериализации массива функцией serialize(), массив картинок уже не массив, а строка
<?
$im 
serialize($im);
//посмотрим что теперь содержится в $im
echo serialize($im);
?>
результат:
a:2:{i:12;s:31:"Как я провел лето";i:10;s:22:"Снова в школу";}

после такого преобразования вывести подпись к картинке как $im[12] уже нельзя
требуется обратное преобразование строки в массив:
<?
$im 
=  unserialize($im);
//и только после этого можно опять обращаться к $im как массиву    


Предположим у меня есть в базе таблица пользователей, которые могут создавать свои галереи. Более того, чтобы не было анархии, я заставляю их не просто грузить картинки на сайт, а сперва выбрать тематический раздел в котором будут храниться те или иные их изображения. Они могут указывать названия этого раздела и прочее. То есть помимо таблицы пользователей в базе есть и таблица тематических разделов.

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

Если мне надо получить и вывести на экран все изображения пользователя отсортировав их по тематическим категориям, дате добавления и прочим параметрам, или вывести только новые, добавленные на текущий день, или же только изображения определенной тематики, то все это я сделаю ОДНИМ запросом к базе (хотя запрос и будет содержать вложенные запросы), и все это будет решено только средствами SQL.

Некоторые "специалисты" или от непонимания что такое база и какие возможности она предоставляет, или же считают, что круче будет так - сериализовать все информацию об изображениях пользователя и эту строку воткнуть в запись таблицы пользователей, мол так круче - получу пользователя, его строку, растормашу ее, и все под рукой.

Увы, это не так, это не круто, это глупо. Попробуйте теперь, при хранении информации об изображении как строки получить то, что я писал выше одним запросом к базе и только средствами SQL. Не получиться. Нужно будет сперва извлечь строку, средствами РНР преобразовать ее в массив, и лишь потом НОВЫМИ запросами к базе что-то получить.

Кроме этого, чтобы добавить новую информацию, нужно сперва получить строку, средствами РНР преобразовать, добавить в полученный массив новое, опять сериализовать в строку и только затем можно записать в базу. А при нормальном хранении, это делается опять одним запросом и только средствами SQL.

Вот какой у вас геморрой.

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 16:57)   письмо автору
 
   для: confirm   (08.09.2014 в 16:34)
 


<table border="0" cellpadding="0" cellspacing="0" style="margin-left:-8px;">
    <tr>
<?
$i 
0;
$all $DB->getAll("select * from mp_gallery where path_id='".getPathID()."' order by `order`");
foreach(
$all as $im)
{
 
$i++;
 
$img unserialize($im['image_min']);
 
$img_size getimagesize($_SERVER['DOCUMENT_ROOT'].$img[1]);
 
$img_big unserialize($im['image']);
 
$img_size_big getimagesize($_SERVER['DOCUMENT_ROOT'].$img_big[0]);
?>
<td align="center"><a href="#" onClick="pup('/view/<?=$im['id']?>/',<?=$img_size_big[0]?>,<?=$img_size_big[1]?>); return false;"><img src="<?=$img[1]?>" alt="" width="<?=$img_size[0]?>" height="<?=$img_size[1]?>" style="border: 1px solid #cacaca; padding:1px;"></a><h3><?=$im['title_page']?></h3></td>
<?
echo ($i != count($all)) ? '<td style="width:44px;"></td>' '';
}
?>
    </tr>
</table>


Вот рабочий код и он выводит описание..

просто добавил <h3><?=$im['title_page']?></h3>

  Ответить  
 
 автор: confirm   (08.09.2014 в 17:24)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 16:57)
 

И что?
Я вам не об этом говорю, а том, что держать в базе сериализованные данные... вот как прижмет и наплачитесь от этого, тогда поймете.

  Ответить  
 
 автор: RobotWerder   (08.09.2014 в 17:26)   письмо автору
 
   для: confirm   (08.09.2014 в 17:24)
 

За предостережение пасибо..
И за то что разжевали и разложили всё по полочкам..

  Ответить  
 
 автор: confirm   (08.09.2014 в 17:34)   письмо автору
 
   для: RobotWerder   (08.09.2014 в 17:26)
 

Это не вся беда. Я писал, что в базе нужно держать необходимую информацию об изображениях, и по человечески, а не скрытно, а вот что у вас:

$img_size = getimagesize($_SERVER['DOCUMENT_ROOT'].$img[1]);
$img_size_big = getimagesize($_SERVER['DOCUMENT_ROOT'].$img_big[0]);

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

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

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