Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 677
от 04.06.2007, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 434, Экспертов: 56
В номере:Вопросов: 4, Ответов: 10


Вопрос № 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");

while ($row = mysql_fetch_array($result)) {
printf ("ID: %s color: %s", $row[0], $row[2]);
}

while ($row = mysql_fetch_array($result)) {
printf ("ID: %s name: %s", $row[0], $row[1]);
}

mysql_free_result($result);
?>

Результат запроса хранится в переменной $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
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, null, 100);
?>

В данном случае можно сохранив скрипт под названием 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное