|
|
|
| Необходимо создать небольшую динамическую страничку, которая бы показывала список людей, которые её посещали и сколько раз.
Посетитель должен иметь возможность:
а) ввести свое имя, чтобы в этот список попасть (или повторно зайти на сайт)
б) поискать другого человека, зная его точное имя.
в) нажать на ссылку в списке, чтобы удалить запись из него.
Общие требования.
Имена могут содержать абсолютно любые символы.
Хранить имена нужно в БД, в таблице следующего формата:
CREATE TABLE guests (
id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
guestname TINTEXT NOT NULL
visits INT(11) NOT NULL
);
|
Отдельные требования по пунктам
а) ввод в список. форма ввода должна отправлять данные методом POST и не дублировать вызовы при нажатии F5.
Сайт приветствует гостя фразой,
Привет, guest! Вы знаете, что в Вашем имени 5 символов?
Нас уже посетили:
|
и далее выводит список.
Список должен выглядеть как таблица cо строками
| N | Гость |визит| x |
----------------------------
| 1 | Name1 | 3 | del |
| 2 | Name2 | 1 | del |
| 3 | Name3 | 5 | del |
| и т.д.
первое число (N) - просто графа для нумерации строк в списке. Последовательной непрерывной нумерации.
второе число (визит) - количество посещений этого гостя.
Строки (Name) и соответствующее слово (del) должны быть оформлены в виде ссылок:
Name - ссылкой на скрипт поиска имени в списке, а del - ссылкой на скрипт удаления имени.
В конце списка должна быть форма поиска пункта (б)
б) поиск в списке. форма должна отправлять искомое имя методом GET (как большинство поисковиков) и обрабатываться тем же скриптом, что и ссылки имен из таблицы.
в) По ссылке удаления должно всплывать alert-окно подтверждения с вопросом
Name! Вы действительно хотите вычеркнуть себя?
| при утвердительном ответе строка уходит из таблицы.
Уровень сложности этой задаче, надеюсь, поставит cheops - я затрудняюсь с оценкой, а у него опыт. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| | Большая просьба не размешать ответы здесь - для регистрации своего ответа следует воспользоваться формой по ссылке. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| |
CREATE TABLE guests (
id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
guestname TINYINT NOT NULL
visits INT(11) NOT NULL
);
|
Поле guestname типа TINYINT, это так и задумано? Там, кстати, запятой, в конце строки еще не хватает. :)
И еще:
Есть ли ограничение на кол-во символов в имени?
Где должно быть поле ввода своего имени? Там же, где и форма поиска, после таблицы? | |
|
|
|
|
|
|
|
для: Drago
(22.05.2007 в 23:56)
| | Есть такое дело, поправил в оригинальном тексте задачи
http://www.softtime.ru/info/task.php?id_article=110 | |
|
|
|
|
|
|
|
для: Drago
(22.05.2007 в 23:56)
| | >Поле guestname типа TINYINT, это так и задумано?
TINYTEXT конечно.
>Там, кстати, запятой, в конце строки еще не хватает. :)
Да... увы, всего сразу не вылижешь.
>И еще:
>Есть ли ограничение на кол-во символов в имени?
Скрипт должен устойчиво работать на той длине имени, которая помещается в поле таблицы. То есть на 255 символах. Скрипт может отвергать более длинные имена.
>Где должно быть поле ввода своего имени? Там же, где и форма поиска, после таблицы?
На странице, выводимой скриптом, когда он вызван без параметров.
Еще предвосхиищаю вопрос - что должен делать скрипт в процессе поиска:
Вывести одну строку таблицы, либо сообщение о том, что такой гость не появлялся.
Впрочем, если диагностика результата поиска будет выполнена как-то по-другому - я очки снимать не буду. Сам прохлопал. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 00:34)
| | 1. Удалять можно только себя? Скрипт должен проверять кто удаляет запись?
2. Вести учет посещений пользователя guest? | |
|
|
|
|
|
|
|
для: Artem S.
(23.05.2007 в 16:45)
| | guest только пример.
удалять можно кому угодно кого угодно.
задача - не на аутентификацию. А лишь на корректное обращение с данными.
На методику аутентификации надо будет отдельную задачку придумать. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 16:57)
| | Trianon, я вот не совсем понимаю.
Задачки здесь даются авторами, у которых уже есть свой готовый вариант или он хочет посмотреть на варианты пользователей? | |
|
|
|
|
|
|
|
для: mr Bin
(23.05.2007 в 21:49)
| | Регламент здесь устанавливает cheops. Он же придумал большинство задач. Некоторые были предложены посетителями.
Насколько я понимаю, задачи здесь должны быть учебными. То есть достаточно короткие с одной стороны, и демонстрирующие определенные приемы, или подход к решению определенных проблем, часто встречающихся на практике. Я припоминаю лишь одно исключение из этого правила.
Есть ли у меня готовый вариант?
Хороший вопрос. Честно отвечу - нет.
У меня есть четкое представление, как его писать.
Наверное напишу. Если аврала не возникнет внезапно. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 22:14)
| | Ну то что Вы напишете - сомневаться не приходится. Спасибо за ответ. | |
|
|
|
|
|
|
|
для: mr Bin
(23.05.2007 в 21:49)
| | Задачки здесь задаются любым желающим (лучше конечно с согласованием с администрацией, чтобы её оформить как следует, при необходимости отредактировать), но не для того, чтобы получить готовое решение, а чтобы продемонстрировать приём и помочь другим с его освоением (из постановки задачи сразу видно, чего автор добиться хочет). Автор конечно должен иметь свой вариант решения, на тот случай если никто решать не будет... я и сам будут решать задачу если ответов не будет или не будет ни одного правильного ответа (правда один ответ уже предложен - правильность до публикации правда никогда не смотрим). Цель задач не получить ответ, а заострить внимание на проблем (стандартной или не очень). | |
|
|
|
|
|
|
|
для: cheops
(24.05.2007 в 00:02)
| | > на тот случай если никто решать не будет... я и сам будут решать задачу если ответов не будет или не будет ни одного правильного ответа (правда один ответ уже предложен - правильность до публикации правда никогда не смотрим).
Один ответ - это мало.....
Игорь.... Я вчера (точнее - сегодня ночью :), прочитав Ваш пост, устыдился и стал решать свою же задачу. И вот какая петрушка получается.... задача-то оказалась неожиданно куда сложней, чем представлялось. Точнее даже не сложной, а насыщенной.
Помнится, время, отводимое на решение на закате задачного бума было - неделя. Может быть стоит продлить срок до конца недели хотя бы?
Мало ли, заинтересуется еще кто....
А? | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 11:31)
| | Было бы больше ответов, если бы был приз :) например месяц хостинга :)
А так у людей всегда своих проблем хватает, и писать, пока на данный момент не нужный ему скрипт - мало кто захочет. | |
|
|
|
|
|
|
|
для: mr Bin
(24.05.2007 в 12:19)
| | Идёт - победитель (определяется Trianon и мной) получает месяц бесплатного хостинга на st-host.ru. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 11:31)
| | Хм... собственно я так и увеличил время до 1 июня, т.е. остаётся неделя, начиная с сегодняшнего числа или вы предлагаете до 3 июня продлить срок приёма ответов? | |
|
|
|
|
|
|
|
для: cheops
(24.05.2007 в 12:25)
| | нет :) я просто не видел про 1 июня. :)
видел "в ночь с четверга на пятницу" ... э...золушка остается бухать с мышами в тыкве.
Полагаю, до конца месяца - с лихвой хватит. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 12:35)
| | Ну вот так всегда... не успел отправить ответ, как время на решение увеличили, да еще и приз выделили. :)) | |
|
|
|
|
|
|
|
для: Drago
(24.05.2007 в 17:18)
| | Ответов от каждого имени можно слать несколько.
Традиционно рассматривается и оценивается последний.
Так что еще не вечер :) | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 17:28)
| | Ну это другое дело :)
Кстати, такой вопрос: Было сказано, что можно использовать абсолютно любые символы. А как на счет пробелов в начале и в конце? А также, имен состоящих только из пробелов? Имхо, это лишнее. Можно ли использовать в этом случае функцию trim()? | |
|
|
|
|
|
|
|
для: Drago
(24.05.2007 в 17:46)
| | Вы, конечно, можете использовать всё что угодно. :)
Но если я поздороваюсь именем с пробелами вокруг слова своим скриптом....
А потом поищу такое же или попробую удалить запись из таблицы - Вашим скриптом....
Ну или наоборот.
Что тогда будет?
То-то... | |
|
|
|
|
автор: cheops (из кафе) (24.05.2007 в 17:58) |
|
|
для: Drago
(24.05.2007 в 17:18)
| | Да, ответов можно присылать сколько угодно - будет взят только последний. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| | Хм... заинтриговало сообщение НА ПЕРВЫЙ ВЗГЛЯД ЛЕГКО, А ПОТОМ ОКАЗЫЫАВАЕТСЯ СЛОЖНО :) Надо будет попробовать, интересно смогу решить или нет )))
ЗЫ. два вопроса:
1. До кокого числа принимаются ответы
2. Вы бы не могли более точно объяснить как присылать ответ (не просто же взять, создать тему и всё... хотя ))) ) | |
|
|
|
|
|
|
|
для: DEM
(24.05.2007 в 23:40)
| | Чтобы получить ответы на Ваши вопросы, надо почитать эту тему. | |
|
|
|
|
|
|
|
для: DEM
(24.05.2007 в 23:40)
| | Ответы принимаются до 1 июня 2007 года (т.е. времени примерно неделя).
Оставлять ответы следует в специальной форме по ссылке http://www.softtime.ru/task/addthemeform.php?id_task=21 - во время X (т.е. в ночь на 1 июня 2007 года) они все будут автоматически размещены в этой ветке форума, после чего начнётся их оценка. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| | И наверное последний вопрос:
То есть, если я например вычеркну себя из списка, а потом зайду, то у меня визиты при следуюющем заходе станут равны 0? Просто как-то запутался))) | |
|
|
|
|
|
|
|
для: DEM
(25.05.2007 в 11:30)
| | ну - по идее - единице . Вы же зашли повторно. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| | И еще... Ненмого не правильно создана таблица:
CREATE TABLE `guests` (
`id` int(11) NOT NULL auto_increment,
`guestname` varchar(255) NOT NULL default '0',
`visits` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;
|
Так лучше... Так как в вашей в имени гостя могут быть только цифры и после "guestname TINYINT NOT NULL" нет запятой .
ДОБАВЛЕНО:
Упс... только прочитал, что ошибку уже аншли ))) Соррь...
И у меня еще пара вопросов :)
1) На сколько примерно строк должен быть код? А то у меня уже перевалил за 100, но уже скоро будет готово )))
2) Я могу занести сколько угодно гостей в таблицу или только одного? И если только одного, то могу ли я удалять других? | |
|
|
|
|
|
|
|
для: DEM
(25.05.2007 в 12:55)
| | Эту ошибку поправил и я и cheops (23.05.2007 в 00:09) в заданиях.
Так что символы - еще раз подчеркиваю - любые.
Можно говорить о том, что varchar(255) лучше или хуже tinytext , но различия у них минимальны.
кодовую страницу я специально не навязывал, вдруг кому-то проще будет работать не в cp1251, а в utf8.
Прямых ограничений на размер кода нет.
Косвенно, естественно, на читабельность будет влиять.
Могу сказать, что завидую Вам в этом пункте, потому что у меня около 170, а в него еще коментарии вставлять... Это при там что я пишу возможно более лаконично.
Как это одного?
Еще раз.
Подходит человек к компу - пишет имя.
Другой подойдет - свое напишет. и так далее.
Два раза подошел - два визита.
Вытер имя - остались только остальные.
И повторяю, задача не на аутентификацию. Никаких логинов, паролей, сессий, и прочего в ней нет. Только то что написано.
И этого хватает за глаза, и как оказалось, по самые яйцы. | |
|
|
|
|
|
|
|
для: Trianon
(25.05.2007 в 13:15)
| | Я и забыл что комментарии нужны )))
ЗЫ. Вопрос отпал....
ЗЗЫ. и вот еще один вопрос назрел :) visits обновляется только по кнопке ЗАЙТИ СНОВА? | |
|
|
|
|
|
|
|
для: Trianon
(25.05.2007 в 13:15)
| | Если нет сессий, то как можно напистаь приветствие с именем? Хранить имя в хидден поле, что ли))) | |
|
|
|
|
|
|
|
для: DEM
(25.05.2007 в 13:31)
| | Отправил своё решение, надеюсь ничего не забыл туда включить )))
И снова вопрос ))) Если я например захочу изменить своё решение, то мне просто надо будет прислать новое и тогда старое не будет проверяться (ну или просто заменится)? | |
|
|
|
|
|
|
|
для: DEM
(25.05.2007 в 14:00)
| | (24.05.2007 в 17:28)
Более четко, чем это сделал cheops (24.05.2007 в 17:58), я на этот вопрос ответить не могу. | |
|
|
|
|
|
|
|
для: Trianon
(25.05.2007 в 14:29)
| | Долго пытался отправить ответ через форму.
Виснет.
Результат, конечно, не понять.
Соответственно там
- либо один ответ (как-то неверится)
- либо куча совершенно одинаковых
- либо ни одного.
Поскольку ни на приз, ни на место я не претендую, эта проблема меня особо не волнует...
Если не получится сегодня отправить ночью, завтра прикреплю сюда zip-ом.
UPD. Из дому ответ таки ушел. Вроде как. | |
|
|
|
|
|
|
|
для: Trianon
(30.05.2007 в 19:28)
| | Отправил, решил тоже поучаствовать =P | |
|
|
|
|
|
|
|
для: Artem S.
(30.05.2007 в 23:31)
| | О! В бой пошли ветераны! :))) | |
|
|
|
|
|
|
|
для: Trianon
(30.05.2007 в 19:28)
| | >UPD. Из дому ответ таки ушел. Вроде как.
Да, ответ зарегистрировался. | |
|
|
|
|
|
|
|
для: cheops
(31.05.2007 в 02:17)
| | Надеюсь успел? | |
|
|
|
|
|
|
|
для: sms-send
(31.05.2007 в 23:41)
| | Да, успели. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 18:01)
| | Вот и первое, вот и вывешены задания )))
Будем ждать мнения судей ))) | |
|
|
|