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

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

  Все выпуски  

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


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

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

Выпуск № 732
от 06.08.2007, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 444, Экспертов: 62
В номере:Вопросов: 3, Ответов: 16


Вопрос № 96928: Имеется поле TIMESTAMP вида 2007-08-01 03:49:16. Как мне его преобразовать во время в формате UNIX или просто конвертировать в другой вид?...
Вопрос № 96953: Здравствуйте. У меня вопрос по использованию метода <b>foreach</b> . Дело в том, что при использовании кода из приложения все рисунки выводятся в одну строку... Сколько бы их не было. А мне нужно, чтобы, например, в одной строке было бы 5 рисунков. М...
Вопрос № 97017: Такой вот вопрос, уважаемые эксперты! В таблице записаны юзеры. Туда записывается дата регистрации автоматически, CURRENT_TIMESTAMP, может неправильно написал, но суть та же. При обновлении информации через форму, это поле тоже обновляется и выхо...

Вопрос № 96.928
Имеется поле TIMESTAMP вида 2007-08-01 03:49:16. Как мне его преобразовать во время в формате UNIX или просто конвертировать в другой вид?
Отправлен: 01.08.2007, 07:37
Вопрос задал: Бобровский Сергей Сергеевич (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Yadovit
Здравствуйте, Сергей!
Посмотрите на этот код:
<?php
// 2007-08-01 03:49:16
$tstamp= mktime(3, 49, 16, 8, 1, 2007);

print $tstamp."<hr>";

print date ("H:i:s d.m.Y",$tstamp);
?>
Ответ отправил: Yadovit (статус: 8-ой класс)
Ответ отправлен: 01.08.2007, 08:18
Оценка за ответ: 3
Комментарий оценки:
Дело в том, что это вид такой, а даты могут быть разные . . мне бы так, чтобы можно было бы сделать с любой датой. Хотя я уже догадываюсь, как, наверное, регулярными выражениями пользоваться . .

Отвечает: Flynn
Здравствуйте, Бобровский Сергей Сергеевич!
Используй strtotime (string time [, int now] )

Так же можно использовать int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ) - только начальную дату предется собственноручно разбить и вложить как параметры.
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 01.08.2007, 08:40
Оценка за ответ: 4
Комментарий оценки:
Спасибо конечно . . только вот как её разбить? Я конечно понимаю, рег выражениями, а конкретным бы примером

Отвечает: Бородин Александр Олегович
Здравствуйте, Бобровский Сергей Сергеевич!
Сконвертировать время в из такого формата в UNIX Вам поможет функция strtotime(). На входе ей передается дата и время, то есть Ваша строка "2007-08-01 03:49:16". Полученную временную метку можно сконвертировать в любой другой формат функцией date("формат",$time), где $time = strtotime("2007-08-01 03:49:16").
---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 5-ый класс)
Ответ отправлен: 01.08.2007, 09:54
Оценка за ответ: 5
Комментарий оценки:
Благодарю, кажется, всё понял!

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

Можно сделать это еще в процессе запроса, например так:

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
-> 1111885200

или, если надо представить в другом формате:

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
Ответ отправил: Заикин Олег (статус: 1-ый класс)
Ответ отправлен: 01.08.2007, 17:16
Оценка за ответ: 5
Комментарий оценки:
О! Вот это мне пригодится!

Отвечает: Powoditch konstantin
Здравствуйте, Бобровский Сергей Сергеевич!
Скорее всего Вам поможет функция gmmktime
Возвращает метку времени Unix для времени по Гринвичу
Описание
int gmmktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])
Использование:
$unixTime = gmmktime ( 3, 49, 16, 8, 1, 2007);
Ответ отправил: Powoditch konstantin (статус: 3-ий класс)
Ответ отправлен: 01.08.2007, 17:45
Оценка за ответ: 3


Вопрос № 96.953
Здравствуйте. У меня вопрос по использованию метода foreach . Дело в том, что при использовании кода из приложения все рисунки выводятся в одну строку... Сколько бы их не было. А мне нужно, чтобы, например, в одной строке было бы 5 рисунков. Можно ли это как-то решить?

Заранее спасибо.

Приложение:

Отправлен: 01.08.2007, 11:25
Вопрос задала: Angel7 (статус: Практикант)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Yurio
Здравствуйте, Angel7!
При помощи foreach может и можно, но сильно уж геморойно, по-моему.
Я ипользую вложенные циклы for. В приложении - пример. Но здесь выводится строго определенное количество столбцов. Я думаю, что переделать под Ваши нужды данный код не составит труда.

Приложение:

Ответ отправил: Yurio (статус: 2-ой класс)
Ответ отправлен: 01.08.2007, 11:56
Оценка за ответ: 4
Комментарий оценки:
НЕ, я без базы данных пока работаю. Но может пригодиться :) Все равно спасибо!

Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Angel7!
Предлагаю такой вариант. Только мне больше нравится в PHP вставлять HTML, а не наоборот, как у вас, но, думаю, смысл будет ясен. И обход я буду делать при помощи вложенных for, так здесь, как мне кажется, удобней. Почти каждую строчку прокомментировал. Код работает, проверил. Только поменяйте путь к картинкам и расширение.

Приложение:

---------
Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.

Ответ отправил: Бобровский Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 01.08.2007, 12:28
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!!!! Как раз то, что нужно!

Отвечает: Yadovit
Здравствуй, Angel7!
Вот упрощённый пример:
for ($i=0, $n= sizeof($avas);$i<$n;$i++)
{
Print "<img src="$avas[$i]" border=0>";
If ((($i+1) % 5)==0) print "<br>"; // если кратно пяти выводим перенос строки;
}
Ответ отправил: Yadovit (статус: 8-ой класс)
Ответ отправлен: 01.08.2007, 12:33
Оценка за ответ: 5
Комментарий оценки:
Спасибо!! Я посмотрю, какой из вариантов выбрать!

Отвечает: Nexus
Здравствуйте, Angel7!

Не знаю, почему все тут говорят что вложенные for удобнее... Код с foreach в приложении. По-моему, гораздо нагляднее

Приложение:

Ответ отправил: Nexus (статус: 9-ый класс)
Ответ отправлен: 01.08.2007, 13:45

Отвечает: Flynn
Здравствуйте, Angel7!
Попробуй это в приложении.
После каждого вывода ячейки проверяем не превышает ли i максимальное значение. Если превышает - обновляем его и рисует следующую строку.

Приложение:

Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 01.08.2007, 15:26

Отвечает: Powoditch konstantin
Здравствуйте, Angel7!
Попробуйте вот так:
<? $avas=glob("eye/*.gif"); ?>
<table border="0" cellspacing="5" cellpadding="0" align=center width=100%>
<?
$i = 0;
foreach($avas as $ava){
$i++;
if($i == 5){
echo "<tr>";
}
?>
<td>
<img src="<?=$ava?>" border=0>
</td><?
if($i == 5){
echo "</tr>";
$i = 0;
}
} ?>
</table>
Ответ отправил: Powoditch konstantin (статус: 3-ий класс)
Ответ отправлен: 01.08.2007, 17:51


Вопрос № 97.017
Такой вот вопрос, уважаемые эксперты!
В таблице записаны юзеры. Туда записывается дата регистрации автоматически, CURRENT_TIMESTAMP, может неправильно написал, но суть та же. При обновлении информации через форму, это поле тоже обновляется и выходит, что там не дата регистрации, а дата последнего изменения. Как сделать, чтобы она не изменялась при обновлении!?
Отправлен: 01.08.2007, 19:10
Вопрос задал: Бобровский Сергей Сергеевич (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: PVS
Здравствуйте, Бобровский Сергей Сергеевич!
Сама по себе она изменятся не может. Тоесть изменение этого поля прописано где-то у Вас в скриптах - найдите где и уберите.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 01.08.2007, 19:18
Оценка за ответ: 2
Комментарий оценки:
Думаете я настолько невнимателен? В структуре таблицы в поле timestamp указано "значение по-умолчанию" CURRENT_TIMESTAMP. Я нигде его не ввожу, оно вписывается автоматически.

Отвечает: Бородин Александр Олегович
Здравствуйте, Бобровский Сергей Сергеевич!
Чтобы не обновлялось, надо корректнее расписывать SQL-запрос. В частности, не изменять соответствующее поле в нем. Этот Ваш CURRENT_... - это же не тип поля, это функция, результат выполнения которой Вы подставляете в поле. Значит, при вставке новой записи эту функцию надо вызывать, а при обновлении - нет. Если Вы не укажете, что делать с этим полем при запросе UPDATE, то с ним ничего и не произойдет. Обновляйте только нужные поля, вобщем, вот Вам мой совет. MySQL это позволяет. А еще лучше решать эту проблему через ООП(объектно-ориентированное программирование). Вопросы в личку задавайте, если что.

---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 5-ый класс)
Ответ отправлен: 01.08.2007, 19:21
Оценка за ответ: 2
Комментарий оценки:
Наверное, мы друг друга не поняли, либо только вы меня. Через личку вообще непонятно мне че к чему вы ответили. В общем, ответа я не получил от Вас.

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

При создании записи в запросе используй NOW() либо CURDATE(), при обновлении - вообще не трогай это поле. А дефолтное значение убери. А вот так, чтобы все делать одним запросом REPLACE INTO - не знаю, как-то ничего в голову не приходит... Сделай два запроса и не мучайся ;)
Ответ отправил: Nexus (статус: 9-ый класс)
Ответ отправлен: 01.08.2007, 19:27
Оценка за ответ: 4
Комментарий оценки:
Непонятно, какие два запроса . . а можно конкретный пример, как сделать, чтобы вставлялась текущая дата без дефолтного значения?

Отвечает: Santana
Здравствуйте, Бобровский Сергей Сергеевич!
Увы с этим полем уже ничего не сделаешь, такова суть полей типа TIMESTAMP, они обновляются всякий раз когда изменяются данные записи ... вобщем для того и создаются, что бы определить когда последний раз изменялась данная запись. Создавайте дополнительно поле для даты регистрации тип дататайм ... ну или чар ... как Вам удобнее.
Другого пути нет ... все равно к этому придете
Ответ отправил: Santana (статус: 9-ый класс)
Ответ отправлен: 01.08.2007, 19:50
Оценка за ответ: 3
Комментарий оценки:
Да . . я уже это и сам понял . . создал новую таблицу вообще

Отвечает: Rok-set
Здравствуйте, Бобровский Сергей Сергеевич!

в вашей ситуации поле типа CURRENT_TIMESTAMP не подходит.
вам необходимо использовать поле для хранения даты и времени. (либо отдельно даты и отдельно времени, либо только даты в любом удобном для вас формате, сама дата определяется средствами рнр, а не средствами базы данных)
при регистрации в это поле вы заносите значение, а при обновлении этого поля данное значение не меняете.
поле типа CURRENT_TIMESTAMP очень удобно использовать для контроля последнего посещения пользователя - при заходе на страницу
---------
Есть то, чего вы не знаете, а есть то, о чём даже представить не можете! А оно всё равно есть....
Ответ отправил: Rok-set (статус: 8-ой класс)
Ответ отправлен: 02.08.2007, 12:10
Оценка за ответ: 3
Комментарий оценки:
Уже решен вопрос, спасибо.


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное