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

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

 

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

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

тема: Ответ 013 на задачу N3
 
 автор: udaf   (06.02.2006 в 01:18)   письмо автору
 
 

Я отправил письмо вовремя и уехал отдыхать на выходные и вот только сейчас я обнаружил что надо еще добавлять свой ответ по ссылке из другого форума сюда
Пожалуйста очените мой код

<?php
// скрипт index.php к задаче N3 
// <b>udaf</b> 
//проверка существует ли файл даты а также не пуст ли он
if((filesize("data.txt")==0)||!file_exists("data.txt"))
{
    
//формирование фремени
    
$year=date("Y");
    
$mounth=date("m");
    
$day=date("d");
    
$hour=date("H");
    
$minit=date("i");
    
//форма, куда подставляеся значение текущего времени
    
echo("<form action=script2.php>");
    echo(
"год<input type=text name=year value=".$year."><br>");
    echo(
"месяц<input type=text name=mounth value=".$mounth."><br>");
    echo(
"день<input type=text name=day value=".$day."><br>");
    echo(
"час(ы)<input type=text name=hour value=".$hour."><br>");
    echo(
"минуты<input type=text name=minit value=".$minit."><br>");
    echo(
"<input type=submit>");
    echo(
"</form>");
}
//если файла не существует
else
{
    
//открытие фацла
    
$data_file=fopen("data.txt","r");
    
//чтение строки из файла
    
$file_string=fgets($data_file );
    
//поиск с помощью рег выражения в ней
    
preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2})/i"$file_string$dates);
    
//в эту форму заносятся результаты поиска в рег выражении
    
echo("<form action=script2.php>");
    echo(
"год<input type=text name=year value=".$dates[1]."><br>");
    echo(
"месяц<input type=text name=mounth value=".$dates[2]."><br>");
    echo(
"день<input type=text name=day value=".$dates[3]."><br>");
    echo(
"час(ы)<input type=text name=hour value=".$dates[4]."><br>");
    echo(
"минуты<input type=text name=minit value=".$dates[5]."><br>");
    echo(
"<input type=submit>");
    echo(
"</form>");
    
//закрываем файл
    
fclose($data_file);
}
//end
?>


<?php
// скрипт script2.php к задаче N3
//простая проверка существования всех переменных
if($year && $mounth && $day && $hour && $minit)
{
    
//еще одна простая проверка, но уже проверяет чтобы переменные лежали в допустимом диапазоне(мщй др)
    
if(!preg_match("/([0-9]{4})/",$year)) $year="1987";
    if(!
preg_match("/([0-9]{1,2})/",$mounth)) $mounth="06";
    if(!
preg_match("/([0-9]{1,2})/",$day)) $day="18";
    if(!
preg_match("/([0-9]{1,2})/",$hour)) $hour="17";
    if(!
preg_match("/([0-9]{1,2})/",$minit)) $minit="37";
    
//удаление файла с датой(так проше)
    
unlink("data.txt");
    
$data_file=fopen("data.txt","a");
    
//формирование строки для записи(я думаю никакая фильтрация тут не нужна)
    
$string_to_write=$year."-".$mounth."-".$day." ".$hour.":".$minit;
    
//при успешной записи
    
if(fwrite($data_file$string_to_write))
    {
        
//закрываем файл
        
fclose($data_file);
        
//заголовок на ридерект
        
header("Location: index.php");
    }
    else 
fclose($data_file);
}
else 
header("Location: index.php");
?>

   
 
 автор: cheops   (06.02.2006 в 13:16)   письмо автору
 
   для: udaf   (06.02.2006 в 01:18)
 

Нет проверки на существование файла date.txt и если файл не существует - запись производится не корректно и выводит предупреждение
Warning: filesize() [function.filesize]: stat failed for data.txt in d:\main\test2\index.php on line 5

К достоинствам следует отнести компактность, особенно код проверки.

   
 
 автор: Artem S.   (06.02.2006 в 18:36)   письмо автору
 
   для: udaf   (06.02.2006 в 01:18)
 

1. if((filesize("data.txt")==0)||!file_exists("data.txt"))
Логичнее все же
if (!file_exists("data.txt")||(filesize("data.txt")==0))
2. Лишние "телодвижения" с формой. Это увеличивает код. Все же ее нужно выводить в одном месте.
3.
unlink("data.txt");
$data_file=fopen("data.txt","a");
заменяется за
$data_file=fopen("data.txt","w");
4. В целом достаточно компактно.

   
 
 автор: PantiL   (06.02.2006 в 22:11)   письмо автору
 
   для: Artem S.   (06.02.2006 в 18:36)
 

Ответ 013
Нет проверки на существование файла

Warning: filesize() [function.filesize]: stat failed for data.txt in x:\home\uch.ru\www\index.php on line 5

И еще 
Notice: Undefined variable: year in x:\home\uch.ru\www\script2.php on line 4
У меня регистр глобалс=офф :( скрипт не работает

   
 
 автор: udaf   (07.02.2006 в 00:56)   письмо автору
 
   для: PantiL   (06.02.2006 в 22:11)
 

Я считаю что тут и должны использоватся глобальные переменные т. к.
1) скрипт написан в целях обучения
2) от использование суперглобальных массивов код не приобретет ни капли безопастности

   
 
 автор: PantiL   (07.02.2006 в 11:48)   письмо автору
 
   для: udaf   (07.02.2006 в 00:56)
 

Безопасноти нет, зато сколько универсальности :)

   
 
 автор: Artem S.   (07.02.2006 в 13:44)   письмо автору
 
   для: udaf   (07.02.2006 в 00:56)
 

> 2) от использование суперглобальных массивов код не приобретет ни капли безопастности
1) как раз наоборот. Безопасность повышается.
2) понятно будет что данные пришли из формы, а не из другого файла (который нужно еще найти). Т.е. повышается прозрачность кода.

   
 
 автор: udaf   (08.02.2006 в 01:09)   письмо автору
 
   для: Artem S.   (07.02.2006 в 13:44)
 

>> 2) от использование суперглобальных массивов код не
>приобретет ни капли безопастности
>1) как раз наоборот. Безопасность повышается.
>2) понятно будет что данные пришли из формы, а не из другого
>файла (который нужно еще найти). Т.е. повышается
>прозрачность кода.
тут я не совсем понял ведь можно же создать у себя на компютере форму с методом передачи post и передовать что вздумается или просто передовать серверу заголовки вручную

   
 
 автор: cheops   (08.02.2006 в 02:26)   письмо автору
 
   для: udaf   (08.02.2006 в 01:09)
 

Зато из cookie вы уже перезаписать $_POST не сможете и можно не проверять сунули что-нибудь в cookie или нет.

   
Rambler's Top100
вверх

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