Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 011 на задачу N 3
 
 автор: SoftTime   (04.02.2006 в 22:19)   письмо автору
 
 

Ответ 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($fpLOCK_EX);                     //запираем файл
fwrite($fpdate("Y-m-d H:i"$date));     //и пишем туда данные в требуемом виде
flock($fpLOCK_UN);                      //отпираем файл
fclose($fp);                             //закрываем файл 
header("Location:index.php");             //переходим на главную страницу
?>


http://www.softtime.ru/info/task.php?id_article=73

   
 
 автор: Akira   (06.02.2006 в 00:09)   письмо автору
 
   для: SoftTime   (04.02.2006 в 22:19)
 

ИМХО лучший, я бы сам так сделал.

   
 
 автор: cheops   (06.02.2006 в 00:25)   письмо автору
 
   для: SoftTime   (04.02.2006 в 22:19)
 

Очень компактно и наглядно, но дата хранится с MySQL-формате, хотя сама просится в UNIXSTAMP, который прочитал и делай с ним что хочешь. Форматированную дату придётся ещё разбирать потом. Так же не очень нравится отсутствие выпадающих списков, которые не дадут человеку ошибиться. В условиях задачи ничего не говорится о проверки данных поступающих из HTML-формы, но было бы неплохо их проверить хотя бы на целочисленность, впрочем обработка mktime() делает эту проверку лишней, это я наверное просто придираюсь :))).

   
 
 автор: Loki   (06.02.2006 в 00:50)   письмо автору
 
   для: cheops   (06.02.2006 в 00:25)
 

в условии задачи фигурировал вполне конкретный формат даты: "0000-00-00 00:00"
В противном случае, код еще можно было бы сократить:)

   
 
 автор: udaf   (06.02.2006 в 01:34)   письмо автору
 
   для: Loki   (06.02.2006 в 00:50)
 

>в условии задачи фигурировал вполне конкретный формат даты:
>"0000-00-00 00:00"
И не совсем на мой взгляд коректный
ГГГГ-ММ-ДД или ГГГГ-ДД-ММ ?

   
 
 автор: cheops   (06.02.2006 в 13:21)   письмо автору
 
   для: Loki   (06.02.2006 в 00:50)
 

Не совсем так
т.е. пустых полей и каких-то диких дат вроде 0000-00-00 00:00 быть не должно

В условии говорится о том, что не должно быть нулевых дат, в файле дату хранить можно было в любом формате, что в общем все и делали (формат только у двух человек повторяется :), причём те, кто выбрал формат MySQL поступили более разумно - он заточен под сортировку и тоже является своеобразным стандартом, хотя UNIXSTAMP было бы лучше.

   
 
 автор: Loki   (06.02.2006 в 15:32)   письмо автору
 
   для: cheops   (06.02.2006 в 13:21)
 

Ну я придерживаюсь мнения, что если на стене висит ружье, то в третьем акте оно должно выстрелить:)
То есть в задаче не должно быть информации не относящейся к ней (равно как и в решении)

   
 
 автор: cheops   (06.02.2006 в 21:07)   письмо автору
 
   для: Loki   (06.02.2006 в 15:32)
 

Справедливо, будем в следующий раз более чётко вычитывать текст задачи.

   
 
 автор: Loki   (06.02.2006 в 09:46)   письмо автору
 
   для: 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($fpmktime($_POST['hour'], $_POST['minute'], 0$_POST['month'], $_POST['day'], $_POST['year']));     //и пишем туда данные в требуемом виде 
fclose($fp);                             //закрываем файл 
header("Location:index.php");             //переходим на главную страницу 
?>  


Комментарии добавить по вкусу:)

ЗЫ по поводу интерфейса: это за что же надо так недавидеть пользователя, чтобы вывалить на него пять(!) селектов, четыре из которых имеют вертикальную прокрутку?
Если мы действительно говорим об удобстве пользователя, то в порядке убывания это
1. радиобаттоны
2. инпуты
3. селекты
радиобаттоны не слишком эстетично, что и остаются только инпуты:)

   
 
 автор: Artem S.   (06.02.2006 в 09:59)   письмо автору
 
   для: Loki   (06.02.2006 в 09:46)
 


Если мы действительно говорим об удобстве пользователя, то в порядке убывания это
1. радиобаттоны
2. инпуты
3. селекты


1. радио хорошо когда вариантов не много (2-3), иначе тратиться место и это даже усложняет нахожджение нужного варианта.
2. импут-текст - хорошо когда много вариантов, дать пользователю самому ввести. Но согласитесь что месяц в названиях выглядит эстетичнее. Да и перевод из "чисел" в "буквы" делает пользователь, а это нагрузка на его голову :)
3. Селекты копмактны и не предостовляют все варианты. хорошо когда элементов не больше 20, иначе не лучше 20 радио кнопок.

   
 
 автор: Artem S.   (06.02.2006 в 09:51)   письмо автору
 
   для: SoftTime   (04.02.2006 в 22:19)
 

Ничего личного, это только мое скромное мнение. Вы вправе не согласится с ним, и я тоже могу ошибаться.

Отличный код, но:
1. Файл "date" в обработчеке не проверяется, у скриптка может не быть прав на сохранение в файл.
2. Блокировка - good :)
3 Компактно, хорошо читается.

   
 
 автор: PantiL   (06.02.2006 в 22:10)   письмо автору
 
   для: 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

   
 
 автор: Loki   (06.02.2006 в 22:13)   письмо автору
 
   для: PantiL   (06.02.2006 в 22:10)
 

Так то виндовс! Он много чего не суппортит;)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования