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

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

 

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

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

тема: Ответ 003 на задачу N 3
 
 автор: SoftTime   (05.02.2006 в 09:12)   письмо автору
 
 

Ответ 003 на задачу N 3.
С условиями задачи можно ознакомится по ссылке.

<?
// Скрипт index.php к задаче № 3
// <b>Сизых, Иван, SpeculAt0r</b>

$path="date.txt"// путь к файлу с датой

if(!file_exists($path) or filesize($path)=="0"){
    
$date=getdate(time()); // получаем текущую дату если файла не существует или он пустой
}
else{
    
$file=file($path); // если файл существует и он не пустой  считываем его в массив
    
list($ymd,$hm)=explode(" ",$file[0]); // разбиваем полученную дату на ГГГГ-ММ-ДД и ЧЧ:ММ
    
list($date['year'],$date['mon'],$date['mday'])=explode("-",$ymd); // теперь год, месяц и день в отдельных переменных
    
list($date['hours'],$date['minutes'])=explode(":",$hm); // часы и минуты также в  отдельных переменных
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Задача № 3</title>
  <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
 </head>
<body>
<center>
<table cellspacing='0' cellpadding='2' style='text-align:center;'>
 <form action='./handler.php' method='post'>
 <tr><td>Год</td><td>Месяц</td><td>День</td><td>Часы</td><td>Минуты</td></tr>
 <tr>
  <td><input type='text' name='year' maxlength='4' size='4' value='<? echo $date['year']; ?>'></td>
  <td><input type='text' name='month' maxlength='2' size='4' value='<? echo $date['mon']; ?>'></td>
  <td><input type='text' name='day' maxlength='2' size='4' value='<? echo $date['mday']; ?>'></td>
  <td><input type='text' name='hour' maxlength='2' size='4' value='<? echo $date['hours']; ?>'></td>
  <td><input type='text' name='min' maxlength='2' size='4' value='<? echo $date['minutes']; ?>'></td>
 </tr>
 <tr><td colspan='5'><input type='submit' name='write' value='Записать в файл'></td></tr>
 </form>
</table>
</center>
</body>
</html>


<?
// Скрипт handler.php к задаче № 3
// <b>Сизых, Иван, SpeculAt0r</b>

$error=""// переменная для ошибок

// Обрабатываем данные полученные из формы
if($_POST['write']){
    
// ГОД
    
if($_POST['year']){
        
$date['year']=trim(substr($_POST['year'],0,4)); // удаляем пробелы и обрезаем
        
if(empty($date['year']) or !is_numeric($date['year'])) // если  ПУСТО или НЕ ЧИСЛО, ОШИБКА
            
$error.="Вы неверно ввели ГОД!<br>
"
;
    }
    else 
$error.="Вы не ввели ГОД!<br>
"
;
    
// МЕСЯЦ
    
if($_POST['month']){
        
$date['mon']=trim(substr($_POST['month'],0,2)); // удаляем пробелы и обрезаем
        
if((empty($date['mon']) or !is_numeric($date['mon'])) or ($date['mon']<=or $date['mon']>12)) // если  ПУСТО, НЕ ЧИСЛО, <=0, >12, то ОШИБКА
            
$error.="Вы неверно ввели МЕСЯЦ!<br>
"
;
    }
    else 
$error.="Вы не ввели МЕСЯЦ!<br>
"
;
    
// ДЕНЬ
    
if($_POST['day']){
        
$date['mday']=trim(substr($_POST['day'],0,2)); // удаляем пробелы и обрезаем
        
if((empty($date['mday']) or !is_numeric($date['mday'])) or ($date['mday']<=or $date['mday']>31)) // если  ПУСТО, НЕ ЧИСЛО, <=0, >31, то ОШИБКА
            
$error.="Вы неверно ввели ДЕНЬ!<br>
"
;
    }
    else 
$error.="Вы не ввели ДЕНЬ!<br>
"
;
    
// ЧАСЫ
    
if($_POST['hour']){
        
$date['hours']=trim(substr($_POST['hour'],0,2)); // удаляем пробелы и обрезаем
        
if((empty($date['hours']) or !is_numeric($date['hours'])) or ($date['hours']<or $date['hours']>23)) // если  ПУСТО, НЕ ЧИСЛО, <0, >23, то ОШИБКА
            
$error.="Вы неверно ввели ЧАСЫ!<br>
"
;
    }
    else 
$error.="Вы не ввели ЧАСЫ!<br>
"
;
    
// МИНУТЫ
    
if($_POST['min']){
        
$date['minutes']=trim(substr($_POST['min'],0,2)); // удаляем пробелы и обрезаем
        
if((empty($date['minutes']) or !is_numeric($date['minutes'])) or ($date['minutes']<or $date['minutes']>59)) // если  ПУСТО, НЕ ЧИСЛО, <0, >59, то ОШИБКА
            
$error.="Вы неверно ввели МИНУТЫ!<br>
"
;
    }
    else 
$error.="Вы не ввели МИНУТЫ!<br>
"
;
    
    
// проверяем переменную error
    
if($error!="")
        echo 
"<div style='color:#ff0000'>".$error."</div><br>
<a href='index.php'>попробовать ещё раз</a>"
;
    else{
        
$string=$date['year']."-".$date['mon']."-".$date['mday']." ".$date['hours'].":".$date['minutes']."
"
;
        
$date_file=fopen('date.txt','w') or die("Не могу открыть файл!");
        
flock($date_file,LOCK_EX);
        
fputs($date_file,$string);
        
flock($date_file,LOCK_UN);
        
fclose($date_file);
        echo 
"Дата записана в файл!<br>
<a href='index.php'>редактировать</a>"
;
    }
}
else
    
header("Location:index.php"); // Если мы пришли не с index.php, отправляем туда

?>


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

   
 
 автор: Artem S.   (06.02.2006 в 00:26)   письмо автору
 
   для: SoftTime   (05.02.2006 в 09:12)
 

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

1. getdate(time());
В данном случае сойдет и getdate();
2. Извлеение даты.
Здесь я бы воспользовался рег. выражением, но и у автора нет ничего крименального.
3. Дата храниться в понятной форме. Это хорошо, при случает ее можно отредактировать вручную.
4.
$date['year']=trim(substr($_POST['year'],0,4))
Логичнее было бы
$date['year']=substr(trim($_POST['year']),0,4)
5. Не совсем корректные сообщение об ошибке. "Не ввели" и "не правильно ввели" разные вещи.
6. Использована блокировка, это есть гуд =)

   
Rambler's Top100
вверх

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