|
|
|
| Не все успели отписаться в такие сжатые сроки, поэтому выкладываю на просмотр (не зря же решали) еще оставшиеся (наверно надо давать на решение полные сутки). | |
|
|
|
|
|
|
|
для: 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");
}
?>
|
| |
|
|
|
|
|
|
|
для: FatBoy
(31.01.2006 в 10:37)
| | Почтовый агент резко нарушает синтаксис и форматирование - наверное всё-таки придётся принимать текстовые файлы. | |
|
|
|
|
|
|
|
для: 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> <font color="#017416">Разрешнные символы:</font></td></tr>
<tr><td> Все буквы русского и латинского алфавитов,</td></tr>
<tr><td> А также цифры и некоторые символы.</td></tr>
<tr><td> Если какие то символы исчезнут из</td></tr>
<tr><td> Вашего сообщения, значит они представляли</td></tr>
<tr><td> Опасность для данного приложения и были удалены</td></tr>
<tr><td> Из отправляемых вами данных.</td></tr>
<tr><td> </td></tr>
<tr><td> <font
color="#017416">Ограничения:</font></td></tr>
<tr><td> Длинна темы сообщения 70 символов.</td></tr>
<tr><td> Длинна тела сообщения 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> </td></tr>
<!-- Ограничиваем вместимость поля темы сообщения в 70 символов -->
<tr><td> Тема сообщения: <input type="text" name="text" size="32" maxlength="70"></td></tr>
<tr><td> </td></tr>
<tr><td align="left"> Тело сообщения:</td></tr>
<tr><td><textarea cols="43" rows="8" name="textarea"></textarea></td></tr>
<tr><td> </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> </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_file, LOCK_EX);
// записываем в файл данные
fputs($rc_file, "$_theme=$_message\n");
// снимаем блокировку
flock($rc_file, LOCK_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>" не улучшат решение. | |
|
|
|
|
|
|
|
для: FatBoy
(31.01.2006 в 10:48)
| | Очень громоздко, но зато оформлено всё очень хорошо.
Проверки вида
<?php
$_message = str_replace(" ", " ", $_message);
?>
|
не являются универсальными, здесь лучше использовать регулярные выражения вроде
$_message = preg_replace("|[ ]+|", " ", $_message); | |
|
|
|
|
|
|
|
для: cheops
(31.01.2006 в 14:25)
| | ->регулярные выражения
Немного оффтопа: а где бы взять хороший справочник как их использовать. Это - большое белое пятно в моих познаниях PHP.
Дайте ссылочку. | |
|
|
|
|
|
|
|
для: neudor
(31.01.2006 в 14:55)
| | Необходимо обязательно достать книгу Регулярные выражения (Дж. Фридл.). | |
|
|
|
|
|
|
|
для: neudor
(31.01.2006 в 14:55)
| | neudor, поищите здесь... я здесь скачала электронную версию...
http://internet-technologies.ru/
более точную ссылку не записала - так что придется поискать...раскрывайте ссылки книг по PHP - где-нибудь попадется, как мне попалась! | |
|
|
|
|
|
|
|
для: 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");
?>
|
| |
|
|
|
|
|
|
|
для: FatBoy
(31.01.2006 в 10:50)
| | Я больше склоняюсь к таким минималистским решениям, оно не подходит для заполнения пользователями - зато идеально для административных задач, понять что делают 4 строчки кода гораздо проще чем 50 - к концу их разбора можно забыть с чего всё начиналось. Однако пользоватеял на откуп такой скрипт отдавать нельзя. | |
|
|
|
|
|
|
|
для: cheops
(31.01.2006 в 14:31)
| | Вроде договаривались просто порешать задачки. Не помочь кому-то с готовым скриптом, а именно достичь минимальной цели. Добавлять в работоспособный скрипт оформление, защиту, излишние проверки надо потом и пусть это делает тот, кому это нужно. Представьте, вы разжевали ВСЁ, сделали 7 проверок-обрезок-замен и т.д., а кто-то берёт этот готовый к употреблению (большой) скрипт и начинает ругаться, что ничего не понятно, а ему так нужно внести еще свои 4 замены и ПОЛНОСТЬЮ сменить вывод. Да он запутается в 100 строчках кода разбираться. | |
|
|
|
|
|
|
|
для: FatBoy
(31.01.2006 в 14:43)
| | минимализм круто! всё понятно как для осла короче )) и разжовывать ненадо =) | |
|
|
|
|
|
|
|
для: FatBoy
(31.01.2006 в 14:43)
| | Согласен. Есть задача -> есть её решение. А оформление и шаги в сторону от поставленой задачи - недопустимы. | |
|
|
|
|
|
|
|
для: Саня
(31.01.2006 в 19:09)
| | Причем в 9 вариантеещё и оформление не плохое есть )))))))))))) | |
|
|
|
|
|
|
|
для: Panker
(31.01.2006 в 19:26)
| | Ну так напишите оценки, а то задержка как бы выходит. 2 человека - это не жюри. Еще хотя бы 2-3. (и не забывайте про ЗАДАЧУ 2. Она хоть и на базе первой, но вывод тоже важен!) | |
|
|
|
|
|
|
|
для: FatBoy
(01.02.2006 в 10:55)
| | Есть предложение: создать постоянное жюри, иначе мы так долго результатов не дождемся. Пусть будет человека 4-5.
Предлагаю:
FatBoy (как заваривший кашу)
cheops (как непризнанный гуру)
Остальных предложите вы, ибо я сам на форуме недавно... | |
|
|
|
|
|
|
|
для: neudor
(02.02.2006 в 13:25)
| | тов. Кузнецов и дизайнер | |
|
|
|
|
|
|
|
для: neudor
(02.02.2006 в 13:25)
| | Я вообще-то согласен оценивать всех, но не обижайтесть - со своей колокольни. Я ведь в РНР недавно и всяких выкрутасов не секу (на то cheops есть), я что попроще оценю (работает - не работает :))). | |
|
|
|