|
|
|
| Ответ 007 на задачу N 3.
С условиями задачи можно ознакомится по ссылке.
index.php:
<?php
$file = 'data.txt';
// Если все записано, то сообщаем пользователю
if(isset($_GET['ok'])) { echo "Запись добавлена"; }
if(file_exists($file) && is_readable($file)) {
// Проверяем существует ли дата
$dates = file($file);
if(count($dates) > 0) {
// Очищаем от мусора
$dates = array_map('trim', $dates);
// Заполняем форму
$date = explode("-", $dates[0]);
$time = explode(":", $dates[1]);
} else {
// Если дата не записана, заполняем самостоятельно
$date = array(date("Y"), date("m"), date("d"));
$time = array(date("H"), date("i"));
}
} else {
echo "Ошибка чтения файла '" . $file . "'.";
}
?>
<br>
<form action="handler.php" method="POST">
<input type="text" name="date[]" size="4" value="<?php echo $date[0]; ?>"> -
<input type="text" name="date[]" size="1" value="<?php echo $date[1]; ?>"> -
<input type="text" name="date[]" size="1" value="<?php echo $date[2]; ?>">
<input type="text" name="time[]" size="1" value="<?php echo $time[0]; ?>"> :
<input type="text" name="time[]" size="1" value="<?php echo $time[1]; ?>">
<input type="submit" value="ok">
</form>
|
handler.php:
<?php
// Разделить для даты
define('DATA_DELIM', '-');
// Разделить для времени
define('TIME_DELIM', ':');
$file = 'data.txt';
$error = 0;
if(file_exists($file) && is_writable($file)) {
if(isset($_POST['date']) && isset($_POST['time'])) {
$fp = fopen($file, "w");
$date = $_POST['date'];
$time = $_POST['time'];
// Проверка даты
if(!checkdate($date[1], $date[2], $date[0])) {
echo "Неправильно заполнена дата.<br>";
$error++;
} else {
// Формируем дату в вид YYYY-mm-dd
$date = $date[0] . DATA_DELIM . sprintf('%02d', $date[1], 2) . DATA_DELIM . sprintf('%02d', $date[2], 2);
}
// Проверка времени
// Формируем время в HH:ii
$time = $time[0] . TIME_DELIM . $time[1];
if(!preg_match("/^([0-1][0-9]|[2][0-3])" . TIME_DELIM . "[0-5][0-9]$/", $time)) {
echo "Неправильно заполнено время.<br>";
$error++;
}
// Если ошибок нет, записываем
if($error === 0) {
$fp = fopen($file, "w");
fwrite($fp, $date . "
" . $time);
fclose($fp);
// И отправляем обратно
header("Location: index.php?ok=1");
}
} else {
echo "Заполнены не все поля.";
}
} else {
echo "Ошибка записи в файл '" . $file . "'.";
}
?>
|
http://www.softtime.ru/info/task.php?id_article=73 | |
|
|
|
|
|
|
|
для: SoftTime
(05.02.2006 в 00:03)
| | Не проверяется на существование файл, вместо этого выдаёт "Ошибка чтения файла 'data.txt'. ", хотя в условии задачи сказано, что пустых полей не должно быть они должны всегда быть заполнены, например, текущей датой. Ввёл дату
не записывает - пишет "Ошибка записи в файл 'data.txt'.", кроме того дата хранится не в UNIXSTAMP - хотя это промышленный стандарт. Вот 12 скриптов - как обеспечить их совместимость когда все свой формат изобретают? Единственный способ использовать UNIXSTAMP - он известен всем программистам. | |
|
|
|
|
|
|
|
для: SoftTime
(05.02.2006 в 00:03)
| | Ничего личного, это только мое скромное мнение. Вы вправе не согласится с ним, и я тоже могу ошибаться.
1. Компактно, хорошо читается.
2. Не сразу понятно в каком виде храниться данные, можно было написать комментарий в первом файле.
3. s_readable($file) is_writable($file), дополнительная проверка не помешает - хорошо.
4. checkdate - забыл про эту функцию, неплохая проверка.
В целом положительно :) | |
|
|
|
|
|
|
|
для: Artem S.
(06.02.2006 в 09:26)
| | Ответ 007
<br /><b>Notice</b>: Undefined variable: date in <b>x:\home\uch.ru\www\index.php</b> on line <b>25</b><br />
|
Вот так почему то были заполнены все поля формы
Я так понял что скрипт будет работать только при наличии файла дата.тхт | |
|
|
|