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

Форум PHP

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

 

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

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

тема: ***** ЗАДАЧА 1 ***** (еще решения посмотрите)
 
 автор: FatBoy   (31.01.2006 в 10:34)   письмо автору
 
 

Не все успели отписаться в такие сжатые сроки, поэтому выкладываю на просмотр (не зря же решали) еще оставшиеся (наверно надо давать на решение полные сутки).

   
 
 автор: FatBoy   (31.01.2006 в 10:37)   письмо автору
 
   для: FatBoy   (31.01.2006 в 10:34)
 


<!-- Решение 001-007 -->
<html>
<head>
<title>Решение задачи ?1</title>
<meta http-equiv="Content-Ttype" content="text/html; charset=windows-1251">
</head>
<body>
<form name="frm_addfile" action="script1.php" method="post">
Введем текст1:<br>
<input type="text" name="text1"><br>
Введем текст2:<br>
<textarea name="text2"></textarea><br>
<br>
<input type="submit" name="sbm_add" value="add">
</form>
</body>
</html>



<?php
//без комментариев все предельно просто
if(isset($_POST["sbm_add"]) &&
isset(
$_POST["text1"]) && isset($_POST["text2"]))
{
 
$fp=fopen("data.txt""a+");
 
fwrite($fp$_POST["text1"] . "=" .
$_POST["text2"] . "\r\n");
 
fclose($fp);
 
header("Loaction index.html");
}else{
 
header("Loaction index.html");
}
?>

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

Почтовый агент резко нарушает синтаксис и форматирование - наверное всё-таки придётся принимать текстовые файлы.

   
 
 автор: FatBoy   (31.01.2006 в 10:48)   письмо автору
 
   для: FatBoy   (31.01.2006 в 10:34)
 


<!-- index.html -->
<!-- Задача N1 -->
<!-- Решение 001-008 -->
<html>
<head><title>Задача N1</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<br>
<table width="40%" cellspacing="1" cellpadding="1" bgcolor="#34c5ff"  align="center" style="font : bolder 14px 'Sans Serif';">
<!-- указываем метод передачи данных и файл обработчик -->
<form name="zadacha_1_demo" action="script1.php" method="post">
<tr><td width="40%"><hr></td></tr>
<!-- сообщаем пользователю как обрабатываются его данные -->
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#017416">Разрешнные символы:</font></td></tr>
<tr><td>&nbsp;&nbsp;Все буквы русского и латинского алфавитов,</td></tr>
<tr><td>&nbsp;&nbsp;А также цифры и некоторые символы.</td></tr>
<tr><td>&nbsp;&nbsp;Если какие то символы исчезнут из</td></tr>
<tr><td>&nbsp;&nbsp;Вашего сообщения, значит они представляли</td></tr>
<tr><td>&nbsp;&nbsp;Опасность для данного приложения и были удалены</td></tr>
<tr><td>&nbsp;&nbsp;Из отправляемых вами данных.</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font 
color="#017416">Ограничения:</font></td></tr>
<tr><td>&nbsp;&nbsp;Длинна темы сообщения 70 символов.</td></tr>
<tr><td>&nbsp;&nbsp;Длинна тела сообщения 400 символов.</td></tr>
<tr><td width="40%"><hr></td></tr>
<tr><td align="center"><font color="red">Все поля для заполнения обязательны !</font></td></tr>
<tr><td width="40%"><hr></td></tr>
<tr><td>&nbsp;</td></tr>
<!-- Ограничиваем вместимость поля темы сообщения в 70 символов -->
<tr><td>&nbsp;&nbsp;Тема сообщения:&nbsp;<input type="text" name="text"  size="32" maxlength="70"></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="left">&nbsp;&nbsp;Тело сообщения:</td></tr>
<tr><td><textarea cols="43" rows="8" name="textarea"></textarea></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center"><input type="submit" name="rec_mess"  
value="Записать данные в файл" style="background-color:  
#192FBE;font-family: Courier New;font : bolder 12px 'Sans Serif';cursor :  
hand;height : 18px;color: #FFFFFF;"></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
</table><br>
<center>
<a style='color:#02A11F' href='script1.php?action=view'><font  size='2px'><b><u>показать
результат</u></b></font></a>
</center>
</body>
</html>



<?php
##################   файл script1.php [ задача N1 с www.softtime.ru ]    
##################
// выводим мета-заголовок указывающий кодировку символов
echo "<meta http-equiv=\"Content-Type\" content=\"text/html;  charset=windows-1251\"\n>";
echo 
"<title>Обработчик script1.php</title>\n";
// заводим переменную с мета-заголовком перенаправления на страницу  index.html
// с задержкой в 5 секунд
$_back_refresh "<meta http-equiv='Refresh' Content='5;  URL=index.html'>\n";
// заводим массив сообщений
$_verbose = array(
"Поле для темы сообщения не должно быть пустым !",
"Поле для сообщения не должно быть пустым !",
"Ваше сообщение записано в файл data.txt !",
"Файла data.txt не существует, записей не производилось !",
"Нет ниодного записанного сообщения !",
"Неверный запрос !"
);
// заводим переменную содержащую ссылку на индексную страницу
$link "<br><br><br><a style='color:#02A11F' href='index.html'><font  
size='2px'><b><u>вернуться назад</u></b></font></a>"
;
/*
  если пользователь пришл по ссылке 'показать результаты',
  или если переменная типа GET с именем 'action' передана обработчику
  проверяем чтоб она была равна 'view', иначе завершаем работу
  скрипта
*/
if(isset($_GET['action'])){
if(
trim($_GET['action']) == "view"){
// проверяем существует ли файл 'data.txt'
if(!file_exists("data.txt")){
// выводим тэги новой строки чтоб сообщения печатались ближе к центру  экрана
echo "<br /><br /><br /><br /><br /><br
/><br /><br /><br /><br /><br  
/><br /><br /><br /><br /><br />\n"
;
echo 
$_back_refresh;
echo 
"<center>";
echo 
$_verbose[3];
echo 
$link;
echo 
"</center>";
exit;
}
// устанавливаем число не пустых строк в файле 'data.txt' равное 0
$_count_lines 0;
// файл в массив
$fl_arr file("data.txt");
// считаем не пустые строки в файле , увеличиваем $_count_lines
// на единицу если такие имеются и выходим из цикла
foreach($fl_arr as $_content){ if($_content !== "\n" &&
$_content !==  "\r\n"){ $_count_lines+=1; break; } }
// если все строки пусты выходим и сообщаем об этом пользователю
if($_count_lines == 0){
// выводим тэги новой строки чтоб сообщения печатались ближе к центру  экрана
echo "<br /><br /><br /><br /><br /><br
/><br /><br /><br /><br /><br  
/><br /><br /><br /><br /><br />\n"
;
echo 
$_back_refresh;
echo 
"<center>";
echo 
$_verbose[4];
echo 
$link;
echo 
"</center>";
exit;
}
// в противном случае подготавливаем данные из файла к выводу в броузер
else{
echo 
"<br><br><center>";
foreach(
$fl_arr as $_content){
if(
$_content !== "\n" && $_content !== "\r\n"){
// разделяем строки символом '='
$_paty explode("="$_content);
// меняем экранированые кавычки на нормальные
$_paty[0] = str_replace('\"''"'$_paty[0]);
$_paty[0] = str_replace("\'""'"$_paty[0]);
// меняем '[RAVNO]' на '='
$_paty[0] = str_replace("[RAVNO]""="$_paty[0]);
$_paty[1] = str_replace('\"''"'$_paty[1]);
$_paty[1] = str_replace("\'""'"$_paty[1]);
$_paty[1] = str_replace("[RAVNO]""="$_paty[1]);
// выводим сообщения в броузер
// Извеняйте некогда замарачиваться с красотой вывода...
echo "<b>Тема :</b> ".$_paty[0]."<br>";
echo 
"<b>Сообщение:</b><br>".$_paty[1]."<br><br>";
  }
}
echo 
$link;
echo 
"</center>";
exit;
  }
}
// если нам что то подсунули не то в Гет параметры сообщаем об этом, и  переходим на индекс
else{
echo 
"<br /><br /><br /><br /><br /><br
/><br /><br /><br /><br /><br  
/><br /><br /><br /><br /><br />\n"
;
echo 
$_back_refresh;
echo 
"<center>";
echo 
$_verbose[5];
echo 
$link;
echo 
"</center>";
exit;
  }
}
// если нажата кнопка записать в файл - обрабатываем данные
elseif(isset($_POST['rec_mess'])){
// выводим тэги новой строки чтоб сообщения печатались ближе к центру  экрана
echo "<br /><br /><br /><br /><br /><br
/><br /><br /><br /><br /><br  
/><br /><br /><br /><br /><br />\n"
;
// определяем переменные и обрабатываем их
// обрабатываем поле 'тема'
$_theme $_POST['text'];
// удаляем html и php тэги
$_theme strip_tags($_theme);
// заменяем двойной пробел на одиночный
$_theme str_replace("  "" "$_theme);
// вырезаем '[RAVNO]'
$_theme str_replace("[RAVNO]"""$_theme);
// заменяем '=' на значение '[RAVNO]'
$_theme str_replace("=""[RAVNO]"$_theme);
// удаляем перевод строки
$_theme str_replace("\n"""$_theme);
// обрубаем длинну наверняка
$_theme substr($_theme,0,70);
// 'обжимаем' тему, или удаляем пробелы с конца и начала
$_theme trim($_theme);

// примерно тоже самое проделываем с самим сообщением
$_message $_POST['textarea'];
$_message strip_tags($_message);
$_message str_replace("  "" "$_message);
$_message str_replace("[RAVNO]"""$_message);
$_message str_replace("=""[RAVNO]"$_message);
// заменяем два перевода строки на один
$_message str_replace("\r\n\r\n""\r\n"$_message);
$_message str_replace("\n\n""\n"$_message);
// заменяем перевод строки на html-ный
$_message str_replace("\r\n""<br>"$_message);
$_message str_replace("\n""<br>"$_message);
// удаляем символы табуляции
$_message str_replace("\t"""$_message);
$_message substr($_message,0,400);
$_message trim($_message);

// если значение поля 'тема' пуста - сообщаем об этом, и выходим  перенаправляя
// пользователя обратно на индекс
if(empty($_theme)){
echo 
$_back_refresh;
echo 
"<center>";
echo 
$_verbose[0];
echo 
"</center>";
exit;
}
// если значение поля 'тело сообщения' пусто - сообщаем об этом, и выходим  перенаправляя
// пользователя обратно на индекс
elseif(empty($_message)){
echo 
$_back_refresh;
echo 
"<center>";
echo 
$_verbose[1];
echo 
"</center>";
exit;
}
// если вс ок записываем в файл
else{
// проверяем существует ли файл, если да - то флаг открытия быдет 'a' -  дозапись
// если нет тогда 'w' - перезапись, создание
if(file_exists("data.txt")){ $flag_rc "a"; }
else { 
$flag_rc "w"; }
// открываем файл с определнным выше флагом
$rc_file fopen("data.txt"$flag_rc);
// применяем функцию блокировки файла с флагом записи
flock($rc_fileLOCK_EX);
// записываем в файл данные
fputs($rc_file"$_theme=$_message\n");
// снимаем блокировку
flock($rc_fileLOCK_UN);
// закрываем дескриптор указывающий на файл
fclose($rc_file);
// сообщаем что запись состоялась и перенаправляем на индекс
echo $_back_refresh;
echo 
"<center>";
echo 
$_verbose[2];
echo 
"</center>";
exit;
  }
}
// если ничего такого что мы ждм не пришло - перенаправляем на индекс и  выходим
else{ echo $_back_refresh; exit; }
?>


PS от FatBoy: Пожалуйста!!!! НЕ НАДО писать в решение задач то, без чего можно обойтись! всякие "<br /><center><b><font><style>" не улучшат решение.

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

Очень громоздко, но зато оформлено всё очень хорошо.
Проверки вида
<?php
$_message 
str_replace("  "" "$_message);
?>

не являются универсальными, здесь лучше использовать регулярные выражения вроде
$_message = preg_replace("|[ ]+|", " ", $_message);

   
 
 автор: neudor   (31.01.2006 в 14:55)   письмо автору
 
   для: cheops   (31.01.2006 в 14:25)
 

->регулярные выражения
Немного оффтопа: а где бы взять хороший справочник как их использовать. Это - большое белое пятно в моих познаниях PHP.
Дайте ссылочку.

   
 
 автор: cheops   (31.01.2006 в 15:05)   письмо автору
 
   для: neudor   (31.01.2006 в 14:55)
 

Необходимо обязательно достать книгу Регулярные выражения (Дж. Фридл.).

   
 
 автор: nataliaa   (31.01.2006 в 19:41)   письмо автору
 
   для: neudor   (31.01.2006 в 14:55)
 

neudor, поищите здесь... я здесь скачала электронную версию...
http://internet-technologies.ru/

более точную ссылку не записала - так что придется поискать...раскрывайте ссылки книг по PHP - где-нибудь попадется, как мне попалась!

   
 
 автор: FatBoy   (31.01.2006 в 10:50)   письмо автору
 
   для: FatBoy   (31.01.2006 в 10:34)
 


<!-- index.html -->
<!-- Задача N1 -->
<!-- Решение 001-009 -->
<style>
textarea { border: 1px dashed Silver; }
input { border: 1px dashed Silver; }
</style>
<form  action="script1.php" method="post" >
<input type="text" name="val1" size="20"><br>
<textarea name="val2" rows="4" cols="20"></textarea><br>
<input type="submit"  value="Послать"></td>
</form>
<!-- end -->



<?php
//Зачем то всё что то проверяли создовали намного легче вот так вот! Просто нету ну так создаём есть так дописываем! ))
$f fopen("panker.txt""a");
//Пишем в файл данные
fputs($f$_POST['val1']."=".$_POST['val2']."\n");
//Закрываем файл Интиресно закрывать обезательно ? =))
fclose($f);
//перебрасываемся!
header("Location: index.html");
?>

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

Я больше склоняюсь к таким минималистским решениям, оно не подходит для заполнения пользователями - зато идеально для административных задач, понять что делают 4 строчки кода гораздо проще чем 50 - к концу их разбора можно забыть с чего всё начиналось. Однако пользоватеял на откуп такой скрипт отдавать нельзя.

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

Вроде договаривались просто порешать задачки. Не помочь кому-то с готовым скриптом, а именно достичь минимальной цели. Добавлять в работоспособный скрипт оформление, защиту, излишние проверки надо потом и пусть это делает тот, кому это нужно. Представьте, вы разжевали ВСЁ, сделали 7 проверок-обрезок-замен и т.д., а кто-то берёт этот готовый к употреблению (большой) скрипт и начинает ругаться, что ничего не понятно, а ему так нужно внести еще свои 4 замены и ПОЛНОСТЬЮ сменить вывод. Да он запутается в 100 строчках кода разбираться.

   
 
 автор: Panker   (31.01.2006 в 18:51)   письмо автору
 
   для: FatBoy   (31.01.2006 в 14:43)
 

минимализм круто! всё понятно как для осла короче )) и разжовывать ненадо =)

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

Согласен. Есть задача -> есть её решение. А оформление и шаги в сторону от поставленой задачи - недопустимы.

   
 
 автор: Panker   (31.01.2006 в 19:26)   письмо автору
 
   для: Саня   (31.01.2006 в 19:09)
 

Причем в 9 вариантеещё и оформление не плохое есть ))))))))))))

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

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

   
 
 автор: neudor   (02.02.2006 в 13:25)   письмо автору
 
   для: FatBoy   (01.02.2006 в 10:55)
 

Есть предложение: создать постоянное жюри, иначе мы так долго результатов не дождемся. Пусть будет человека 4-5.
Предлагаю:
FatBoy (как заваривший кашу)
cheops (как непризнанный гуру)

Остальных предложите вы, ибо я сам на форуме недавно...

   
 
 автор: P@Sol   (02.02.2006 в 13:40)   письмо автору
 
   для: neudor   (02.02.2006 в 13:25)
 

тов. Кузнецов и дизайнер

   
 
 автор: FatBoy   (02.02.2006 в 15:15)   письмо автору
 
   для: neudor   (02.02.2006 в 13:25)
 

Я вообще-то согласен оценивать всех, но не обижайтесть - со своей колокольни. Я ведь в РНР недавно и всяких выкрутасов не секу (на то cheops есть), я что попроще оценю (работает - не работает :))).

   
Rambler's Top100
вверх

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