PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Mandalorian
Отправлено: 17 Сентября, 2021 - 17:30:48
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2021
Помог: 0 раз(а)
Здравствуйте! Занимаюсь по онлайн учебнику Трепачев Д.П.
Задача.
Сделайте скрипт-гороскоп. Внутри него хранится массив гороскопов на несколько дней вперед для каждого знака зодиака. По заходу на страницу спросите у пользователя дату рождения, определите его знак зодиака и выведите предсказание для этого знака зодиака на текущий день.
Написал код такого плана.
PHP:
скопировать код в буфер обмена
<?PHP
ini_set ( 'display_startup_errors' , 1
) ;
?>
<form action="" method="GET">
<input name="birth" placeholder="dd.mm.yyyy">
<input type="submit">
</form>
<?PHP
} else {
$date = $_GET [ 'birth' ] ;
$dateStamp = mktime ( 0
, 0
, 0
, $arrDate [ 1
] , $arrDate [ 0
] , date ( 'Y' ) ) ;
$horoscope = [
'Овен' => [ $today => 'гороскоп Овна на Сегодня' , $tommorow => 'гороскоп Овна на Завтра' ] ,
'Телец' => [ $today => 'гороскоп Тельца на Сегодня' , $tommorow => 'гороскоп Тельца на Завтра' ] ,
'Близнецы' => [ $today => 'гороскоп Близнецов на Сегодня' , $tommorow => 'гороскоп Близнецов на Завтра' ] ,
'Рак' => [ $today => 'гороскоп Рака на Сегодня' , $tommorow => 'гороскоп Рака на Завтра' ] ,
'Лев' => [ $today => 'гороскоп Льва на Сегодня' , $tommorow => 'гороскоп Льва на Завтра' ] ,
'Дева' => [ $today => 'гороскоп Девы на Сегодня' , $tommorow => 'гороскоп Девы на Завтра' ] ,
'Весы' => [ $today => 'гороскоп Весов на Сегодня' , $tommorow => 'гороскоп Весов на Завтра' ] ,
'Скорпион' => [ $today => 'гороскоп Скорпиона на Сегодня' , $tommorow => 'гороскоп Скорпиона на Завтра' ] ,
'Стрелец' => [ $today => 'гороскоп Стрельца на Сегодня' , $tommorow => 'гороскоп Стрельца на Завтра' ] ,
'Козерог' => [ $today => 'гороскоп Козерога на Сегодня' , $tommorow => 'гороскоп Козерога на Завтра' ] ,
'Водолей' => [ $today => 'гороскоп Водолея на Сегодня' , $tommorow => 'гороскоп Водолея на Завтра' ] ,
'Рыбы' => [ $today => 'гороскоп Рыб на Сегодня' , $tommorow => 'гороскоп Рыб на Завтра' ] ,
] ;
$zodiacs = [
'Овен' => [ 2103 , 1904 ] ,
'Телец' => [ 2004 , 2005 ] ,
'Близнецы' => [ 2105 , 2006 ] ,
'Рак' => [ 2106 , 2207 ] ,
'Лев' => [ 2307 , 2208 ] ,
'Дева' => [ 2308 , 2209 ] ,
'Весы' => [ 2309 , 2210 ] ,
'Скорпион' => [ 2310 , 2111 ] ,
'Стрелец' => [ 2211 , 2112 ] ,
'Козерог' => [ 2212 , 1901 ] ,
'Водолей' => [ 2001 , 1802 ] ,
'Рыбы' => [ 1902, 2003] ,
] ;
foreach ( $zodiacs as $key => $sign ) {
foreach ( $sign as $date ) {
$zodiacs [ $key ] [ ] = mktime ( 0
, 0
, 0
, $res [ 1
] , $res [ 0
] , date ( 'Y' ) ) ; // третьим и четвертым элементом массива записываю временные рамки знака в формате Timestamp }
if ( $dateStamp > $zodiacs [ $key ] [ 2] && $dateStamp < $zodiacs [ $key ] [ 3 ] ) { // здесь соответственно сравниваю дату рождения и временные рамки знака
print_r ( "$horoscope [$key ][$today ]<br>" ) ; }
}
}
?>
Старался делать с учетом уже пройденного материала, чтоб не слишком сложно было.
Интерестно услышать мнения на счет кода. Может можно что-то улучшить? Или проще написать. Или вобще по другому надо... По интернету посмотрел решения другие, и чего-то не легли на душу. Решил по своей логике попробовать.
Vladimir Kheifets
Отправлено: 19 Сентября, 2021 - 13:00:35
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
quote=Mandalorian]
...Написал код...
Может можно что-то улучшить? Или проще написать. Или вобще по другому надо...[/quote]
Добрый день!
1. Главное, Вам нужно обрать вниминия на
Был такой старый фильм "31 июня".
Так и у Вас получится. Если $today=30, $tommorow=31, а это ошибка.
Исправить можно так
PHP:
скопировать код в буфер обмена
//original date is in format dd.mm.YYYY
$DateTimeToday = $DateTimeTommorow = DateTime:: createFromFormat ( 'd.m.Y' , $date ) ;
$today = $DateTimeToday -> format ( 'd' ) ;
$DateTimeTommorow -> add ( new DateInterval( 'P1D' ) ) ;
$tommorow = $DateTimeTommorow -> format ( 'd' ) ;
Для $tommorow необходимо учитывать не только день, но и месяц и год.
т.е. для 31 июня, $tommorow будет 1 июля, а для 31 декабря ...
2. Лучше не вычислять в цикле текущий год, а определить в начале кода
3. Лучше заменить
4. Вы можете добавить в input атрибуты type="date", value, min, max.
CODE (
html ):
скопировать код в буфер обмена
<input type = "date" name = "birth" placeholder= "dd.mm.yyyy"
value = "<?=$_POST['birth'];?> " min="<?= $min;?> " max="<?= $max;?> " >
Если вставите type="date" , в современных браузерах будет выплывать календарик.
min, max - фильтр дат.
Удачи!(Отредактировано автором: 19 Сентября, 2021 - 13:03:29)
Mandalorian
Отправлено: 20 Сентября, 2021 - 12:59:27
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2021
Помог: 0 раз(а)
Я кстати вспомнил. В функцию mktime можно не передавать последним параметром год date('Y'), так как функция берет автоматически год, который сейчас.
По поводу первого вопроса с датами $today и $tommorow нашел еще такой вариант записи:
Тут уже будет учитываться смена месяца и года.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB