|
|
|
| Ответ 011 на задачу N 3.
С условиями задачи можно ознакомится по ссылке.
<?php
// скрипт index.php к задаче N3
if (!$tmp=@file_get_contents("date.txt")) //если файл не существует или пуст
{
$tmp=date("Y-m-d H:i"); //выясняем текущее время
}
list($date, $time)=explode(" ",$tmp); //с помощью нехитрых манипуляций
list($year, $month, $day)=explode("-", $date); //получаем 5 переменных
list($hour, $minute)=explode(":", $time); //для подставновки в форму
//выводим на экран форму
echo"
<form action='second.php' method='post'>
<input type='text' name='year' value='$year'>год<br>
<input type='text' name='month' value='$month'>месяц<br>
<input type='text' name='day' value='$day'>день<br>
<input type='text' name='hour' value='$hour'>часы<br>
<input type='text' name='minute' value='$minute'>минуты<br>
<input type='submit' value='отправить'>
</form>";
?>
|
<?php
// скрипт second.php к задаче N3
//какую бы белиберду не ввел пользователь, функция mktime ее слопает
$date=mktime($_POST['hour'], $_POST['minute'], 0, $_POST['month'], $_POST['day'], $_POST['year']);
$fp=fopen("date.txt", "w"); //пересоздаем файл
flock($fp, LOCK_EX); //запираем файл
fwrite($fp, date("Y-m-d H:i", $date)); //и пишем туда данные в требуемом виде
flock($fp, LOCK_UN); //отпираем файл
fclose($fp); //закрываем файл
header("Location:index.php"); //переходим на главную страницу
?>
|
http://www.softtime.ru/info/task.php?id_article=73 | |
|
|
|
|
|
|
|
для: SoftTime
(04.02.2006 в 22:19)
| | ИМХО лучший, я бы сам так сделал. | |
|
|
|
|
|
|
|
для: SoftTime
(04.02.2006 в 22:19)
| | Очень компактно и наглядно, но дата хранится с MySQL-формате, хотя сама просится в UNIXSTAMP, который прочитал и делай с ним что хочешь. Форматированную дату придётся ещё разбирать потом. Так же не очень нравится отсутствие выпадающих списков, которые не дадут человеку ошибиться. В условиях задачи ничего не говорится о проверки данных поступающих из HTML-формы, но было бы неплохо их проверить хотя бы на целочисленность, впрочем обработка mktime() делает эту проверку лишней, это я наверное просто придираюсь :))). | |
|
|
|
|
|
|
|
для: cheops
(06.02.2006 в 00:25)
| | в условии задачи фигурировал вполне конкретный формат даты: "0000-00-00 00:00"
В противном случае, код еще можно было бы сократить:) | |
|
|
|
|
|
|
|
для: Loki
(06.02.2006 в 00:50)
| | >в условии задачи фигурировал вполне конкретный формат даты:
>"0000-00-00 00:00"
И не совсем на мой взгляд коректный
ГГГГ-ММ-ДД или ГГГГ-ДД-ММ ? | |
|
|
|
|
|
|
|
для: Loki
(06.02.2006 в 00:50)
| | Не совсем так
т.е. пустых полей и каких-то диких дат вроде 0000-00-00 00:00 быть не должно
|
В условии говорится о том, что не должно быть нулевых дат, в файле дату хранить можно было в любом формате, что в общем все и делали (формат только у двух человек повторяется :), причём те, кто выбрал формат MySQL поступили более разумно - он заточен под сортировку и тоже является своеобразным стандартом, хотя UNIXSTAMP было бы лучше. | |
|
|
|
|
|
|
|
для: cheops
(06.02.2006 в 13:21)
| | Ну я придерживаюсь мнения, что если на стене висит ружье, то в третьем акте оно должно выстрелить:)
То есть в задаче не должно быть информации не относящейся к ней (равно как и в решении) | |
|
|
|
|
|
|
|
для: Loki
(06.02.2006 в 15:32)
| | Справедливо, будем в следующий раз более чётко вычитывать текст задачи. | |
|
|
|
|
|
|
|
для: cheops
(06.02.2006 в 00:25)
| | Я бы переделал так:
<?php
// скрипт index.php к задаче N3
if (!$tmp=@file_get_contents("date.txt")) $tmp=time();
list($year, $month, $day, $hour, $minute)=explode(":", date("Y:m:d:H:i"));
echo"
<form action='second.php' method='post'>
<input type='text' name='year' value='$year'>год<br>
<input type='text' name='month' value='$month'>месяц<br>
<input type='text' name='day' value='$day'>день<br>
<input type='text' name='hour' value='$hour'>часы<br>
<input type='text' name='minute' value='$minute'>минуты<br>
<input type='submit' value='отправить'>
</form>";
?>
|
<?php
// скрипт second.php к задаче N3
$fp=fopen("date.txt", "w"); //пересоздаем файл
fwrite($fp, mktime($_POST['hour'], $_POST['minute'], 0, $_POST['month'], $_POST['day'], $_POST['year'])); //и пишем туда данные в требуемом виде
fclose($fp); //закрываем файл
header("Location:index.php"); //переходим на главную страницу
?>
|
Комментарии добавить по вкусу:)
ЗЫ по поводу интерфейса: это за что же надо так недавидеть пользователя, чтобы вывалить на него пять(!) селектов, четыре из которых имеют вертикальную прокрутку?
Если мы действительно говорим об удобстве пользователя, то в порядке убывания это
1. радиобаттоны
2. инпуты
3. селекты
радиобаттоны не слишком эстетично, что и остаются только инпуты:) | |
|
|
|
|
|
|
|
для: Loki
(06.02.2006 в 09:46)
| |
Если мы действительно говорим об удобстве пользователя, то в порядке убывания это
1. радиобаттоны
2. инпуты
3. селекты
|
1. радио хорошо когда вариантов не много (2-3), иначе тратиться место и это даже усложняет нахожджение нужного варианта.
2. импут-текст - хорошо когда много вариантов, дать пользователю самому ввести. Но согласитесь что месяц в названиях выглядит эстетичнее. Да и перевод из "чисел" в "буквы" делает пользователь, а это нагрузка на его голову :)
3. Селекты копмактны и не предостовляют все варианты. хорошо когда элементов не больше 20, иначе не лучше 20 радио кнопок. | |
|
|
|
|
|
|
|
для: SoftTime
(04.02.2006 в 22:19)
| | Ничего личного, это только мое скромное мнение. Вы вправе не согласится с ним, и я тоже могу ошибаться.
Отличный код, но:
1. Файл "date" в обработчеке не проверяется, у скриптка может не быть прав на сохранение в файл.
2. Блокировка - good :)
3 Компактно, хорошо читается. | |
|
|
|
|
|
|
|
для: Artem S.
(06.02.2006 в 09:51)
| | Введите 9999 год
Warning: mktime() [function.mktime]: Windows does not support negative values for this function in x:\home\uch.ru\www\second.php on line 4
Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in x:\home\uch.ru\www\second.php on line 7
|
| |
|
|
|
|
|
|
|
для: PantiL
(06.02.2006 в 22:10)
| | Так то виндовс! Он много чего не суппортит;) | |
|
|
|