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

Форум PHP

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

 

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

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

тема: ***** ЗАДАЧА N1 ***** (продолжение)
 
 автор: cheops   (30.01.2006 в 18:31)   письмо автору
 
 

Это продолжение темы http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=12314. Продолжаем обсуждение.

PS Мне все ответы очень понравились, сразу видно, что участники очень серьёзно подошли к вопросу, и подключили весь свой опыт - имеются решения и с блокировкой файлов и предотвращением попытки ввода символов = и перевода строки.

   
 
 автор: Guestos   (30.01.2006 в 18:45)
 
   для: cheops   (30.01.2006 в 18:31)
 

Prosta Cool !!

ne pozhalel na reshenie 1,5 chasa...

vremy budet mozh tozhe che pridumau i prishlu...

   
 
 автор: cheops   (30.01.2006 в 18:49)   письмо автору
 
   для: cheops   (30.01.2006 в 18:31)
 

Мой бы ответ наверное выглядел бы следующим образом
HTML-форма
<form action=script1.php method=post> 
  <input type=text name=text1><br> 
  <textarea name=text2></textarea><br> 
  <input type=submit value="Записать">
</form>

и обработчик
<?php 
  
// Если не включены магические кавычки - экранируем символы
  
if (!get_magic_quotes_gpc())
  {
    
$text1 addcslashes($_POST['text1'], "\0..\37!@\177..\377");
    
$text2 addcslashes($_POST['text2'], "\0..\37!@\177..\377");
  } 
  
// Удаляем символы =, так как они реально могут помешать
  // при последующем разборе
  
$text1 str_replace("=","",$text1);
  
$text2 str_replace("=","",$text2);
  
// Открываем файл
  
$fp fopen("data.txt""a");
  
// Осуществляем дозапись
  
fwrite($fp"$text1=$text2\r\n");
  
// Закрываем файл
  
fclose($fp);
  
// Автоматический переход на главную страницу форума
  
echo "<HTML><HEAD>
        <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.html'>
        </HEAD></HTML>"
;
?>

PS Удаление символов = я может быть и забыл бы, если бы не видел предыдущих ответов.

   
 
 автор: СерегаВЕБ   (30.01.2006 в 21:19)   письмо автору
 
   для: cheops   (30.01.2006 в 18:49)
 

А зачем писать вот эту здоровую штуку:

echo "<HTML><HEAD> 
        <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.html'> 
        </HEAD></HTML>";

Которая сработает не при всяких настройках браузера и которую, как я слышал, не любят поисковые системы, когда можно написатьэто в заголовке:

header("Location: index.html");

   
 
 автор: cheops   (31.01.2006 в 02:47)   письмо автору
 
   для: СерегаВЕБ   (30.01.2006 в 21:19)
 

Иногда появляется соблазн поставить что-то перед этим выводом, при использовании header() придётся буфферизировать информацию и код начнёт пухнуть, хотя конечно использование META-тэга не бог весть какое красивое решение.

   
 
 автор: neudor   (30.01.2006 в 22:49)   письмо автору
 
   для: cheops   (30.01.2006 в 18:49)
 

Предлагаю вот такую изящную фильтрацию нежелательных символов:

<?php
function safe_text($string)
{
    
$trans=array(
        
'\r\n' => '*#!new_line!#*',
        
'\n\r' => '*#!new_line!#*',
        
'\n'   => '*#!new_line!#*',
        
'='    => '*#!equals!#*'
    
);
    
    return 
strtr($string$trans);
}
?>


а файл открывать с флагом "at" - тогда новую строку можно записать просто как "\n", вне зависимости от ОС.

   
 
 автор: Саня   (31.01.2006 в 00:57)   письмо автору
 
   для: neudor   (30.01.2006 в 22:49)
 

/* просматривая мануал */ А откуда вы взяли флаг "t"?

   
 
 автор: Саня   (31.01.2006 в 02:10)   письмо автору
 
   для: Саня   (31.01.2006 в 00:57)
 

Ах, да! Вот выдержка из мануала:
Замечание: Разные семейства операционных систем имеют разные соглашения относительно окончанийя строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильный(-ые) символ(ы) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh используют \r в качестве символа конца строки. 

Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы "смешно выглядят". 

Windows предлагает флаг режима текстовой трансляции ('t'), который автоматически переведёт \n во время работы с файлом...

Какой же я невнимательный :)

   
 
 автор: FatBoy   (31.01.2006 в 00:29)   письмо автору
 
   для: cheops   (30.01.2006 в 18:31)
 

> Претензии на то что скрипт не учитывает переводы строк, и много чего еще не учитывает считаю не правомерными
> В условиях задачи ничего не говорится о том, чтобы обходить такие ньюансы как переводы строк и знаки равно.

==>прочтите условия задачи<==
Во-первых, про переводы строк сказано "скрипт заносит занные в файл ПОСТРОЧНО", а не просто абы-как, да и в примечании указан пример.
Во-вторых, по поводу знака "=" - это уже та самая фишка, которую надо было "просечь". Это же не просто "задача сама по себе". Ну представьте перед вами возникла похожая необходимость, и вы "для себя" решили изпользовать этот разделитель и не учли бы возможность написания его в тексте (не так часто он встречается), потом ловили бы ошибки непонятные.
А вот третий момент "про незаполненные поля" участники переосмыслили очень оригинально. Вот про это в условии ДЕЙСТВИТЕЛЬНО ничего не было сказано (специально). Поля могут не быть заполнены. И пинать за это человека обратно наверное не стоило. Наверно и <none> писать в файл тоже не стоило, хотя мысль сразу видно (!) работает.

По этим скриптам, честно говоря, реально ВИДНО (!!!) как человек думал над задачей.

Четвертое. "Существование файла" - заметили и среагировали ВСЕ. По-разному, но правильно у всех. Плохо или хорошо делать проверку, или надо сразу создавать с параметром "а" вопрос спорный (каждый кушает той рукой, которой ему удобно).
А вот на пятое надо было тоже обратить небольшое внимание. "Замена тэгов, скриптов" наверно не помешала бы (хоть это и не ошибка).

   
 
 автор: cheops   (31.01.2006 в 02:45)   письмо автору
 
   для: FatBoy   (31.01.2006 в 00:29)
 

>А вот на пятое надо было тоже обратить небольшое внимание.
>"Замена тэгов, скриптов" наверно не помешала бы (хоть это и
>не ошибка).
Это как правило стараются при выводе сделать, а файле хранить информацию "как есть", чтобы было удобно редактировать (кстати, тоже идея для задачи, редактирование отдельных строк имеется ввиду).

   
 
 автор: FatBoy   (31.01.2006 в 03:38)   письмо автору
 
   для: cheops   (31.01.2006 в 02:45)
 

Еще раз взгляните на решения и давайте проголосуем за наилучшее и самое удачное.
Каждому дайте свою оценку по системе:
ЗА ПОНЯТНОСТЬ КОДА: (0-ничего не разберешь, 1-нормально, 2-все сразу видно)
ЗА ПОДМЕЧЕННЫЕ ТОНКОСТИ: (от 0 до 5)
ЗА ОРИГИНАЛЬНОСТЬ: (от 0 до 5)

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

   
 
 автор: Panker   (31.01.2006 в 13:46)   письмо автору
 
   для: FatBoy   (31.01.2006 в 03:38)
 

Всё конечно хорошО! но я не вижу тут своего варианта!!!!!!!

   
 
 автор: FatBoy   (31.01.2006 в 14:19)   письмо автору
 
   для: Panker   (31.01.2006 в 13:46)
 

Кто не нашел свое решение здесь, смотрите:
***** ЗАДАЧА 1 ***** (еще решения посмотрите)

http://softtime.ru/forum/read.php?id_forum=1&id_theme=12404&page=1

   
 
 автор: cheops   (31.01.2006 в 14:35)   письмо автору
 
   для: FatBoy   (31.01.2006 в 03:38)
 

За понятность кода, к сожалению нельзя объективно поставить оценку, так как синтаксис и структура кода здорово нарушается почтовиком - оценить это невозможно. Может всё таки решения принимать в текстовых файлах? Я вчера был вынужден править все 6 задания первой темы, чтобы они хотя бы рабочими стали (длинные комментарии обрезаются и переводятся на другую строку).

   
 
 автор: FatBoy   (31.01.2006 в 14:49)   письмо автору
 
   для: cheops   (31.01.2006 в 14:35)
 

А я специально говорю: оценки ставим СУБЪЕКТИВНЫЕ (понял - 2, не понял - 0)
Да уж, с комментариями возникли сложности. (при проверках правил, а когда выкладывал брал копии прямо из почтовика. Неужели это так действительно? Наверно надо будет все-таки аттачить. Но это уже решим в третьей задаче.

   
 
 автор: cheops   (31.01.2006 в 15:02)   письмо автору
 
   для: FatBoy   (31.01.2006 в 14:49)
 

Это в принципе не имело бы значения при оценке, но люди от сюда будут брать код для своих задач и нужно чтобы код хотя бы запускался без синтаксических ошибок.

   
 
 автор: Саня   (31.01.2006 в 14:38)   письмо автору
 
   для: FatBoy   (31.01.2006 в 03:38)
 

Решение 001-001:
Понятность: 2
Тонкости: 3
Оригинальность: 3

Комментарий:
Условие задачи ("...который заносит построчно в файл...") выполнено отлично. Даже если в textarea будут переводы строк, они заменятся на пробел. Плохо то, что не отмечены некоторые тонкости, и скрипт заточен для win.

Решение 001-002:
Понятность: 2
Тонкости: 4
Оригинальность: 3

Комментарий:
Понравилась идея с блокировкой файла. Перенаправление мета-тегами (да ещё через 3 секунды) - неудачное решение. Ошибки лучше выводить в окно с формой.

Решение 001-003:
Понятность: 1
Тонкости: 3
Оригинальность: 2

Комментарий:
Проверка на пустоту полей - лишняя. Ошибки лучше выводить в окне с формой. Понравилась тонкость с открытием файла в режиме трансляции.

Решение 001-004:
Понятность: 1
Тонкости: 2
Оригинальность: 0

Комментарий:
Сессии - хорошая штука, но не здесь. Зато ошибки выводятся там, где надо.

Решение 001-005:
Понятность: 1
Тонкости: 0
Оригинальность: 1

Комментарий:
Опять ошибка с ошибкой :). Редирект на JS - неудачное решение, зато не такое, как у всех. Никаких тонкостей не отмечено.

Решение 001-006:
Понятность: 2
Тонкости: 0
Оригинальность: 4

Комметарий:
Аскетично, но ни одной тонкости не подмечено. При записи данных в файл, все данный будут записаны в одну строку.

Решение 001-007:
Понятность: 2
Тонкости: 2
Оригинальность: 4

Комментарий:
Коротко и ясно, в стиле шестого решения. Однако отмечено больше тонкостей, чем в том же шестом.

Решение 001-008:
Понятность: 0
Тонкости: 5
Оригинальность: 0

Комментарий:
Подмечены все тонкости, однако реализация оставляет желать лучшего.

Решение 001-009:
Понятность: 2
Тонкости: 1
Оригинальность: 3

Комментарий:
Копия шестого листинга, однако с некоторыми подмеченными тонкостями.

Общий комментарий:
Я удивлён! Сколько разных решений существует для простой задачи! :) Понравились ВСЕ работы (даже восьмая). Я узнал, не скажу что много нового, но всё же есть некоторые моменты, о которых я не знал до сего момента.

   
 
 автор: FatBoy   (31.01.2006 в 14:58)   письмо автору
 
   для: Саня   (31.01.2006 в 14:38)
 

Спасибо огромное!
Вот чего хотелось бы увидеть еще раз 6-8.

> Я узнал, не скажу что много нового, но всё же есть некоторые моменты, о которых я не знал до сего момента.
Вот именно ради этого и затевались эти задачи. Лично я РАД.

   
 
 автор: cheops   (31.01.2006 в 14:56)   письмо автору
 
   для: FatBoy   (31.01.2006 в 03:38)
 

N понят тонкс ориги
1   3     2     1
2   3     3     3
3   3     4     5
4   1     2     4
5   2     2     2
6   3     1     5ком
7   3     2     3
8   0     5     5
9   3     1     5ком

В разделе тонкости добавлял бал, тому кто использовал блокировку, оценки помеченные "ком" - субъективные, не мог удержаться поставить 5 баллов за компактность и простоту решения. Всех больше на меня впечатление произвёл скрипт 8, поэтому за оригинальность и проделанную работу поставил 5, за читабельность 0, хотя читабельность у скипта вполне сносная и объективно тянет где-то на 1-2, просто слишком громоздко, поэтому оценка тоже субъективная.

   
 
 автор: FatBoy   (31.01.2006 в 15:03)   письмо автору
 
   для: cheops   (31.01.2006 в 14:56)
 

ОООООООО!!!!!!!
Все пишут в стиле cheopsa, но приведите кратенькие комментарии к решениям как у Сани.
Ну или чего еще сами придумайте.

   
 
 автор: cheops   (31.01.2006 в 15:11)   письмо автору
 
   для: FatBoy   (31.01.2006 в 15:03)
 

Ок, личные комментарии вечером выложу. Просто в таком виде проще сравнивать.

   
 
 автор: Panker   (31.01.2006 в 18:26)   письмо автору
 
   для: cheops   (31.01.2006 в 15:11)
 

вот всё нашел свой вариант! Вс ё жду результатов )

   
 
 автор: Panker   (31.01.2006 в 18:33)   письмо автору
 
   для: Panker   (31.01.2006 в 18:26)
 

нашел потерял нашел потерял что то я запутался ! соррИ! прост окак то тупа что решения то там то тут )) кстати я на мыло тому кто конкурс делает отсылал второй вариант но первый сюда пошел )) а там уже понятно где мой вариант )) ступил! когда доме тестил забыл 1 строку поменять )

   
 
 автор: Panker   (31.01.2006 в 19:32)   письмо автору
 
   для: Panker   (31.01.2006 в 18:33)
 

Насчёт понятности тут не понятнО! допустим крутому перцу будет всё понятно но он будет предсстовлять себя чайником но в тоже время будет думать что НУ ЭТО ДАЖЕ ЧАНИК ЗНАЕТ! а чайник сидит и думает! ну я то не чайник это знаю! хотя на самом дели не допонимает =) вроде так! а 9 вариант там чайник разберётся! все остальные накручены силно! всё что в 9 варианте всё написано на первых страницах любова учебника =) а всё что другое везде ил ипроверки или ещё что то корчое вот так вот =)

   
 
 автор: FatBoy   (01.02.2006 в 10:54)   письмо автору
 
   для: Panker   (31.01.2006 в 19:32)
 

Ну так напишите оценки, а то задержка как бы выходит. 2 человека - это не жюри. Еще хотя бы 2-3. (и не забывайте про ЗАДАЧУ 2. Она хоть и на базе первой, но вывод тоже важен!)

   
 
 автор: PantiL   (01.02.2006 в 12:03)   письмо автору
 
   для: FatBoy   (01.02.2006 в 10:54)
 


<?
Решение 001
-001
Понятность кода 
2
Тонкости 
2
Оригинальность 
0
/*Нет смысла менять символы конца строки на пробелы.
Они запишутся в файл не искажая его структуру. 
Нет смысла делать проверку на существование файла.
При формировании строки перед записью в файл, к
строке не добавлен символ конца строки */

Решение 001-002
Понятность кода 
2
Тонкости 
3
Оригинальност 
3
/*Опять же проверка существования файла - не нужно
Но зато применена htmlspecialchars, хотя и лучше ее применить при выводе данных*/

Решение 001-003
Понятность кода 
1
Тонкости 
5
Оригинальность 
5
/*Столь высока оценкая омрачается громоздкостью кода*/ 

Решение 001-004
/*No coments - это мое судить не буду (хотя стыдно, не до думал все до конца)*/

Решение 001-005
Понятность 
2
Тонкости 
3
Оригинальность 
4
/*Нечего сказать - неплохо*/

Решение 001-006
Понятность 
2
Тнокости 
0
Оригинальность 
5
/*Оригинальность заключается в том, что этот участник
 в отличичи от других не решил выпендриться, а сделал все простенько, за это ему 5 :)
 Неправильные коментарии в HTML*/
 
Решение 001-007
Понятность 
2
Тонкости 
0
Оригинальность 
1
/*Все кратко и простенько. Зачем проверять существование данных функцией isset?
Она вернет true даже если данные будут пустые, надо бы проверять empty*/ 

Решение 001-008
Понятность 
0
Тонкости 
0
Оригинальность 
5
/*Ужасно большой код. (Надо ввести такую номинацию - за самый длинный код)
Понятность - 0 потому что даже понимать ничего не захотелось. Тонкости - 0
, а что еще мог поставить если я даже ничего не пытался там понять. Ну и хит 
сезона Оригинальность - все наверное заметили как это решение отличается от  других :)*/

Решение 001-009
Понятность 
2
Тонкости 
0
Оригинальноть 
1
/*Хорошее кратенькое решение, но оценка не высока (А по комментариям я даже определил автора)
У него особенный стиль написания комментов :)*/
?>

   
Rambler's Top100
вверх

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