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

  Все выпуски  

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


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

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

Выпуск № 336
от 10.05.2006, 02:35

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


Вопрос № 42037: Здравствуйте. Проблема в следующем. Как сделать на странице меню типа "предыдущая статья - следующая статья"? Статьи хранятся в базе MySql в виде "id - название статьи - автор - текст статьи". Как выбрать из базы статьи ну...
Вопрос № 42054: Уважаемые эксперты, у меня такой вопрос: Пользователь загружает картинку/фотку ко мне на сервер ( делает upload ). Работает с ней и уходит с сервера. Я должен позаботиться о том, что бы картинка/фотка была удалена автоматически через 10 мину...
Вопрос № 42058: Добрый день! Я не знаю куды лучше вопрос задать поэтому задаю в эту тему! Я пишу чат на delphi устроен он таким образом, что список тех кто в чате отображается в компоненте twebbrowser в него закачивается содержимое определенного файла где идет списо...
Вопрос № 42070: Здраствуйте. Пишу гостевую книгу с использованием MySQL. В таблице есть несколько сообщений (с именами и прочей информацией), записаные по рядам. --------------------- | name | email | message | --------------------- Как показать ...

Вопрос № 42.037
Здравствуйте.
Проблема в следующем.
Как сделать на странице меню типа "предыдущая статья - следующая статья"? Статьи хранятся в базе MySql в виде "id - название статьи - автор - текст статьи". Как выбрать из базы статьи нужного автора с сортировкой названий статей по алфавиту - понятно.
А как определить название предыдущей статьи и следующей?
Отправлен: 04.05.2006, 12:52
Вопрос задал: Иван_ (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Иван_!
Полагаю что нужно сделать sql-выборку. Для предыдущей статьи "SELECT id, nazvstatyi FROM tablica WHERE id<tekuschiyID ORDER BY id LIMIT 1". Для следующей статьи "SELECT id, nazvstatyi FROM tablica WHERE id>tekuschiyID ORDER BY id LIMIT 1". Если я что-то не понял, то поправьте меня.
---------
Если партия скажет есть контакт, будем есть контакт.
Ответ отправил: Rusland (статус: Специалист)
Ответ отправлен: 04.05.2006, 13:14

Отвечает: Madproger
Здравствуйте, Иван_!

В дополнение к предыдущему ответу

Если нужно с сортировкой по алфавиту
то навряд ли с такой структурой БД у Вас что то получится
у Вас к примеру
132 Абрамов текст
12 Володин текст
54 Шагал текст
А Вам надо ВОлодин как основная, здесь Вы думаю навряд ли угадаете какая предыдущая :(

Тут запрос WHERE ну никак не сконфигуришь. И структуры таблицы которая с этим справится я не вижу.

Единственный вариант (ИМХО) это делать в начале выборку только id упорядоченных по алфавиту. например так
SELECT id FROM your_table ORDER BY <article_name>
Загонять в РНР результат в массив и уже по нему ориентироваться какая следующая какая предыдущая. (вбрать три id)

Потом запрос типа
sprintf("SELECT id, <article_name>, if(id=%d, <content>, '') FROM your_table WHERE id IN (%d, %d, %d) ORDER BY <article_name>", $curr_id, $prev_id, $curr_id, $next_id)

Думаю так.
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 6-ой класс)
Ответ отправлен: 04.05.2006, 13:36
Оценка за ответ: 5
Комментарий оценки:
Я так и делаю - сортирую выборку по алфавиту и заношу в массив. И тогда уже определяю предыдущее и следующее значение.
Но подумал, что, может, есть более простые методы.
Спасибо за ответ


Вопрос № 42.054
Уважаемые эксперты, у меня такой вопрос:

Пользователь загружает картинку/фотку ко мне на сервер ( делает upload ). Работает с ней и уходит с сервера. Я должен позаботиться о том, что бы картинка/фотка была удалена автоматически через 10 минут, так как место на сервере ограничено и должно быть свободно для других пользоваелей, которые зайдут позже и захотят загрузить свои картинки/фотки.

Как я могу удалить файл/директорию на сервере по истечении N минут?

Заранее благодарен.
Отправлен: 04.05.2006, 14:34
Вопрос задал: Agro (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Straight
Здравствуйте, Agro!
Обычно для этого используется cron (запуск скриптов по расписанию). Т.е. сервер автоматически запускает заданный скрипт, который и производит чистку. Но это поддерживает не всякий хостинг. Я бы предложил такой вариант: пусть при закачке новой картинки скрипт производит удаление старых картинок.
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 04.05.2006, 14:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо, но вариант, который вы предложили, не подходит. Проблема в том, что это многопользовательская программа, и удалять картинку при загрузке новой, я не могу, так как с ней может работать другой пользователь. А как работает cron?

Отвечает: Асташов Андрей Александрович
Здравствуйте, Agro!

Предположу что система *nix. Тогда достаточно при загрузке картинок выполнить вот этот код:
exec('find "$DIR" -type f -atime +10m -exec rm {} ;'); // Удаление всех файлов к которые не читали последние 10 минут.

Или(если разрешает хостинг оператор) в личном крон файле(как у хостинга редактируется крон файл надо уточнять. Везде по разному), в самый конец дописать эту строчку:
*/10 * * * * user find "$DIR" -type f -atime +14m -exec rm {} ;

Удачи.
---------
Бросил курить сам - Брось курить другому!!!
Ответ отправил: Асташов Андрей Александрович (статус: Студент)
Ответ отправлен: 05.05.2006, 06:23
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Попробую переговорить с хостинг оператором.


Вопрос № 42.058
Добрый день! Я не знаю куды лучше вопрос задать поэтому задаю в эту тему! Я пишу чат на delphi устроен он таким образом, что список тех кто в чате отображается в компоненте twebbrowser в него закачивается содержимое определенного файла где идет список логинов. Как можно сделать так, что если человек отключился от сети, то он удаляется из этого файла?
Отправлен: 04.05.2006, 15:17
Вопрос задал: Грицай Алексей Юрьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Jeka911
Здравствуйте, Грицай Алексей Юрьевич!

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

Если не все это реализуемо, то просто, если пользователь долго ничего не говорил в чат, его из списка удалить.

Ну, и конечно, если кто-то подключился, его нужно туда добавить.
---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 2-ой класс)
Ответ отправлен: 05.05.2006, 06:42
Оценка за ответ: 4


Вопрос № 42.070
Здраствуйте.
Пишу гостевую книгу с использованием MySQL. В таблице есть несколько сообщений (с именами и прочей информацией), записаные по рядам.
---------------------
| name | email | message |
---------------------
Как показать все сообщения (или лучше промежуток, например 0-10). Вообще у меня проблема с SQL запросами, что то понял, но всё же туманно.
Поскольку я новичок, хотя сделал пару сайтов на PHP, посоветуйте хорошую книгу для изучения PHP+MySQL. А то их так много и не хочеться деньги выбрасывать на ветер.
P.S. Документацию PHP и MySQL читал.
Отправлен: 04.05.2006, 17:51
Вопрос задал: Fem (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Fem!
Вывести записи можно примерно так:
$res = mysql_query("SELECT * FROM `table`;");
for ($i = 0; $i < mysql_num_rows($res); $i++)
{ print mysql_result($res,$i,2); }

mysql_query("запрос") выполняет запрос и возвращает результат выборки;
mysql_num_rows(RES) выдаёт количество строк указааной выборки;
mysql_result(RES,m,n) выдаёт значение из строки m выборки RES столбца n.
Именно поэтому в приведённом примере я указал столбец 2:
0 - name
1 - email
2 - message

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 04.05.2006, 18:09
Оценка за ответ: 4
Комментарий оценки:
Я не понял :( Зато получше прочитал Хелп и воспользовалься следущем скриптом
-------------
mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("mydb");
$query = "select * from table";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
mysql_free_result($result);
?>
--------------
Красота:)
Вопрос про книги остаётся в силе

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Fem!

Коль вопрос о книгах остается в силе, то отвечу на него.
тут - http://education.aspu.ru/page.php?id=24 и тут -
http://c-books.info/books/load.php?ty=php
можно скачать книги по PHP.
Мне лично нравятся Мазуркевич и Колисниченко. Еще неплохая (по части примеров) А.А. Орлов PHP полезные советы.

---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 7-ой класс)
Ответ отправлен: 04.05.2006, 19:03
Оценка за ответ: 5
Комментарий оценки:
ОК! Посмотрим.

Отвечает: Jeka911
Здравствуйте, Fem!

Если нужен промежуток в запросе добавляем "SELECT * FROM table LIMIT 0,10;";

Где 10 не до 10, а количество, ну т.е. следующее будет LIMIT 10,10...
---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 2-ой класс)
Ответ отправлен: 05.05.2006, 06:33
Оценка за ответ: 5
Комментарий оценки:
Да я уже сделал LIMIT, но вот что обозначает 0 и 10 я понимал не так. Спасибо что объяснил


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное