Вопрос № 89124: Здравствуйте!
Пишу интернет-магазин и столкнулся с такими вопросами:
1) в результате запроса к БД я получаю массив результатов, содержащий информацию о товарах. Сначала с помощью функции mysql_fetch_array() я создаю список цветов товара (для ...Вопрос № 89148: Спасибо за ваш ответ на вопрос “ Помогите вывести инфу из БД в таблицу, так что бы в строке было по 3 столбика с инфой из этой базы и n-ное количество строк…” и извините за неполноценный вопрос…
Попробую ещё раз…
Есть галерея, нужно вывести...Вопрос № 89193: Здравствуйте!
Возможно ли выполнить скрипт Perl из скрипта PHP?
Если да то как?...Вопрос № 89201: Здравствуйте. Возникла такая проблема. В скрипте чата есть код (см. приложение). Делается запрос в базу данных, выводится статистика юзеров в диапазоне от 0 до 1000 человек, которая сортируется по кол-ву набранных постов. Но беда в том, что весь резу...
Вопрос № 89.124
Здравствуйте!
Пишу интернет-магазин и столкнулся с такими вопросами:
1) в результате запроса к БД я получаю массив результатов, содержащий информацию о товарах. Сначала с помощью функции mysql_fetch_array() я создаю список цветов товара (для того чтобы посетитель мог по ним сортировать товар). а ниже хочу поместить список товаров (из этого же запроса). Вопрос в следующем: можно ли как-то вернуться к началу результата запроса после того, как выбрал от туда цвета. Я не смог ничего придумать и просто повторил этот же запрос второй раз.
2) у товара есть фото большого размера, нужно выводить еще и маленькую. Что лучше сделать: в каком-то редакторе сделать маленькую копию фотографии или просто выводить её уменьшенную с помощь параметров width и height. Задача состоит в том чтобы, страница загружалась как можно быстрее.
Заранее благодарен.
Отправлен: 29.05.2007, 16:47
Вопрос задал: BerdArt (статус: 1-ый класс)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Yurio
Здравствуйте, BerdArt!
На счет первого вопроса к сожалению не отвечу, а вот насчет второго - однозначно делать "превьюшки" товаров. Я сам писал каталог товаров, и выбрал такой путь решения данной задачи, так как таким образом:
1. Уменьшается траффик сервера
2. ЗНАЧИТЕЛЬНО ускоряется время загрузки страницы, так как если оставлять картинки е изменяя их размер, а просто сжимать их тегами, картинка передается в первоначальном размере, а "сжимается" уже напосредственно в браузере конечного пользователя Вашего сайта.
Ответ отправил: Yurio (статус: 1-ый класс)
Ответ отправлен: 29.05.2007, 16:57 Оценка за ответ: 4 Комментарий оценки: Большое спасибо за совет. Меня как раз волновал вопрос времени загрузки страницы
Отвечает: PVS
Здравствуйте, BerdArt!
1)Можно: int mysql_data_seek (int result_identifier, int row_number)
2)Задавая width и height Вы ничего не выигрываете: грузится вся картинка (не уменьшеная) и уже в бровзере уменьшается. Так что лучше создать уменьшеную копию, но не обязательно в редакторе, можно и графическими функциями php в момент загрузки фото на сайт (если сервер мощный, то можно создавать во время просмотра, но так медленнее будет)
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 29.05.2007, 17:04
Отвечает: Straight
Здравствуйте, BerdArt!
1) Не стоит использовать функцию mysql_fetch_array() непосредственно в коде формирования страницы. Создайте с ее помощью массив информации, а уже этот массив используйте в цикле при формировании страницы - два раза и более. Такой подход решает не только Вашу проблему, но и отделяет механизм хранения/чтения информации от механизма формирования страницы - это поможет Вам если Вы вдруг решите поменять дизайн сайта.
2) Однозначно нужно делать маленькие копии. Во-первых, это уменьшает траффик, а во-вторых, браузеры выполняют масштабирование изображений с качеством, далеким от желаемого. Кстати, графические функции PHP также в этом плане далеки от идеала.
Ответ отправил: Straight (статус: Практикант)
Ответ отправлен: 29.05.2007, 17:10 Оценка за ответ: 4 Комментарий оценки: Спасибо. Только я не понял что значит " графические функции PHP также в этом плане далеки от идеала"
Отвечает: Nexus
Здравствуйте, BerdArt!
1) а точно ли запрос один и тот же? с цветами ты ж наверное выдергиваешь с distinct, чтобы они не повторялись? В принципе ты можешь либо вытащить сначала цвета с distinct'ом, а потом вторым запросом весь список товаров. Либо получить массив - табличку с названием товара и цветом через mysql_fetch_assoc, а потом пробежаться по ней и отрисовать все товары и все цвета, но цвета придется проверять на несовпадение... Например, при отрисовке цвета создавать в массиве элемент с ключем - названием цвета. На несовпадение
проверять через array_key_exists. в реализации вариант с двумя запросами конечно проще, а на счет скорости - не знаю, думаю на большой базе он будет медленнее.
2) при загрузке картинки нужно создавать ее уменьшенную копию и выводить ее. если ты задашь width и height у тебя все-равно будет подгружаться большая картинка, а потом масштабироваться браузером, так что этот вариант не годится. код ресайза картинки в аттаче
Приложение:
Ответ отправил: Nexus (статус: 7-ой класс)
Ответ отправлен: 29.05.2007, 17:11 Оценка за ответ: 5 Комментарий оценки: Большое Спасибо. 1) никогда не сталкивался с distinct'ом и не знаю что-это такое. Я проверял на несовпадение 2) благодарен за ресайз. надо будет попробовать.
Отвечает: Цепковский Антон Сергеевич
Здравствуйте, BerdArt!
1) Делаем примерно так:
<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");
$result = mysql_query("SELECT id, name, color FROM mytable");
Результат запроса хранится в переменной $result, в первом цикле перебираете все полученные записи и работаете с цветами товаров, во втором поновой перебираете записи и работаете непосредственно с товарами.
2. В идеале, конечно в ручном режиме делать маленькие картинки и оптимизировать для web'а. Не выводите маленькие картинки, уменьшая размер картинки при помощи параметров width и height - картинка все равно будет загружаться большая, только потом браузер будет изменять размер перед выводом.
Я бы сделал так: написал скрипт на php, который на лету уменьшает размер большой картинки. Но данный метод требует серьезной проработки: ведь картинки могут быть разных форматов (gif, jpeg, png) и разных размеров и пропорций. Но все это решаемо при использовании библиотеки GD или GD2 - вот пример уменьшения исходной картинки в 2 раза:
<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
В данном случае можно сохранив скрипт под названием resample.php и настроив прием имени исходной картинки из $_GET-массива использовать на странице теги <img src="resample.php?file=test.jpg"> и Вы будете получать уменьшенную в 2 раза картинку. Т.е. ссылка resample.php?file=test.jpg - это ссылка на картинку.
С уважением,
Антон Цепковский.
Приложение:
--------- Вся наша жизнь - RPG
Ответ отправил: Цепковский Антон Сергеевич (статус: 7-ой класс)
Ответ отправлен: 30.05.2007, 02:11 Оценка за ответ: 4 Комментарий оценки: 1) я пробовал такой способ. Он не работает. По-Вашему команда mysql_fetch_array(...) пробегает результат раз, а потом в другом цикле тот же результат (который уже пройден) она проходит еще раз. Так оно не работает 2) Спасибо за пример уменьшения размера картинки. Надо бы попробывать его.
Вопрос № 89.148
Спасибо за ваш ответ на вопрос “ Помогите вывести инфу из БД в таблицу, так что бы в строке было по 3 столбика с инфой из этой базы и n-ное количество строк…” и извините за неполноценный вопрос…
Попробую ещё раз…
Есть галерея, нужно вывести картинки из БД, что бы табличка получилась вот такая
_________________________________
| Картинка 1 | Картинка 2 | картинка 3 |
|------------------------------------------------|
| Картинка 4 | Картинка 5 | картинка 6 |
|------------------------------------------------|
| Картинка 7 | Картинка 8 | картинка 9 |
------------------------------------------------
Не могу придумать алгоритм для вывода 3х разных картинок в одну строчку…
Если у вас не затруднит, помогите пожалуйста…
Отправлен: 29.05.2007, 19:15
Вопрос задал: AleX29 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Yurio
Здравствуйте, AleX29!
В приложении кусок РЕАЛЬНО работающего кода.
Причем, количество столбиков задается в пересенной $col_yacheek.
Приложение:
Ответ отправил: Yurio (статус: 1-ый класс)
Ответ отправлен: 29.05.2007, 19:41 Оценка за ответ: 5 Комментарий оценки: Спасибо, можно узнать откудо он?!
Вопрос № 89.193
Здравствуйте!
Возможно ли выполнить скрипт Perl из скрипта PHP?
Если да то как?
Отправлен: 30.05.2007, 02:03
Вопрос задал: Serg77 (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: PVS
Здравствуйте, Serg77!
посмотрите на функции exec и system,
ещё есть popen/pclose если Вам нужно обработать результат perl-скрипта
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 30.05.2007, 09:43
Отвечает: Sea
Здравствуйте, Serg77!
Вариантов много.
От банального исполнения по определенному url'у , до выполнения как системных комманд exec и system.
Ну и конечно
virtual($filename) - это наподобие SSI директив.
Ответ отправил: Sea (статус: 2-ой класс)
Ответ отправлен: 30.05.2007, 13:14
Вопрос № 89.201
Здравствуйте. Возникла такая проблема. В скрипте чата есть код (см. приложение). Делается запрос в базу данных, выводится статистика юзеров в диапазоне от 0 до 1000 человек, которая сортируется по кол-ву набранных постов. Но беда в том, что весь результат выводится на одну страницу. Как сделать так, чтобы он разбивался на нужное число страниц по 10 записей на каждой?
Приложение:
Отправлен: 30.05.2007, 05:13
Вопрос задал: Андрей Л (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Шахгусейнов Азиз
Здравствуйте, Андрей Л!
создайте переменную, а в лимите сделайте LIMIT $n,100
Приложение:
--------- Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 4-ый класс)
Ответ отправлен: 30.05.2007, 09:08
Отвечает: Sea
Здравствуйте, Андрей Л!
Вам в принципе уже ответили но можно немного пояснить с точки зрания реализации.ъ
Просто вводите параметр, который будет передаваться через метод GET и будет отвечать за очередную порцию юзеров по 10 человек. Т.е. 0,1,2,3,4...n. И в запросе используете его таким образом.
$page=$_GET['page'];
$result = mysql_query ("SELECT user,posts FROM users LIMIT ".$page*10.", 10");
Ну и конечно предусмотреть навигацию по страницам, т.е. ссылки типа <a href="...&page=0">0</a>
Ответ отправил: Sea (статус: 2-ой класс)
Ответ отправлен: 30.05.2007, 13:05