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

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

  Все выпуски  

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


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

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

Выпуск № 701
от 01.07.2007, 03:05

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


Вопрос № 92825: Есть конструкция 1 (в приложении), которая делает выборку из таблицы и обрабатывает ее. Есть конструкция 2 (там же), которая чаще всего делает то же самое, однако иногда по неизвестной причине срабатывает как бесконечный цикл, причем понять ...
Вопрос № 92883: Добрый день, коллеги! Не подскажете, как организовать следующую штуку? На сайте love.ngs.ru есть такая вещь: вы создали анкету и ведете с кем-нибудь переписку. При этом чтобы проверить, не пришло ли сообщение, вам не надо перезагружать страницу, ...

Вопрос № 92.825
Есть конструкция 1 (в приложении), которая делает выборку из таблицы и обрабатывает ее.

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

В чем может быть дело?

Приложение:

Отправлен: 25.06.2007, 13:21
Вопрос задал: Anatole (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: PVS
Здравствуйте, Anatole!
Вообще-то бесконечный цикл во втором случае должен быть всегда. Потому после каждого прохода снова будет выпонятся mysql_query и каждый раз будете получать первую запись.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 25.06.2007, 13:32
Оценка за ответ: 4
Комментарий оценки:
Как я уже писал - чаще всего нет бесконечного цикла.

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

Отвечает: Yurio
Здравствуйте, Anatole!
Конструкция 2 всегда будет зациклиной.

Если Вам необходимо вывести одно значение, то попробуйте такой вариант:
echo @mysql_result(mysql_query("select id from table where id=100"),0);

В принципе можно то же и без @.
Ответ отправил: Yurio (статус: 2-ой класс)
Ответ отправлен: 25.06.2007, 13:34
Оценка за ответ: 4
Комментарий оценки:
Как я уже писал - чаще всего нет бесконечного цикла.

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

Отвечает: Powoditch konstantin
Здравствуйте, Anatole!
Вы неверно написали вторую конструкцию. Нельзя так писать. Так как каждый раз когда Вы пишете mysql_fetch_row(mysql_query("select id from table where id=100")) - результат возвращается всегда один и тот же! Тоисть указатель на следующую найденую запись возвращает ВСЕГДА указатель на первую найденную запись и так до бесконечности. А при использовании первого способа сначала формируется результат выборки а уже потом в цикле он просматривается.
Ответ отправил: Powoditch konstantin (статус: 1-ый класс)
Ответ отправлен: 25.06.2007, 14:06

Отвечает: Sea
Здравствуйте, Anatole!
Все равильно.
mysql_query возвращает набор записей, а mysql_fetch_row выдает текущую запись и смещает курсор набора записей на 1 вперед и при достижении конца просто возвращает false и выходит из цикла while.
А при использовании конструкции 2 у вас постоянно указатель будет указывать на первую запись, т.к. постоянно обрабатывается новый набор записей. И соответственно получается бесконечный цикл.
Ответ отправил: Sea (статус: 4-ый класс)
Ответ отправлен: 25.06.2007, 21:47

Отвечает: Емельянов Данил Юрьевич
Здравствуйте, Anatole!
Скорее всего во второй конструкции каждый раз происходит заного создается SQL запрос.Попробуйте отделить цикл и sql-запрос. Вообще мне, честно говоря, не понятно зачем вы вообще используете цикл, ведь если поле id уникальное, то запись будет 1.

Приложение:

---------
Жить хорошо, а хорошо жить еще лучше!

Ответ отправил: Емельянов Данил Юрьевич (статус: 2-ой класс)
Ответ отправлен: 27.06.2007, 06:56


Вопрос № 92.883
Добрый день, коллеги!
Не подскажете, как организовать следующую штуку? На сайте love.ngs.ru есть такая вещь: вы создали анкету и ведете с кем-нибудь переписку. При этом чтобы проверить, не пришло ли сообщение, вам не надо перезагружать страницу, как на love.mail.ru. Если сообщение пришло, то страница перезагрузится сама. И даже не вся, а частично, хотя я и не уверен в этом.

Раньше у них это решалось постоянной перезагрузкой страниц - примерно раз в 5 секунд. Понятное дело, что трафик получался лошадиный совершенно. А как-нибудь можно через сервер заставить перезагрузить страницу у другого клиента?
Отправлен: 25.06.2007, 20:07
Вопрос задал: Бородин Александр Олегович (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

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

Нет, сервера заставить перегружать страницу нельзя, там скорее всего так же как и раньше раз в 5сек обновляется какой-нить контейнер через аякс. В js фреймворке prototype есть объект AjaxPeriodicalUpdater или как-то так - как-раз делает то, что ты описал. То же самое легко можно релизовать и на более легкой аяксовской библиотеке типа того же sacks'а
Ответ отправил: Nexus (статус: 8-ой класс)
Ответ отправлен: 25.06.2007, 20:19
Оценка за ответ: 4
Комментарий оценки:
Спасибо, что к гуглу и wikipedii не отослали, коллега. Признателен до крайности. Буду ковырять фреймворки...

Отвечает: Sea
Здравствуйте, Бородин Александр Олегович!
Вам поможет AJAX. Впринципе это JavaScript.
Если коротко, то он позволяет обмениваться данными с сервером без перезагрузки страницы.
Сейчас уже давольно много инфы об AJAX - спросите google.
Ответ отправил: Sea (статус: 4-ый класс)
Ответ отправлен: 25.06.2007, 21:48
Оценка за ответ: 1
Комментарий оценки:
Не люблю, когда меня отсылают к гуглу. Я не в чУме сижу, и что такое AJAX, тоже знаю, не вы один такой умный!

Отвечает: Шпилевский Евгений Васильевич
Здравствуйте, Бородин Александр Олегович!

http://ru.wikipedia.org/wiki/Ajax

Ответ отправил: Шпилевский Евгений Васильевич (статус: 1-ый класс)
Ответ отправлен: 26.06.2007, 16:46
Оценка за ответ: 1
Комментарий оценки:
Нечего мне ссылки кидать! Я вам не мальчик. К тому же, ваш отвед не раскрывает сути вопроса. Читать внимательнее надо, а не ссылками раскидываться. Я их и сам найти могу предостаточно.


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное